hackmud-script-manager 0.19.1-bd545f5 → 0.19.1-cb8d65f
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/bin/hsm.js +180 -232
- package/generateTypeDeclaration.js +1 -1
- package/package.json +4 -9
- package/processScript/index.js +257 -240
- package/processScript/minify.js +380 -394
- package/processScript/preprocess.js +93 -93
- package/processScript/shared.js +11 -11
- package/processScript/transform.js +566 -559
- package/pull.js +1 -1
- package/push.js +2 -2
- package/{bin → src/bin}/hsm.d.ts +0 -0
- package/src/generateTypeDeclaration.d.ts +2 -0
- package/src/processScript/index.d.ts +31 -0
- package/src/processScript/minify.d.ts +18 -0
- package/src/processScript/preprocess.d.ts +9 -0
- package/{processScript → src/processScript}/shared.d.ts +1 -1
- package/src/processScript/transform.d.ts +18 -0
- package/src/pull.d.ts +6 -0
- package/src/push.d.ts +29 -0
- package/{syncMacros.d.ts → src/syncMacros.d.ts} +1 -1
- package/src/watch.d.ts +15 -0
- package/syncMacros.js +1 -1
- package/watch.js +11 -11
- package/generateTypeDeclaration.d.ts +0 -2
- package/processScript/index.d.ts +0 -40
- package/processScript/minify.d.ts +0 -24
- package/processScript/preprocess.d.ts +0 -12
- package/processScript/transform.d.ts +0 -24
- package/pull.d.ts +0 -9
- package/push.d.ts +0 -37
- package/tsconfig.tsbuildinfo +0 -1
- package/watch.d.ts +0 -20
- /package/{constants.d.ts → src/constants.d.ts} +0 -0
- /package/{index.d.ts → src/index.d.ts} +0 -0
- /package/{processScript → src/processScript}/postprocess.d.ts +0 -0
| @@ -20,388 +20,294 @@ const { default: traverse } = babelTraverse, | |
| 20 20 | 
             
            		"String",
         | 
| 21 21 | 
             
            		"Symbol",
         | 
| 22 22 | 
             
            		"BigInt"
         | 
| 23 | 
            -
            	] | 
| 24 | 
            -
             | 
| 25 | 
            -
             | 
| 26 | 
            -
             | 
| 27 | 
            -
             | 
| 28 | 
            -
             | 
| 29 | 
            -
             | 
| 30 | 
            -
             | 
| 31 | 
            -
             | 
| 32 | 
            -
             | 
| 33 | 
            -
             | 
| 34 | 
            -
             | 
| 35 | 
            -
             | 
| 36 | 
            -
             | 
| 37 | 
            -
            			}
         | 
| 38 | 
            -
            		})
         | 
| 39 | 
            -
            		if (program.scope.hasGlobal("_SOURCE"))
         | 
| 40 | 
            -
            			for (const referencePath of getReferencePathsToGlobal("_SOURCE", program))
         | 
| 41 | 
            -
            				referencePath.replaceWith(t.stringLiteral(sourceCode))
         | 
| 42 | 
            -
            		if (program.scope.hasGlobal("_BUILD_DATE"))
         | 
| 43 | 
            -
            			for (const referencePath of getReferencePathsToGlobal("_BUILD_DATE", program))
         | 
| 44 | 
            -
            				referencePath.replaceWith(t.numericLiteral(Date.now()))
         | 
| 45 | 
            -
            		if (program.scope.hasGlobal("_SCRIPT_USER"))
         | 
| 46 | 
            -
            			for (const referencePath of getReferencePathsToGlobal("_SCRIPT_USER", program))
         | 
| 47 | 
            -
            				1 == scriptUser ?
         | 
| 48 | 
            -
            					referencePath.replaceWith(t.stringLiteral(`$${uniqueID}$SCRIPT_USER$`))
         | 
| 49 | 
            -
            				:	referencePath.replaceWith(t.stringLiteral(scriptUser))
         | 
| 50 | 
            -
            		if (program.scope.hasGlobal("_SCRIPT_NAME"))
         | 
| 51 | 
            -
            			for (const referencePath of getReferencePathsToGlobal("_SCRIPT_NAME", program))
         | 
| 52 | 
            -
            				1 == scriptName ?
         | 
| 53 | 
            -
            					referencePath.replaceWith(t.stringLiteral(`$${uniqueID}$SCRIPT_NAME$`))
         | 
| 54 | 
            -
            				:	referencePath.replaceWith(t.stringLiteral(scriptName))
         | 
| 55 | 
            -
            		if (program.scope.hasGlobal("_FULL_SCRIPT_NAME"))
         | 
| 56 | 
            -
            			for (const referencePath of getReferencePathsToGlobal("_FULL_SCRIPT_NAME", program))
         | 
| 57 | 
            -
            				1 == scriptUser || 1 == scriptName ?
         | 
| 58 | 
            -
            					referencePath.replaceWith(t.stringLiteral(`$${uniqueID}$FULL_SCRIPT_NAME$`))
         | 
| 59 | 
            -
            				:	referencePath.replaceWith(t.stringLiteral(`${scriptUser}.${scriptName}`))
         | 
| 60 | 
            -
            		let functionDotPrototypeIsReferencedMultipleTimes = !1
         | 
| 61 | 
            -
            		const createGetFunctionPrototypeNode = () => {
         | 
| 62 | 
            -
            			for (const globalFunction of globalFunctionsUnder7Characters)
         | 
| 63 | 
            -
            				if (!program.scope.hasOwnBinding(globalFunction))
         | 
| 64 | 
            -
            					return t.memberExpression(
         | 
| 65 | 
            -
            						t.memberExpression(t.identifier(globalFunction), t.identifier("constructor")),
         | 
| 66 | 
            -
            						t.identifier("prototype")
         | 
| 67 | 
            -
            					)
         | 
| 68 | 
            -
            			return t.memberExpression(
         | 
| 69 | 
            -
            				t.memberExpression(
         | 
| 70 | 
            -
            					t.arrowFunctionExpression([t.identifier("_")], t.identifier("_")),
         | 
| 71 | 
            -
            					t.identifier("constructor")
         | 
| 72 | 
            -
            				),
         | 
| 73 | 
            -
            				t.identifier("prototype")
         | 
| 74 | 
            -
            			)
         | 
| 23 | 
            +
            	]
         | 
| 24 | 
            +
            function transform(
         | 
| 25 | 
            +
            	file,
         | 
| 26 | 
            +
            	sourceCode,
         | 
| 27 | 
            +
            	{ uniqueID = "00000000000", scriptUser = "UNKNOWN", scriptName = "UNKNOWN", seclevel = 4 } = {}
         | 
| 28 | 
            +
            ) {
         | 
| 29 | 
            +
            	const topFunctionName = `_${uniqueID}_SCRIPT_`,
         | 
| 30 | 
            +
            		exports = new Map(),
         | 
| 31 | 
            +
            		liveExports = new Map()
         | 
| 32 | 
            +
            	let program
         | 
| 33 | 
            +
            	traverse(file, {
         | 
| 34 | 
            +
            		Program(path) {
         | 
| 35 | 
            +
            			program = path
         | 
| 36 | 
            +
            			path.skip()
         | 
| 75 37 | 
             
            		}
         | 
| 76 | 
            -
             | 
| 77 | 
            -
             | 
| 78 | 
            -
             | 
| 79 | 
            -
             | 
| 38 | 
            +
            	})
         | 
| 39 | 
            +
            	if (program.scope.hasGlobal("_SOURCE"))
         | 
| 40 | 
            +
            		for (const referencePath of getReferencePathsToGlobal("_SOURCE", program))
         | 
| 41 | 
            +
            			referencePath.replaceWith(t.stringLiteral(sourceCode))
         | 
| 42 | 
            +
            	if (program.scope.hasGlobal("_BUILD_DATE"))
         | 
| 43 | 
            +
            		for (const referencePath of getReferencePathsToGlobal("_BUILD_DATE", program))
         | 
| 44 | 
            +
            			referencePath.replaceWith(t.numericLiteral(Date.now()))
         | 
| 45 | 
            +
            	if (program.scope.hasGlobal("_SCRIPT_USER"))
         | 
| 46 | 
            +
            		for (const referencePath of getReferencePathsToGlobal("_SCRIPT_USER", program))
         | 
| 47 | 
            +
            			referencePath.replaceWith(t.stringLiteral(1 == scriptUser ? `$${uniqueID}$SCRIPT_USER$` : scriptUser))
         | 
| 48 | 
            +
            	if (program.scope.hasGlobal("_SCRIPT_NAME"))
         | 
| 49 | 
            +
            		for (const referencePath of getReferencePathsToGlobal("_SCRIPT_NAME", program))
         | 
| 50 | 
            +
            			referencePath.replaceWith(t.stringLiteral(1 == scriptName ? `$${uniqueID}$SCRIPT_NAME$` : scriptName))
         | 
| 51 | 
            +
            	if (program.scope.hasGlobal("_FULL_SCRIPT_NAME"))
         | 
| 52 | 
            +
            		for (const referencePath of getReferencePathsToGlobal("_FULL_SCRIPT_NAME", program))
         | 
| 53 | 
            +
            			referencePath.replaceWith(
         | 
| 54 | 
            +
            				t.stringLiteral(
         | 
| 55 | 
            +
            					1 == scriptUser || 1 == scriptName ?
         | 
| 56 | 
            +
            						`$${uniqueID}$FULL_SCRIPT_NAME$`
         | 
| 57 | 
            +
            					:	`${scriptUser}.${scriptName}`
         | 
| 58 | 
            +
            				)
         | 
| 59 | 
            +
            			)
         | 
| 60 | 
            +
            	let functionDotPrototypeIsReferencedMultipleTimes = !1
         | 
| 61 | 
            +
            	if (program.scope.hasGlobal("Function")) {
         | 
| 62 | 
            +
            		const FunctionReferencePaths = getReferencePathsToGlobal("Function", program)
         | 
| 63 | 
            +
            		if (1 == FunctionReferencePaths.length) {
         | 
| 64 | 
            +
            			const referencePath = FunctionReferencePaths[0]
         | 
| 65 | 
            +
            			assert(
         | 
| 66 | 
            +
            				"MemberExpression" == referencePath.parent.type,
         | 
| 67 | 
            +
            				"src/processScript/transform.ts:89:8 `Function` isn't available in hackmud, only `Function.prototype` is accessible"
         | 
| 68 | 
            +
            			)
         | 
| 69 | 
            +
            			assert(
         | 
| 70 | 
            +
            				"Identifier" == referencePath.parent.property.type,
         | 
| 71 | 
            +
            				"src/processScript/transform.ts:94:8 `Function` isn't available in hackmud, only `Function.prototype` is accessible"
         | 
| 72 | 
            +
            			)
         | 
| 73 | 
            +
            			assert(
         | 
| 74 | 
            +
            				"prototype" == referencePath.parent.property.name,
         | 
| 75 | 
            +
            				"src/processScript/transform.ts:99:8 `Function` isn't available in hackmud, only `Function.prototype` is accessible"
         | 
| 76 | 
            +
            			)
         | 
| 77 | 
            +
            			referencePath.parentPath.replaceWith(createGetFunctionPrototypeNode())
         | 
| 78 | 
            +
            		} else {
         | 
| 79 | 
            +
            			for (const referencePath of FunctionReferencePaths) {
         | 
| 80 80 | 
             
            				assert(
         | 
| 81 81 | 
             
            					"MemberExpression" == referencePath.parent.type,
         | 
| 82 | 
            -
            					"`Function` isn't available in hackmud, only `Function.prototype` is accessible"
         | 
| 82 | 
            +
            					"src/processScript/transform.ts:107:9 `Function` isn't available in hackmud, only `Function.prototype` is accessible"
         | 
| 83 83 | 
             
            				)
         | 
| 84 84 | 
             
            				assert(
         | 
| 85 85 | 
             
            					"Identifier" == referencePath.parent.property.type,
         | 
| 86 | 
            -
            					"`Function` isn't available in hackmud, only `Function.prototype` is accessible"
         | 
| 86 | 
            +
            					"src/processScript/transform.ts:112:9 `Function` isn't available in hackmud, only `Function.prototype` is accessible"
         | 
| 87 87 | 
             
            				)
         | 
| 88 88 | 
             
            				assert(
         | 
| 89 89 | 
             
            					"prototype" == referencePath.parent.property.name,
         | 
| 90 | 
            -
            					"`Function` isn't available in hackmud, only `Function.prototype` is accessible"
         | 
| 90 | 
            +
            					"src/processScript/transform.ts:117:9 `Function` isn't available in hackmud, only `Function.prototype` is accessible"
         | 
| 91 91 | 
             
            				)
         | 
| 92 | 
            -
            				referencePath.parentPath.replaceWith(createGetFunctionPrototypeNode())
         | 
| 93 | 
            -
            			} else {
         | 
| 94 | 
            -
            				for (const referencePath of FunctionReferencePaths) {
         | 
| 95 | 
            -
            					assert(
         | 
| 96 | 
            -
            						"MemberExpression" == referencePath.parent.type,
         | 
| 97 | 
            -
            						"`Function` isn't available in hackmud, only `Function.prototype` is accessible"
         | 
| 98 | 
            -
            					)
         | 
| 99 | 
            -
            					assert(
         | 
| 100 | 
            -
            						"Identifier" == referencePath.parent.property.type,
         | 
| 101 | 
            -
            						"`Function` isn't available in hackmud, only `Function.prototype` is accessible"
         | 
| 102 | 
            -
            					)
         | 
| 103 | 
            -
            					assert(
         | 
| 104 | 
            -
            						"prototype" == referencePath.parent.property.name,
         | 
| 105 | 
            -
            						"`Function` isn't available in hackmud, only `Function.prototype` is accessible"
         | 
| 106 | 
            -
            					)
         | 
| 107 | 
            -
            					functionDotPrototypeIsReferencedMultipleTimes = !0
         | 
| 108 | 
            -
            					referencePath.parentPath.replaceWith(t.identifier(`_${uniqueID}_FUNCTION_DOT_PROTOTYPE_`))
         | 
| 109 | 
            -
            				}
         | 
| 110 92 | 
             
            				functionDotPrototypeIsReferencedMultipleTimes = !0
         | 
| 93 | 
            +
            				referencePath.parentPath.replaceWith(t.identifier(`_${uniqueID}_FUNCTION_DOT_PROTOTYPE_`))
         | 
| 111 94 | 
             
            			}
         | 
| 95 | 
            +
            			functionDotPrototypeIsReferencedMultipleTimes = !0
         | 
| 112 96 | 
             
            		}
         | 
| 113 | 
            -
             | 
| 114 | 
            -
             | 
| 115 | 
            -
             | 
| 116 | 
            -
             | 
| 117 | 
            -
             | 
| 118 | 
            -
             | 
| 119 | 
            -
             | 
| 120 | 
            -
             | 
| 121 | 
            -
             | 
| 122 | 
            -
             | 
| 123 | 
            -
             | 
| 124 | 
            -
             | 
| 125 | 
            -
             | 
| 126 | 
            -
             | 
| 127 | 
            -
             | 
| 128 | 
            -
             | 
| 129 | 
            -
             | 
| 130 | 
            -
             | 
| 131 | 
            -
             | 
| 132 | 
            -
             | 
| 133 | 
            -
             | 
| 134 | 
            -
             | 
| 135 | 
            -
             | 
| 136 | 
            -
             | 
| 137 | 
            -
             | 
| 138 | 
            -
             | 
| 139 | 
            -
             | 
| 140 | 
            -
             | 
| 141 | 
            -
             | 
| 142 | 
            -
             | 
| 143 | 
            -
            			 | 
| 144 | 
            -
             | 
| 145 | 
            -
            			 | 
| 146 | 
            -
            				 | 
| 147 | 
            -
            				 | 
| 148 | 
            -
            			 | 
| 149 | 
            -
             | 
| 150 | 
            -
             | 
| 151 | 
            -
             | 
| 152 | 
            -
            				 | 
| 153 | 
            -
             | 
| 154 | 
            -
             | 
| 155 | 
            -
             | 
| 156 | 
            -
            				detectedSeclevel = 1
         | 
| 157 | 
            -
            				processFakeSubscriptObject(fakeSubscriptObjectName)
         | 
| 97 | 
            +
            	}
         | 
| 98 | 
            +
            	const neededSubscriptLets = new Set()
         | 
| 99 | 
            +
            	let detectedSeclevel = 4
         | 
| 100 | 
            +
            	for (const fakeSubscriptObjectName of ["$fs", "$4s", "$s"])
         | 
| 101 | 
            +
            		program.scope.hasGlobal(fakeSubscriptObjectName) && processFakeSubscriptObject(fakeSubscriptObjectName)
         | 
| 102 | 
            +
            	for (const fakeSubscriptObjectName of ["$hs", "$3s"])
         | 
| 103 | 
            +
            		if (program.scope.hasGlobal(fakeSubscriptObjectName)) {
         | 
| 104 | 
            +
            			detectedSeclevel = 3
         | 
| 105 | 
            +
            			processFakeSubscriptObject(fakeSubscriptObjectName)
         | 
| 106 | 
            +
            		}
         | 
| 107 | 
            +
            	for (const fakeSubscriptObjectName of ["$ms", "$2s"])
         | 
| 108 | 
            +
            		if (program.scope.hasGlobal(fakeSubscriptObjectName)) {
         | 
| 109 | 
            +
            			detectedSeclevel = 2
         | 
| 110 | 
            +
            			processFakeSubscriptObject(fakeSubscriptObjectName)
         | 
| 111 | 
            +
            		}
         | 
| 112 | 
            +
            	for (const fakeSubscriptObjectName of ["$ls", "$1s"])
         | 
| 113 | 
            +
            		if (program.scope.hasGlobal(fakeSubscriptObjectName)) {
         | 
| 114 | 
            +
            			detectedSeclevel = 1
         | 
| 115 | 
            +
            			processFakeSubscriptObject(fakeSubscriptObjectName)
         | 
| 116 | 
            +
            		}
         | 
| 117 | 
            +
            	for (const fakeSubscriptObjectName of ["$ns", "$0s"])
         | 
| 118 | 
            +
            		if (program.scope.hasGlobal(fakeSubscriptObjectName)) {
         | 
| 119 | 
            +
            			detectedSeclevel = 0
         | 
| 120 | 
            +
            			processFakeSubscriptObject(fakeSubscriptObjectName)
         | 
| 121 | 
            +
            		}
         | 
| 122 | 
            +
            	seclevel = Math.min(seclevel, detectedSeclevel)
         | 
| 123 | 
            +
            	const neededDbMethodLets = new Set()
         | 
| 124 | 
            +
            	if (program.scope.hasGlobal("$db"))
         | 
| 125 | 
            +
            		for (const referencePath of getReferencePathsToGlobal("$db", program)) {
         | 
| 126 | 
            +
            			assert("MemberExpression" == referencePath.parentPath.node.type, "src/processScript/transform.ts:171:69")
         | 
| 127 | 
            +
            			assert("Identifier" == referencePath.parentPath.node.property.type, "src/processScript/transform.ts:172:72")
         | 
| 128 | 
            +
            			const databaseOpMethodName = referencePath.parentPath.node.property.name
         | 
| 129 | 
            +
            			assert(
         | 
| 130 | 
            +
            				validDBMethods.includes(databaseOpMethodName),
         | 
| 131 | 
            +
            				`src/processScript/transform.ts:178:8 invalid db method "${databaseOpMethodName}", valid db methods are "${validDBMethods.join('", "')}"`
         | 
| 132 | 
            +
            			)
         | 
| 133 | 
            +
            			if ("CallExpression" == referencePath.parentPath.parentPath?.type)
         | 
| 134 | 
            +
            				referencePath.parentPath.replaceWith(t.identifier(`$${uniqueID}$DB$${databaseOpMethodName}$`))
         | 
| 135 | 
            +
            			else {
         | 
| 136 | 
            +
            				referencePath.parentPath.replaceWith(
         | 
| 137 | 
            +
            					t.identifier(`_${uniqueID}_CONSOLE_METHOD_${databaseOpMethodName}_`)
         | 
| 138 | 
            +
            				)
         | 
| 139 | 
            +
            				neededDbMethodLets.add(databaseOpMethodName)
         | 
| 158 140 | 
             
            			}
         | 
| 159 | 
            -
            		 | 
| 160 | 
            -
             | 
| 161 | 
            -
             | 
| 162 | 
            -
             | 
| 141 | 
            +
            		}
         | 
| 142 | 
            +
            	let needDebugLet = !1
         | 
| 143 | 
            +
            	if (program.scope.hasGlobal("$D"))
         | 
| 144 | 
            +
            		for (const referencePath of getReferencePathsToGlobal("$D", program))
         | 
| 145 | 
            +
            			if ("CallExpression" == referencePath.parentPath.type)
         | 
| 146 | 
            +
            				referencePath.replaceWith(t.identifier(`$${uniqueID}$DEBUG$`))
         | 
| 147 | 
            +
            			else {
         | 
| 148 | 
            +
            				referencePath.replaceWith(t.identifier(`_${uniqueID}_DEBUG_`))
         | 
| 149 | 
            +
            				needDebugLet = !0
         | 
| 163 150 | 
             
            			}
         | 
| 164 | 
            -
             | 
| 165 | 
            -
            		const  | 
| 166 | 
            -
             | 
| 167 | 
            -
             | 
| 168 | 
            -
             | 
| 169 | 
            -
             | 
| 170 | 
            -
             | 
| 171 | 
            -
             | 
| 172 | 
            -
             | 
| 173 | 
            -
             | 
| 174 | 
            -
             | 
| 175 | 
            -
             | 
| 176 | 
            -
             | 
| 177 | 
            -
            				 | 
| 178 | 
            -
             | 
| 179 | 
            -
             | 
| 180 | 
            -
            					 | 
| 181 | 
            -
            					neededDbMethodLets.add(databaseOpMethodName)
         | 
| 151 | 
            +
            	if (program.scope.hasGlobal("$FMCL"))
         | 
| 152 | 
            +
            		for (const referencePath of getReferencePathsToGlobal("$FMCL", program))
         | 
| 153 | 
            +
            			referencePath.replaceWith(t.identifier(`$${uniqueID}$FMCL$`))
         | 
| 154 | 
            +
            	if (program.scope.hasGlobal("$G"))
         | 
| 155 | 
            +
            		for (const referencePath of getReferencePathsToGlobal("$G", program))
         | 
| 156 | 
            +
            			referencePath.replaceWith(t.identifier(`$${uniqueID}$GLOBAL$`))
         | 
| 157 | 
            +
            	if (program.scope.hasGlobal("_SECLEVEL"))
         | 
| 158 | 
            +
            		for (const referencePath of getReferencePathsToGlobal("_SECLEVEL", program))
         | 
| 159 | 
            +
            			referencePath.replaceWith(t.numericLiteral(seclevel))
         | 
| 160 | 
            +
            	let needGetPrototypeOf = !1
         | 
| 161 | 
            +
            	if (program.scope.hasGlobal("Object"))
         | 
| 162 | 
            +
            		for (const referencePath of getReferencePathsToGlobal("Object", program))
         | 
| 163 | 
            +
            			if ("MemberExpression" == referencePath.parent.type && !referencePath.parent.computed) {
         | 
| 164 | 
            +
            				assert("Identifier" == referencePath.parent.property.type, "src/processScript/transform.ts:225:64")
         | 
| 165 | 
            +
            				if ("getPrototypeOf" == referencePath.parent.property.name) {
         | 
| 166 | 
            +
            					referencePath.parentPath.replaceWith(t.identifier(`_${uniqueID}_GET_PROTOTYPE_OF_`))
         | 
| 167 | 
            +
            					needGetPrototypeOf = !0
         | 
| 182 168 | 
             
            				}
         | 
| 183 169 | 
             
            			}
         | 
| 184 | 
            -
             | 
| 185 | 
            -
             | 
| 186 | 
            -
             | 
| 187 | 
            -
             | 
| 188 | 
            -
             | 
| 189 | 
            -
            				 | 
| 190 | 
            -
            					 | 
| 191 | 
            -
             | 
| 192 | 
            -
            				 | 
| 193 | 
            -
            		if (program.scope.hasGlobal("$FMCL"))
         | 
| 194 | 
            -
            			for (const referencePath of getReferencePathsToGlobal("$FMCL", program))
         | 
| 195 | 
            -
            				referencePath.replaceWith(t.identifier(`$${uniqueID}$FMCL$`))
         | 
| 196 | 
            -
            		if (program.scope.hasGlobal("$G"))
         | 
| 197 | 
            -
            			for (const referencePath of getReferencePathsToGlobal("$G", program))
         | 
| 198 | 
            -
            				referencePath.replaceWith(t.identifier(`$${uniqueID}$GLOBAL$`))
         | 
| 199 | 
            -
            		if (program.scope.hasGlobal("_SECLEVEL"))
         | 
| 200 | 
            -
            			for (const referencePath of getReferencePathsToGlobal("_SECLEVEL", program))
         | 
| 201 | 
            -
            				referencePath.replaceWith(t.numericLiteral(seclevel))
         | 
| 202 | 
            -
            		let needGetPrototypeOf = !1
         | 
| 203 | 
            -
            		if (program.scope.hasGlobal("Object"))
         | 
| 204 | 
            -
            			for (const referencePath of getReferencePathsToGlobal("Object", program))
         | 
| 205 | 
            -
            				if ("MemberExpression" == referencePath.parent.type && !referencePath.parent.computed) {
         | 
| 206 | 
            -
            					assert("Identifier" == referencePath.parent.property.type)
         | 
| 207 | 
            -
            					if ("getPrototypeOf" == referencePath.parent.property.name) {
         | 
| 208 | 
            -
            						referencePath.parentPath.replaceWith(t.identifier(`_${uniqueID}_GET_PROTOTYPE_OF_`))
         | 
| 209 | 
            -
            						needGetPrototypeOf = !0
         | 
| 210 | 
            -
            					}
         | 
| 211 | 
            -
            				}
         | 
| 212 | 
            -
            		const consoleMethodsReferenced = new Set()
         | 
| 213 | 
            -
            		if (program.scope.hasGlobal("console"))
         | 
| 214 | 
            -
            			for (const referencePath of getReferencePathsToGlobal("console", program))
         | 
| 215 | 
            -
            				if ("MemberExpression" == referencePath.parent.type && !referencePath.parent.computed) {
         | 
| 216 | 
            -
            					assert("Identifier" == referencePath.parent.property.type)
         | 
| 217 | 
            -
            					referencePath.parentPath.replaceWith(
         | 
| 218 | 
            -
            						t.identifier(`_${uniqueID}_CONSOLE_METHOD_${referencePath.parent.property.name}_`)
         | 
| 219 | 
            -
            					)
         | 
| 220 | 
            -
            					consoleMethodsReferenced.add(referencePath.parent.property.name)
         | 
| 221 | 
            -
            				}
         | 
| 222 | 
            -
            		const lastStatement = program.node.body.at(-1)
         | 
| 223 | 
            -
            		let exportDefaultName
         | 
| 224 | 
            -
            		assert(lastStatement, "program is empty")
         | 
| 225 | 
            -
            		if ("ExportNamedDeclaration" == lastStatement.type) {
         | 
| 226 | 
            -
            			program.node.body.pop()
         | 
| 227 | 
            -
            			for (const specifier of lastStatement.specifiers) {
         | 
| 228 | 
            -
            				assert("ExportSpecifier" == specifier.type, specifier.type + " is currently unsupported")
         | 
| 229 | 
            -
            				const exportedName =
         | 
| 230 | 
            -
            					"Identifier" == specifier.exported.type ? specifier.exported.name : specifier.exported.value
         | 
| 231 | 
            -
            				"default" == exportedName ?
         | 
| 232 | 
            -
            					(exportDefaultName = specifier.local.name)
         | 
| 233 | 
            -
            				:	exports.set(specifier.local.name, exportedName)
         | 
| 170 | 
            +
            	const consoleMethodsReferenced = new Set()
         | 
| 171 | 
            +
            	if (program.scope.hasGlobal("console"))
         | 
| 172 | 
            +
            		for (const referencePath of getReferencePathsToGlobal("console", program))
         | 
| 173 | 
            +
            			if ("MemberExpression" == referencePath.parent.type && !referencePath.parent.computed) {
         | 
| 174 | 
            +
            				assert("Identifier" == referencePath.parent.property.type, "src/processScript/transform.ts:240:64")
         | 
| 175 | 
            +
            				referencePath.parentPath.replaceWith(
         | 
| 176 | 
            +
            					t.identifier(`_${uniqueID}_CONSOLE_METHOD_${referencePath.parent.property.name}_`)
         | 
| 177 | 
            +
            				)
         | 
| 178 | 
            +
            				consoleMethodsReferenced.add(referencePath.parent.property.name)
         | 
| 234 179 | 
             
            			}
         | 
| 180 | 
            +
            	const lastStatement = program.node.body.at(-1)
         | 
| 181 | 
            +
            	let exportDefaultName
         | 
| 182 | 
            +
            	assert(lastStatement, "src/processScript/transform.ts:254:27 program is empty")
         | 
| 183 | 
            +
            	if ("ExportNamedDeclaration" == lastStatement.type) {
         | 
| 184 | 
            +
            		program.node.body.pop()
         | 
| 185 | 
            +
            		for (const specifier of lastStatement.specifiers) {
         | 
| 186 | 
            +
            			assert(
         | 
| 187 | 
            +
            				"ExportSpecifier" == specifier.type,
         | 
| 188 | 
            +
            				`src/processScript/transform.ts:260:51 ${specifier.type} is currently unsupported`
         | 
| 189 | 
            +
            			)
         | 
| 190 | 
            +
            			const exportedName =
         | 
| 191 | 
            +
            				"Identifier" == specifier.exported.type ? specifier.exported.name : specifier.exported.value
         | 
| 192 | 
            +
            			"default" == exportedName ?
         | 
| 193 | 
            +
            				(exportDefaultName = specifier.local.name)
         | 
| 194 | 
            +
            			:	exports.set(specifier.local.name, exportedName)
         | 
| 235 195 | 
             
            		}
         | 
| 236 | 
            -
             | 
| 237 | 
            -
             | 
| 238 | 
            -
             | 
| 239 | 
            -
             | 
| 240 | 
            -
             | 
| 241 | 
            -
             | 
| 242 | 
            -
             | 
| 243 | 
            -
             | 
| 244 | 
            -
             | 
| 245 | 
            -
             | 
| 246 | 
            -
             | 
| 247 | 
            -
            						declarator.init. | 
| 248 | 
            -
             | 
| 249 | 
            -
            					 | 
| 250 | 
            -
             | 
| 251 | 
            -
             | 
| 252 | 
            -
             | 
| 253 | 
            -
             | 
| 254 | 
            -
             | 
| 255 | 
            -
             | 
| 256 | 
            -
             | 
| 257 | 
            -
            									])
         | 
| 258 | 
            -
            								) | 
| 259 | 
            -
            							 | 
| 260 | 
            -
             | 
| 261 | 
            -
             | 
| 262 | 
            -
            							 | 
| 263 | 
            -
            							globalBlock.body.push(
         | 
| 264 | 
            -
            								t.variableDeclaration("let", [t.variableDeclarator(t.identifier(identifierName))])
         | 
| 265 | 
            -
            							)
         | 
| 196 | 
            +
            	}
         | 
| 197 | 
            +
            	const globalBlock = t.blockStatement([])
         | 
| 198 | 
            +
            	let mainFunction
         | 
| 199 | 
            +
            	for (const statement of program.node.body)
         | 
| 200 | 
            +
            		if ("VariableDeclaration" == statement.type)
         | 
| 201 | 
            +
            			for (const declarator of statement.declarations)
         | 
| 202 | 
            +
            				if (
         | 
| 203 | 
            +
            					"Identifier" != declarator.id.type ||
         | 
| 204 | 
            +
            					declarator.id.name != exportDefaultName ||
         | 
| 205 | 
            +
            					!declarator.init ||
         | 
| 206 | 
            +
            					("FunctionExpression" != declarator.init.type &&
         | 
| 207 | 
            +
            						"ArrowFunctionExpression" != declarator.init.type) ||
         | 
| 208 | 
            +
            					declarator.init.async ||
         | 
| 209 | 
            +
            					declarator.init.generator
         | 
| 210 | 
            +
            				) {
         | 
| 211 | 
            +
            					for (const identifierName in t.getBindingIdentifiers(declarator.id)) {
         | 
| 212 | 
            +
            						identifierName == exportDefaultName &&
         | 
| 213 | 
            +
            							(mainFunction = t.functionDeclaration(
         | 
| 214 | 
            +
            								t.identifier(topFunctionName),
         | 
| 215 | 
            +
            								[t.identifier("context"), t.identifier("args")],
         | 
| 216 | 
            +
            								t.blockStatement([
         | 
| 217 | 
            +
            									t.returnStatement(t.callExpression(t.identifier(exportDefaultName), []))
         | 
| 218 | 
            +
            								])
         | 
| 219 | 
            +
            							))
         | 
| 220 | 
            +
            						if ("const" != statement.kind && exports.has(identifierName)) {
         | 
| 221 | 
            +
            							liveExports.set(identifierName, exports.get(identifierName))
         | 
| 222 | 
            +
            							exports.delete(identifierName)
         | 
| 266 223 | 
             
            						}
         | 
| 267 | 
            -
            						 | 
| 268 | 
            -
            							 | 
| 269 | 
            -
            								t.expressionStatement(t.assignmentExpression("=", declarator.id, declarator.init))
         | 
| 270 | 
            -
            							)
         | 
| 271 | 
            -
            					} else
         | 
| 272 | 
            -
            						mainFunction = t.functionDeclaration(
         | 
| 273 | 
            -
            							t.identifier(topFunctionName),
         | 
| 274 | 
            -
            							declarator.init.params,
         | 
| 275 | 
            -
            							"BlockStatement" == declarator.init.body.type ?
         | 
| 276 | 
            -
            								declarator.init.body
         | 
| 277 | 
            -
            							:	t.blockStatement([t.returnStatement(declarator.init.body)])
         | 
| 224 | 
            +
            						globalBlock.body.push(
         | 
| 225 | 
            +
            							t.variableDeclaration("let", [t.variableDeclarator(t.identifier(identifierName))])
         | 
| 278 226 | 
             
            						)
         | 
| 279 | 
            -
             | 
| 280 | 
            -
             | 
| 281 | 
            -
             | 
| 282 | 
            -
             | 
| 283 | 
            -
            					:	globalBlock.body.push(
         | 
| 284 | 
            -
            							t.variableDeclaration("let", [
         | 
| 285 | 
            -
            								t.variableDeclarator(
         | 
| 286 | 
            -
            									statement.id,
         | 
| 287 | 
            -
            									t.functionExpression(
         | 
| 288 | 
            -
            										void 0,
         | 
| 289 | 
            -
            										statement.params,
         | 
| 290 | 
            -
            										statement.body,
         | 
| 291 | 
            -
            										statement.generator,
         | 
| 292 | 
            -
            										statement.async
         | 
| 293 | 
            -
            									)
         | 
| 294 | 
            -
            								)
         | 
| 295 | 
            -
            							])
         | 
| 227 | 
            +
            					}
         | 
| 228 | 
            +
            					declarator.init &&
         | 
| 229 | 
            +
            						globalBlock.body.push(
         | 
| 230 | 
            +
            							t.expressionStatement(t.assignmentExpression("=", declarator.id, declarator.init))
         | 
| 296 231 | 
             
            						)
         | 
| 297 | 
            -
            				 | 
| 298 | 
            -
             | 
| 299 | 
            -
             | 
| 300 | 
            -
             | 
| 301 | 
            -
             | 
| 302 | 
            -
             | 
| 303 | 
            -
             | 
| 304 | 
            -
             | 
| 305 | 
            -
             | 
| 306 | 
            -
             | 
| 307 | 
            -
             | 
| 308 | 
            -
             | 
| 309 | 
            -
             | 
| 310 | 
            -
             | 
| 311 | 
            -
            							 | 
| 312 | 
            -
             | 
| 313 | 
            -
            								t. | 
| 314 | 
            -
            									 | 
| 315 | 
            -
            									 | 
| 316 | 
            -
            									 | 
| 317 | 
            -
            									 | 
| 232 | 
            +
            				} else
         | 
| 233 | 
            +
            					mainFunction = t.functionDeclaration(
         | 
| 234 | 
            +
            						t.identifier(topFunctionName),
         | 
| 235 | 
            +
            						declarator.init.params,
         | 
| 236 | 
            +
            						"BlockStatement" == declarator.init.body.type ?
         | 
| 237 | 
            +
            							declarator.init.body
         | 
| 238 | 
            +
            						:	t.blockStatement([t.returnStatement(declarator.init.body)])
         | 
| 239 | 
            +
            					)
         | 
| 240 | 
            +
            		else
         | 
| 241 | 
            +
            			"FunctionDeclaration" == statement.type ?
         | 
| 242 | 
            +
            				statement.id.name == exportDefaultName ?
         | 
| 243 | 
            +
            					(mainFunction = statement)
         | 
| 244 | 
            +
            				:	globalBlock.body.push(
         | 
| 245 | 
            +
            						t.variableDeclaration("let", [
         | 
| 246 | 
            +
            							t.variableDeclarator(
         | 
| 247 | 
            +
            								statement.id,
         | 
| 248 | 
            +
            								t.functionExpression(
         | 
| 249 | 
            +
            									void 0,
         | 
| 250 | 
            +
            									statement.params,
         | 
| 251 | 
            +
            									statement.body,
         | 
| 252 | 
            +
            									statement.generator,
         | 
| 253 | 
            +
            									statement.async
         | 
| 318 254 | 
             
            								)
         | 
| 319 255 | 
             
            							)
         | 
| 320 256 | 
             
            						])
         | 
| 321 257 | 
             
            					)
         | 
| 258 | 
            +
            			:	globalBlock.body.push(statement)
         | 
| 259 | 
            +
            	mainFunction ||= t.functionDeclaration(
         | 
| 260 | 
            +
            		t.identifier(topFunctionName),
         | 
| 261 | 
            +
            		[t.identifier("context"), t.identifier("args")],
         | 
| 262 | 
            +
            		t.blockStatement([])
         | 
| 263 | 
            +
            	)
         | 
| 264 | 
            +
            	program.node.body = [mainFunction]
         | 
| 265 | 
            +
            	if (globalBlock.body.length) {
         | 
| 266 | 
            +
            		;(exports.size || liveExports.size) &&
         | 
| 267 | 
            +
            			mainFunction.body.body.push(
         | 
| 268 | 
            +
            				t.returnStatement(
         | 
| 269 | 
            +
            					t.objectExpression([
         | 
| 270 | 
            +
            						...[...exports].map(([local, exported]) =>
         | 
| 271 | 
            +
            							t.objectProperty(t.identifier(exported), t.identifier(local))
         | 
| 272 | 
            +
            						),
         | 
| 273 | 
            +
            						...[...liveExports].map(([local, exported]) =>
         | 
| 274 | 
            +
            							t.objectMethod(
         | 
| 275 | 
            +
            								"get",
         | 
| 276 | 
            +
            								t.identifier(exported),
         | 
| 277 | 
            +
            								[],
         | 
| 278 | 
            +
            								t.blockStatement([t.returnStatement(t.identifier(local))])
         | 
| 279 | 
            +
            							)
         | 
| 280 | 
            +
            						)
         | 
| 281 | 
            +
            					])
         | 
| 322 282 | 
             
            				)
         | 
| 323 | 
            -
            			 | 
| 324 | 
            -
             | 
| 325 | 
            -
             | 
| 326 | 
            -
             | 
| 327 | 
            -
             | 
| 328 | 
            -
             | 
| 329 | 
            -
             | 
| 330 | 
            -
             | 
| 331 | 
            -
             | 
| 332 | 
            -
            					 | 
| 333 | 
            -
             | 
| 334 | 
            -
             | 
| 335 | 
            -
             | 
| 336 | 
            -
             | 
| 337 | 
            -
             | 
| 338 | 
            -
             | 
| 339 | 
            -
             | 
| 340 | 
            -
            								"ArrowFunctionExpression" != declarator.init.type) ||
         | 
| 341 | 
            -
            							Object.keys(program.scope.globals).some(global => globalBlockVariables.has(global))
         | 
| 342 | 
            -
            						) {
         | 
| 343 | 
            -
            							const binding = program.scope.getBinding(declarator.id.name)
         | 
| 344 | 
            -
            							assert(binding)
         | 
| 345 | 
            -
            							for (const referencePath of binding.referencePaths) {
         | 
| 346 | 
            -
            								assert("Identifier" == referencePath.node.type)
         | 
| 347 | 
            -
            								referencePath.replaceWith(
         | 
| 348 | 
            -
            									t.memberExpression(
         | 
| 349 | 
            -
            										t.identifier(`$${uniqueID}$GLOBAL$`),
         | 
| 350 | 
            -
            										t.identifier(referencePath.node.name)
         | 
| 351 | 
            -
            									)
         | 
| 352 | 
            -
            								)
         | 
| 353 | 
            -
            							}
         | 
| 354 | 
            -
            							for (const referencePath of binding.constantViolations)
         | 
| 355 | 
            -
            								if ("AssignmentExpression" == referencePath.node.type)
         | 
| 356 | 
            -
            									for (const [name, node] of Object.entries(
         | 
| 357 | 
            -
            										t.getBindingIdentifiers(referencePath.node)
         | 
| 358 | 
            -
            									))
         | 
| 359 | 
            -
            										if (name == declarator.id.name) {
         | 
| 360 | 
            -
            											clearObject(node)
         | 
| 361 | 
            -
            											Object.assign(
         | 
| 362 | 
            -
            												node,
         | 
| 363 | 
            -
            												t.memberExpression(
         | 
| 364 | 
            -
            													t.identifier(`$${uniqueID}$GLOBAL$`),
         | 
| 365 | 
            -
            													t.identifier(name)
         | 
| 366 | 
            -
            												)
         | 
| 367 | 
            -
            											)
         | 
| 368 | 
            -
            										}
         | 
| 369 | 
            -
            							globalBlockPath.remove()
         | 
| 370 | 
            -
            							globalBlockStatementPath.remove()
         | 
| 371 | 
            -
            							declarator.init &&
         | 
| 372 | 
            -
            								globalBlock.body.splice(
         | 
| 373 | 
            -
            									globalBlockIndex,
         | 
| 374 | 
            -
            									0,
         | 
| 375 | 
            -
            									t.expressionStatement(
         | 
| 376 | 
            -
            										t.assignmentExpression(
         | 
| 377 | 
            -
            											"=",
         | 
| 378 | 
            -
            											t.memberExpression(
         | 
| 379 | 
            -
            												t.identifier(`$${uniqueID}$GLOBAL$`),
         | 
| 380 | 
            -
            												t.identifier(declarator.id.name)
         | 
| 381 | 
            -
            											),
         | 
| 382 | 
            -
            											declarator.init
         | 
| 383 | 
            -
            										)
         | 
| 384 | 
            -
            									)
         | 
| 385 | 
            -
            								)
         | 
| 386 | 
            -
            						} else {
         | 
| 387 | 
            -
            							globalBlockPath.remove()
         | 
| 388 | 
            -
            							globalBlockStatementPath.remove()
         | 
| 389 | 
            -
            							mainFunction.body.body.unshift(globalBlockStatement)
         | 
| 390 | 
            -
            							hoistedGlobalBlockFunctions++
         | 
| 391 | 
            -
            						}
         | 
| 392 | 
            -
            					} else globalBlockVariables.add(declarator.id.name)
         | 
| 393 | 
            -
            				} else if ("ClassDeclaration" == globalBlockStatement.type) {
         | 
| 283 | 
            +
            			)
         | 
| 284 | 
            +
            		program.scope.crawl()
         | 
| 285 | 
            +
            		const globalBlockVariables = new Set()
         | 
| 286 | 
            +
            		let hoistedGlobalBlockFunctions = 0
         | 
| 287 | 
            +
            		for (const [globalBlockIndex, globalBlockStatement] of [...globalBlock.body.entries()].reverse())
         | 
| 288 | 
            +
            			if ("VariableDeclaration" == globalBlockStatement.type) {
         | 
| 289 | 
            +
            				assert(1 == globalBlockStatement.declarations.length, "src/processScript/transform.ts:370:59")
         | 
| 290 | 
            +
            				const declarator = globalBlockStatement.declarations[0]
         | 
| 291 | 
            +
            				assert(
         | 
| 292 | 
            +
            					"Identifier" == declarator.id.type,
         | 
| 293 | 
            +
            					`src/processScript/transform.ts:374:51 declarator.id.type was "${declarator.id.type}"`
         | 
| 294 | 
            +
            				)
         | 
| 295 | 
            +
            				program.scope.crawl()
         | 
| 296 | 
            +
            				if (program.scope.hasGlobal(declarator.id.name)) {
         | 
| 297 | 
            +
            					globalBlock.body.splice(globalBlockIndex, 1)
         | 
| 298 | 
            +
            					const [globalBlockPath] = program.unshiftContainer("body", globalBlock),
         | 
| 299 | 
            +
            						[globalBlockStatementPath] = program.unshiftContainer("body", globalBlockStatement)
         | 
| 394 300 | 
             
            					program.scope.crawl()
         | 
| 395 | 
            -
            					 | 
| 396 | 
            -
             | 
| 397 | 
            -
            						 | 
| 398 | 
            -
             | 
| 399 | 
            -
             | 
| 400 | 
            -
             | 
| 401 | 
            -
            						const binding = program.scope.getBinding( | 
| 402 | 
            -
            						assert(binding)
         | 
| 301 | 
            +
            					if (
         | 
| 302 | 
            +
            						!declarator.init ||
         | 
| 303 | 
            +
            						("FunctionExpression" != declarator.init.type &&
         | 
| 304 | 
            +
            							"ArrowFunctionExpression" != declarator.init.type) ||
         | 
| 305 | 
            +
            						Object.keys(program.scope.globals).some(global => globalBlockVariables.has(global))
         | 
| 306 | 
            +
            					) {
         | 
| 307 | 
            +
            						const binding = program.scope.getBinding(declarator.id.name)
         | 
| 308 | 
            +
            						assert(binding, "src/processScript/transform.ts:393:23")
         | 
| 403 309 | 
             
            						for (const referencePath of binding.referencePaths) {
         | 
| 404 | 
            -
            							assert("Identifier" == referencePath.node.type)
         | 
| 310 | 
            +
            							assert("Identifier" == referencePath.node.type, "src/processScript/transform.ts:396:56")
         | 
| 405 311 | 
             
            							referencePath.replaceWith(
         | 
| 406 312 | 
             
            								t.memberExpression(
         | 
| 407 313 | 
             
            									t.identifier(`$${uniqueID}$GLOBAL$`),
         | 
| @@ -409,253 +315,354 @@ const { default: traverse } = babelTraverse, | |
| 409 315 | 
             
            								)
         | 
| 410 316 | 
             
            							)
         | 
| 411 317 | 
             
            						}
         | 
| 318 | 
            +
            						for (const referencePath of binding.constantViolations)
         | 
| 319 | 
            +
            							if ("AssignmentExpression" == referencePath.node.type)
         | 
| 320 | 
            +
            								for (const [name, node] of Object.entries(t.getBindingIdentifiers(referencePath.node)))
         | 
| 321 | 
            +
            									if (name == declarator.id.name) {
         | 
| 322 | 
            +
            										clearObject(node)
         | 
| 323 | 
            +
            										Object.assign(
         | 
| 324 | 
            +
            											node,
         | 
| 325 | 
            +
            											t.memberExpression(t.identifier(`$${uniqueID}$GLOBAL$`), t.identifier(name))
         | 
| 326 | 
            +
            										)
         | 
| 327 | 
            +
            									}
         | 
| 412 328 | 
             
            						globalBlockPath.remove()
         | 
| 413 329 | 
             
            						globalBlockStatementPath.remove()
         | 
| 414 | 
            -
            						 | 
| 415 | 
            -
            							 | 
| 416 | 
            -
             | 
| 417 | 
            -
             | 
| 418 | 
            -
            								t. | 
| 419 | 
            -
            									 | 
| 420 | 
            -
             | 
| 421 | 
            -
            										t. | 
| 422 | 
            -
             | 
| 423 | 
            -
             | 
| 424 | 
            -
             | 
| 425 | 
            -
            										 | 
| 426 | 
            -
            										globalBlockStatement.superClass,
         | 
| 427 | 
            -
            										globalBlockStatement.body,
         | 
| 428 | 
            -
            										globalBlockStatement.decorators
         | 
| 330 | 
            +
            						declarator.init &&
         | 
| 331 | 
            +
            							globalBlock.body.splice(
         | 
| 332 | 
            +
            								globalBlockIndex,
         | 
| 333 | 
            +
            								0,
         | 
| 334 | 
            +
            								t.expressionStatement(
         | 
| 335 | 
            +
            									t.assignmentExpression(
         | 
| 336 | 
            +
            										"=",
         | 
| 337 | 
            +
            										t.memberExpression(
         | 
| 338 | 
            +
            											t.identifier(`$${uniqueID}$GLOBAL$`),
         | 
| 339 | 
            +
            											t.identifier(declarator.id.name)
         | 
| 340 | 
            +
            										),
         | 
| 341 | 
            +
            										declarator.init
         | 
| 429 342 | 
             
            									)
         | 
| 430 343 | 
             
            								)
         | 
| 431 344 | 
             
            							)
         | 
| 345 | 
            +
            					} else {
         | 
| 346 | 
            +
            						globalBlockPath.remove()
         | 
| 347 | 
            +
            						globalBlockStatementPath.remove()
         | 
| 348 | 
            +
            						mainFunction.body.body.unshift(globalBlockStatement)
         | 
| 349 | 
            +
            						hoistedGlobalBlockFunctions++
         | 
| 350 | 
            +
            					}
         | 
| 351 | 
            +
            				} else globalBlockVariables.add(declarator.id.name)
         | 
| 352 | 
            +
            			} else if ("ClassDeclaration" == globalBlockStatement.type) {
         | 
| 353 | 
            +
            				program.scope.crawl()
         | 
| 354 | 
            +
            				assert(globalBlockStatement.id, "src/processScript/transform.ts:447:37")
         | 
| 355 | 
            +
            				if (program.scope.hasGlobal(globalBlockStatement.id.name)) {
         | 
| 356 | 
            +
            					globalBlock.body.splice(globalBlockIndex, 1)
         | 
| 357 | 
            +
            					const [globalBlockPath] = program.unshiftContainer("body", globalBlock),
         | 
| 358 | 
            +
            						[globalBlockStatementPath] = program.unshiftContainer("body", globalBlockStatement)
         | 
| 359 | 
            +
            					program.scope.crawl()
         | 
| 360 | 
            +
            					const binding = program.scope.getBinding(globalBlockStatement.id.name)
         | 
| 361 | 
            +
            					assert(binding, "src/processScript/transform.ts:459:22")
         | 
| 362 | 
            +
            					for (const referencePath of binding.referencePaths) {
         | 
| 363 | 
            +
            						assert("Identifier" == referencePath.node.type, "src/processScript/transform.ts:462:55")
         | 
| 364 | 
            +
            						referencePath.replaceWith(
         | 
| 365 | 
            +
            							t.memberExpression(
         | 
| 366 | 
            +
            								t.identifier(`$${uniqueID}$GLOBAL$`),
         | 
| 367 | 
            +
            								t.identifier(referencePath.node.name)
         | 
| 368 | 
            +
            							)
         | 
| 432 369 | 
             
            						)
         | 
| 433 370 | 
             
            					}
         | 
| 434 | 
            -
             | 
| 435 | 
            -
             | 
| 436 | 
            -
             | 
| 437 | 
            -
             | 
| 438 | 
            -
            						 | 
| 371 | 
            +
            					globalBlockPath.remove()
         | 
| 372 | 
            +
            					globalBlockStatementPath.remove()
         | 
| 373 | 
            +
            					globalBlock.body.splice(
         | 
| 374 | 
            +
            						globalBlockIndex,
         | 
| 375 | 
            +
            						0,
         | 
| 376 | 
            +
            						t.expressionStatement(
         | 
| 377 | 
            +
            							t.assignmentExpression(
         | 
| 378 | 
            +
            								"=",
         | 
| 379 | 
            +
            								t.memberExpression(
         | 
| 380 | 
            +
            									t.identifier(`$${uniqueID}$GLOBAL$`),
         | 
| 381 | 
            +
            									t.identifier(globalBlockStatement.id.name)
         | 
| 382 | 
            +
            								),
         | 
| 383 | 
            +
            								t.classExpression(
         | 
| 384 | 
            +
            									void 0,
         | 
| 385 | 
            +
            									globalBlockStatement.superClass,
         | 
| 386 | 
            +
            									globalBlockStatement.body,
         | 
| 387 | 
            +
            									globalBlockStatement.decorators
         | 
| 388 | 
            +
            								)
         | 
| 389 | 
            +
            							)
         | 
| 390 | 
            +
            						)
         | 
| 439 391 | 
             
            					)
         | 
| 440 | 
            -
             | 
| 441 | 
            -
             | 
| 442 | 
            -
             | 
| 443 | 
            -
             | 
| 444 | 
            -
             | 
| 392 | 
            +
            				}
         | 
| 393 | 
            +
            			}
         | 
| 394 | 
            +
            		if (program.scope.hasGlobal("_EXPORTS"))
         | 
| 395 | 
            +
            			for (const referencePath of getReferencePathsToGlobal("_EXPORTS", program))
         | 
| 396 | 
            +
            				referencePath.replaceWith(
         | 
| 397 | 
            +
            					t.arrayExpression([...exports.keys(), ...liveExports.keys()].map(name => t.stringLiteral(name)))
         | 
| 445 398 | 
             
            				)
         | 
| 446 | 
            -
            		 | 
| 447 | 
            -
             | 
| 448 | 
            -
             | 
| 449 | 
            -
            				 | 
| 450 | 
            -
             | 
| 451 | 
            -
            						t.identifier(`_${uniqueID}_FUNCTION_DOT_PROTOTYPE_`),
         | 
| 452 | 
            -
            						createGetFunctionPrototypeNode()
         | 
| 453 | 
            -
            					)
         | 
| 454 | 
            -
            				])
         | 
| 399 | 
            +
            		globalBlock.body.length &&
         | 
| 400 | 
            +
            			mainFunction.body.body.splice(
         | 
| 401 | 
            +
            				hoistedGlobalBlockFunctions,
         | 
| 402 | 
            +
            				0,
         | 
| 403 | 
            +
            				t.ifStatement(t.unaryExpression("!", t.identifier(`$${uniqueID}$FMCL$`)), globalBlock)
         | 
| 455 404 | 
             
            			)
         | 
| 456 | 
            -
             | 
| 457 | 
            -
             | 
| 458 | 
            -
             | 
| 459 | 
            -
             | 
| 460 | 
            -
             | 
| 461 | 
            -
             | 
| 462 | 
            -
             | 
| 463 | 
            -
             | 
| 464 | 
            -
             | 
| 465 | 
            -
             | 
| 466 | 
            -
             | 
| 467 | 
            -
             | 
| 468 | 
            -
             | 
| 469 | 
            -
             | 
| 470 | 
            -
            					 | 
| 471 | 
            -
             | 
| 472 | 
            -
             | 
| 473 | 
            -
             | 
| 405 | 
            +
            	}
         | 
| 406 | 
            +
            	functionDotPrototypeIsReferencedMultipleTimes &&
         | 
| 407 | 
            +
            		mainFunction.body.body.unshift(
         | 
| 408 | 
            +
            			t.variableDeclaration("let", [
         | 
| 409 | 
            +
            				t.variableDeclarator(
         | 
| 410 | 
            +
            					t.identifier(`_${uniqueID}_FUNCTION_DOT_PROTOTYPE_`),
         | 
| 411 | 
            +
            					createGetFunctionPrototypeNode()
         | 
| 412 | 
            +
            				)
         | 
| 413 | 
            +
            			])
         | 
| 414 | 
            +
            		)
         | 
| 415 | 
            +
            	needGetPrototypeOf &&
         | 
| 416 | 
            +
            		mainFunction.body.body.unshift(
         | 
| 417 | 
            +
            			t.variableDeclaration("let", [
         | 
| 418 | 
            +
            				t.variableDeclarator(
         | 
| 419 | 
            +
            					t.objectPattern([
         | 
| 420 | 
            +
            						t.objectProperty(t.identifier("get"), t.identifier(`_${uniqueID}_DUNDER_PROTO_GETTER_`))
         | 
| 421 | 
            +
            					]),
         | 
| 422 | 
            +
            					t.callExpression(
         | 
| 423 | 
            +
            						t.memberExpression(t.identifier("Object"), t.identifier("getOwnPropertyDescriptor")),
         | 
| 424 | 
            +
            						[
         | 
| 425 | 
            +
            							t.memberExpression(t.identifier("Object"), t.identifier("prototype")),
         | 
| 426 | 
            +
            							t.stringLiteral("__proto__")
         | 
| 427 | 
            +
            						]
         | 
| 428 | 
            +
            					)
         | 
| 429 | 
            +
            				),
         | 
| 430 | 
            +
            				t.variableDeclarator(
         | 
| 431 | 
            +
            					t.identifier(`_${uniqueID}_GET_PROTOTYPE_OF_`),
         | 
| 432 | 
            +
            					t.callExpression(
         | 
| 433 | 
            +
            						t.memberExpression(
         | 
| 474 434 | 
             
            							t.memberExpression(
         | 
| 475 | 
            -
            								t. | 
| 476 | 
            -
            									 | 
| 477 | 
            -
            										globalFunctionsUnder7Characters.find(name => !program.scope.hasOwnBinding(name))
         | 
| 478 | 
            -
            									),
         | 
| 479 | 
            -
            									t.identifier("call")
         | 
| 435 | 
            +
            								t.identifier(
         | 
| 436 | 
            +
            									globalFunctionsUnder7Characters.find(name => !program.scope.hasOwnBinding(name))
         | 
| 480 437 | 
             
            								),
         | 
| 481 | 
            -
            								t.identifier(" | 
| 438 | 
            +
            								t.identifier("call")
         | 
| 482 439 | 
             
            							),
         | 
| 483 | 
            -
            							 | 
| 484 | 
            -
            						)
         | 
| 440 | 
            +
            							t.identifier("bind")
         | 
| 441 | 
            +
            						),
         | 
| 442 | 
            +
            						[t.identifier(`_${uniqueID}_DUNDER_PROTO_GETTER_`)]
         | 
| 485 443 | 
             
            					)
         | 
| 486 | 
            -
            				 | 
| 487 | 
            -
            			)
         | 
| 488 | 
            -
            		 | 
| 489 | 
            -
             | 
| 490 | 
            -
             | 
| 491 | 
            -
             | 
| 492 | 
            -
             | 
| 493 | 
            -
             | 
| 494 | 
            -
             | 
| 495 | 
            -
             | 
| 496 | 
            -
             | 
| 497 | 
            -
             | 
| 498 | 
            -
             | 
| 499 | 
            -
             | 
| 500 | 
            -
            								)
         | 
| 444 | 
            +
            				)
         | 
| 445 | 
            +
            			])
         | 
| 446 | 
            +
            		)
         | 
| 447 | 
            +
            	consoleMethodsReferenced.size &&
         | 
| 448 | 
            +
            		mainFunction.body.body.unshift(
         | 
| 449 | 
            +
            			t.variableDeclaration(
         | 
| 450 | 
            +
            				"let",
         | 
| 451 | 
            +
            				[...consoleMethodsReferenced].map(name =>
         | 
| 452 | 
            +
            					t.variableDeclarator(
         | 
| 453 | 
            +
            						t.identifier(`_${uniqueID}_CONSOLE_METHOD_${name}_`),
         | 
| 454 | 
            +
            						t.arrowFunctionExpression(
         | 
| 455 | 
            +
            							[t.restElement(t.identifier("args"))],
         | 
| 456 | 
            +
            							t.unaryExpression(
         | 
| 457 | 
            +
            								"void",
         | 
| 458 | 
            +
            								t.callExpression(t.identifier(`$${uniqueID}$DEBUG$`), [t.identifier("args")])
         | 
| 501 459 | 
             
            							)
         | 
| 502 460 | 
             
            						)
         | 
| 503 461 | 
             
            					)
         | 
| 504 462 | 
             
            				)
         | 
| 505 463 | 
             
            			)
         | 
| 506 | 
            -
            		 | 
| 507 | 
            -
             | 
| 508 | 
            -
             | 
| 509 | 
            -
             | 
| 510 | 
            -
             | 
| 511 | 
            -
             | 
| 512 | 
            -
             | 
| 513 | 
            -
             | 
| 514 | 
            -
             | 
| 515 | 
            -
            						 | 
| 516 | 
            -
             | 
| 517 | 
            -
             | 
| 518 | 
            -
             | 
| 519 | 
            -
             | 
| 520 | 
            -
            							)
         | 
| 464 | 
            +
            		)
         | 
| 465 | 
            +
            	neededDbMethodLets.size &&
         | 
| 466 | 
            +
            		mainFunction.body.body.unshift(
         | 
| 467 | 
            +
            			t.variableDeclaration(
         | 
| 468 | 
            +
            				"let",
         | 
| 469 | 
            +
            				[...neededDbMethodLets].map(name => {
         | 
| 470 | 
            +
            					const getArgs = () =>
         | 
| 471 | 
            +
            						"ObjectId" == name ? []
         | 
| 472 | 
            +
            						: "i" == name || "r" == name ? [t.identifier("a")]
         | 
| 473 | 
            +
            						: [t.identifier("a"), t.identifier("b")]
         | 
| 474 | 
            +
            					return t.variableDeclarator(
         | 
| 475 | 
            +
            						t.identifier(`_${uniqueID}_CONSOLE_METHOD_${name}_`),
         | 
| 476 | 
            +
            						t.arrowFunctionExpression(
         | 
| 477 | 
            +
            							getArgs(),
         | 
| 478 | 
            +
            							t.callExpression(t.identifier(`$${uniqueID}$DB$${name}$`), getArgs())
         | 
| 521 479 | 
             
            						)
         | 
| 522 | 
            -
            					 | 
| 523 | 
            -
            				)
         | 
| 480 | 
            +
            					)
         | 
| 481 | 
            +
            				})
         | 
| 524 482 | 
             
            			)
         | 
| 525 | 
            -
            		 | 
| 526 | 
            -
             | 
| 527 | 
            -
             | 
| 483 | 
            +
            		)
         | 
| 484 | 
            +
            	needDebugLet &&
         | 
| 485 | 
            +
            		mainFunction.body.body.unshift(
         | 
| 486 | 
            +
            			t.variableDeclaration("let", [
         | 
| 487 | 
            +
            				t.variableDeclarator(
         | 
| 488 | 
            +
            					t.identifier(`_${uniqueID}_DEBUG_`),
         | 
| 489 | 
            +
            					t.callExpression(t.identifier(`$${uniqueID}$DEBUG$`), [t.identifier("a")])
         | 
| 490 | 
            +
            				)
         | 
| 491 | 
            +
            			])
         | 
| 492 | 
            +
            		)
         | 
| 493 | 
            +
            	neededSubscriptLets.size &&
         | 
| 494 | 
            +
            		mainFunction.body.body.unshift(
         | 
| 495 | 
            +
            			t.variableDeclaration(
         | 
| 496 | 
            +
            				"let",
         | 
| 497 | 
            +
            				[...neededSubscriptLets].map(name =>
         | 
| 528 498 | 
             
            					t.variableDeclarator(
         | 
| 529 | 
            -
            						t.identifier(`_${uniqueID} | 
| 530 | 
            -
            						t. | 
| 499 | 
            +
            						t.identifier(`_${uniqueID}_SUBSCRIPT_${name}_`),
         | 
| 500 | 
            +
            						t.arrowFunctionExpression(
         | 
| 501 | 
            +
            							[t.restElement(t.identifier("args"))],
         | 
| 502 | 
            +
            							t.callExpression(t.identifier(`$${uniqueID}$SUBSCRIPT$${name}$`), [
         | 
| 503 | 
            +
            								t.spreadElement(t.identifier("args"))
         | 
| 504 | 
            +
            							])
         | 
| 505 | 
            +
            						)
         | 
| 531 506 | 
             
            					)
         | 
| 532 | 
            -
            				 | 
| 507 | 
            +
            				)
         | 
| 533 508 | 
             
            			)
         | 
| 534 | 
            -
            		 | 
| 535 | 
            -
             | 
| 536 | 
            -
             | 
| 537 | 
            -
             | 
| 538 | 
            -
             | 
| 539 | 
            -
             | 
| 540 | 
            -
             | 
| 541 | 
            -
             | 
| 542 | 
            -
             | 
| 543 | 
            -
            								 | 
| 544 | 
            -
             | 
| 545 | 
            -
             | 
| 509 | 
            +
            		)
         | 
| 510 | 
            +
            	traverse(file, {
         | 
| 511 | 
            +
            		BlockStatement({ node: blockStatement }) {
         | 
| 512 | 
            +
            			for (const [index, functionDeclaration] of blockStatement.body.entries())
         | 
| 513 | 
            +
            				if ("FunctionDeclaration" == functionDeclaration.type && !functionDeclaration.generator) {
         | 
| 514 | 
            +
            					blockStatement.body.splice(index, 1)
         | 
| 515 | 
            +
            					blockStatement.body.unshift(
         | 
| 516 | 
            +
            						t.variableDeclaration("let", [
         | 
| 517 | 
            +
            							t.variableDeclarator(
         | 
| 518 | 
            +
            								functionDeclaration.id,
         | 
| 519 | 
            +
            								t.arrowFunctionExpression(
         | 
| 520 | 
            +
            									functionDeclaration.params,
         | 
| 521 | 
            +
            									functionDeclaration.body,
         | 
| 522 | 
            +
            									functionDeclaration.async
         | 
| 523 | 
            +
            								)
         | 
| 546 524 | 
             
            							)
         | 
| 547 | 
            -
            						)
         | 
| 525 | 
            +
            						])
         | 
| 548 526 | 
             
            					)
         | 
| 527 | 
            +
            				}
         | 
| 528 | 
            +
            		},
         | 
| 529 | 
            +
            		ClassBody({ node: classBody, scope, parent }) {
         | 
| 530 | 
            +
            			assert(t.isClass(parent), "src/processScript/transform.ts:629:30")
         | 
| 531 | 
            +
            			let thisIsReferenced = !1
         | 
| 532 | 
            +
            			for (const classMethod of classBody.body) {
         | 
| 533 | 
            +
            				if ("ClassMethod" != classMethod.type) continue
         | 
| 534 | 
            +
            				let methodReferencesThis = !1
         | 
| 535 | 
            +
            				traverse(
         | 
| 536 | 
            +
            					classMethod.body,
         | 
| 537 | 
            +
            					{
         | 
| 538 | 
            +
            						ThisExpression(path) {
         | 
| 539 | 
            +
            							methodReferencesThis = !0
         | 
| 540 | 
            +
            							thisIsReferenced = !0
         | 
| 541 | 
            +
            							path.replaceWith(t.identifier(`_${uniqueID}_THIS_`))
         | 
| 542 | 
            +
            						},
         | 
| 543 | 
            +
            						Function: path => path.skip()
         | 
| 544 | 
            +
            					},
         | 
| 545 | 
            +
            					scope
         | 
| 549 546 | 
             
            				)
         | 
| 550 | 
            -
             | 
| 551 | 
            -
             | 
| 552 | 
            -
             | 
| 553 | 
            -
            				for (const [index, functionDeclaration] of blockStatement.body.entries())
         | 
| 554 | 
            -
            					if ("FunctionDeclaration" == functionDeclaration.type && !functionDeclaration.generator) {
         | 
| 555 | 
            -
            						blockStatement.body.splice(index, 1)
         | 
| 556 | 
            -
            						blockStatement.body.unshift(
         | 
| 547 | 
            +
            				if (methodReferencesThis)
         | 
| 548 | 
            +
            					if ("constructor" != classMethod.kind)
         | 
| 549 | 
            +
            						classMethod.body.body.unshift(
         | 
| 557 550 | 
             
            							t.variableDeclaration("let", [
         | 
| 558 551 | 
             
            								t.variableDeclarator(
         | 
| 559 | 
            -
            									 | 
| 560 | 
            -
            									t. | 
| 561 | 
            -
            										functionDeclaration.params,
         | 
| 562 | 
            -
            										functionDeclaration.body,
         | 
| 563 | 
            -
            										functionDeclaration.async
         | 
| 564 | 
            -
            									)
         | 
| 552 | 
            +
            									t.identifier(`_${uniqueID}_THIS_`),
         | 
| 553 | 
            +
            									t.callExpression(t.memberExpression(t.super(), t.identifier("valueOf")), [])
         | 
| 565 554 | 
             
            								)
         | 
| 566 555 | 
             
            							])
         | 
| 567 556 | 
             
            						)
         | 
| 568 | 
            -
            					 | 
| 569 | 
            -
             | 
| 570 | 
            -
             | 
| 571 | 
            -
             | 
| 572 | 
            -
             | 
| 573 | 
            -
             | 
| 574 | 
            -
             | 
| 575 | 
            -
             | 
| 576 | 
            -
            					traverse(
         | 
| 577 | 
            -
            						classMethod.body,
         | 
| 578 | 
            -
            						{
         | 
| 579 | 
            -
            							ThisExpression(path) {
         | 
| 580 | 
            -
            								methodReferencesThis = !0
         | 
| 581 | 
            -
            								thisIsReferenced = !0
         | 
| 582 | 
            -
            								path.replaceWith(t.identifier(`_${uniqueID}_THIS_`))
         | 
| 557 | 
            +
            					else {
         | 
| 558 | 
            +
            						const superCalls = []
         | 
| 559 | 
            +
            						traverse(
         | 
| 560 | 
            +
            							classMethod.body,
         | 
| 561 | 
            +
            							{
         | 
| 562 | 
            +
            								CallExpression(path) {
         | 
| 563 | 
            +
            									"Super" == path.node.callee.type && superCalls.push(path)
         | 
| 564 | 
            +
            								}
         | 
| 583 565 | 
             
            							},
         | 
| 584 | 
            -
            							 | 
| 585 | 
            -
             | 
| 566 | 
            +
            							scope
         | 
| 567 | 
            +
            						)
         | 
| 568 | 
            +
            						if (superCalls.length)
         | 
| 569 | 
            +
            							if (
         | 
| 570 | 
            +
            								1 == superCalls.length &&
         | 
| 571 | 
            +
            								"ExpressionStatement" == superCalls[0].parent.type &&
         | 
| 572 | 
            +
            								superCalls[0].parentPath.parentPath.parent == classMethod
         | 
| 573 | 
            +
            							)
         | 
| 574 | 
            +
            								superCalls[0].parentPath.replaceWith(
         | 
| 575 | 
            +
            									t.variableDeclaration("let", [
         | 
| 576 | 
            +
            										t.variableDeclarator(t.identifier(`_${uniqueID}_THIS_`), superCalls[0].node)
         | 
| 577 | 
            +
            									])
         | 
| 578 | 
            +
            								)
         | 
| 579 | 
            +
            							else {
         | 
| 580 | 
            +
            								for (const path of superCalls)
         | 
| 581 | 
            +
            									path.replaceWith(
         | 
| 582 | 
            +
            										t.assignmentExpression("=", t.identifier(`_${uniqueID}_THIS_`), path.node)
         | 
| 583 | 
            +
            									)
         | 
| 584 | 
            +
            								classMethod.body.body.unshift(
         | 
| 585 | 
            +
            									t.variableDeclaration("let", [
         | 
| 586 | 
            +
            										t.variableDeclarator(t.identifier(`_${uniqueID}_THIS_`))
         | 
| 587 | 
            +
            									])
         | 
| 588 | 
            +
            								)
         | 
| 586 589 | 
             
            							}
         | 
| 587 | 
            -
            						 | 
| 588 | 
            -
            						scope
         | 
| 589 | 
            -
            					)
         | 
| 590 | 
            -
            					if (methodReferencesThis)
         | 
| 591 | 
            -
            						if ("constructor" != classMethod.kind)
         | 
| 590 | 
            +
            						else
         | 
| 592 591 | 
             
            							classMethod.body.body.unshift(
         | 
| 593 592 | 
             
            								t.variableDeclaration("let", [
         | 
| 594 593 | 
             
            									t.variableDeclarator(
         | 
| 595 594 | 
             
            										t.identifier(`_${uniqueID}_THIS_`),
         | 
| 596 | 
            -
            										t.callExpression(t. | 
| 595 | 
            +
            										t.callExpression(t.super(), [])
         | 
| 597 596 | 
             
            									)
         | 
| 598 597 | 
             
            								])
         | 
| 599 598 | 
             
            							)
         | 
| 600 | 
            -
             | 
| 601 | 
            -
             | 
| 602 | 
            -
             | 
| 603 | 
            -
             | 
| 604 | 
            -
             | 
| 605 | 
            -
             | 
| 606 | 
            -
             | 
| 607 | 
            -
             | 
| 608 | 
            -
             | 
| 609 | 
            -
             | 
| 610 | 
            -
             | 
| 611 | 
            -
             | 
| 612 | 
            -
             | 
| 613 | 
            -
             | 
| 614 | 
            -
             | 
| 615 | 
            -
             | 
| 616 | 
            -
             | 
| 617 | 
            -
             | 
| 618 | 
            -
             | 
| 619 | 
            -
             | 
| 620 | 
            -
             | 
| 621 | 
            -
             | 
| 622 | 
            -
             | 
| 623 | 
            -
             | 
| 624 | 
            -
             | 
| 625 | 
            -
             | 
| 626 | 
            -
             | 
| 627 | 
            -
             | 
| 628 | 
            -
             | 
| 629 | 
            -
             | 
| 630 | 
            -
             | 
| 631 | 
            -
             | 
| 632 | 
            -
             | 
| 633 | 
            -
             | 
| 634 | 
            -
             | 
| 635 | 
            -
             | 
| 636 | 
            -
             | 
| 637 | 
            -
             | 
| 638 | 
            -
             | 
| 639 | 
            -
             | 
| 640 | 
            -
             | 
| 641 | 
            -
             | 
| 642 | 
            -
             | 
| 643 | 
            -
             | 
| 644 | 
            -
            				 | 
| 645 | 
            -
             | 
| 646 | 
            -
            			 | 
| 647 | 
            -
             | 
| 648 | 
            -
             | 
| 649 | 
            -
             | 
| 650 | 
            -
             | 
| 651 | 
            -
            			 | 
| 652 | 
            -
             | 
| 653 | 
            -
            				 | 
| 654 | 
            -
             | 
| 655 | 
            -
             | 
| 656 | 
            -
            				 | 
| 599 | 
            +
            					}
         | 
| 600 | 
            +
            			}
         | 
| 601 | 
            +
            			!parent.superClass && thisIsReferenced && (parent.superClass = t.identifier("Object"))
         | 
| 602 | 
            +
            		},
         | 
| 603 | 
            +
            		VariableDeclaration({ node: variableDeclaration }) {
         | 
| 604 | 
            +
            			"const" == variableDeclaration.kind && (variableDeclaration.kind = "let")
         | 
| 605 | 
            +
            		},
         | 
| 606 | 
            +
            		ThisExpression: path => path.replaceWith(t.identifier("undefined")),
         | 
| 607 | 
            +
            		BigIntLiteral(path) {
         | 
| 608 | 
            +
            			const bigIntAsNumber = Number(path.node.value)
         | 
| 609 | 
            +
            			path.replaceWith(
         | 
| 610 | 
            +
            				t.callExpression(t.identifier("BigInt"), [
         | 
| 611 | 
            +
            					BigInt(bigIntAsNumber) == BigInt(path.node.value) ?
         | 
| 612 | 
            +
            						t.numericLiteral(bigIntAsNumber)
         | 
| 613 | 
            +
            					:	t.stringLiteral(path.node.value)
         | 
| 614 | 
            +
            				])
         | 
| 615 | 
            +
            			)
         | 
| 616 | 
            +
            		}
         | 
| 617 | 
            +
            	})
         | 
| 618 | 
            +
            	return { file, seclevel }
         | 
| 619 | 
            +
            	function createGetFunctionPrototypeNode() {
         | 
| 620 | 
            +
            		for (const globalFunction of globalFunctionsUnder7Characters)
         | 
| 621 | 
            +
            			if (!program.scope.hasOwnBinding(globalFunction))
         | 
| 622 | 
            +
            				return t.memberExpression(
         | 
| 623 | 
            +
            					t.memberExpression(t.identifier(globalFunction), t.identifier("constructor")),
         | 
| 624 | 
            +
            					t.identifier("prototype")
         | 
| 625 | 
            +
            				)
         | 
| 626 | 
            +
            		return t.memberExpression(
         | 
| 627 | 
            +
            			t.memberExpression(
         | 
| 628 | 
            +
            				t.arrowFunctionExpression([t.identifier("_")], t.identifier("_")),
         | 
| 629 | 
            +
            				t.identifier("constructor")
         | 
| 630 | 
            +
            			),
         | 
| 631 | 
            +
            			t.identifier("prototype")
         | 
| 632 | 
            +
            		)
         | 
| 633 | 
            +
            	}
         | 
| 634 | 
            +
            	function processFakeSubscriptObject(fakeSubscriptObjectName) {
         | 
| 635 | 
            +
            		for (const referencePath of getReferencePathsToGlobal(fakeSubscriptObjectName, program)) {
         | 
| 636 | 
            +
            			assert("MemberExpression" == referencePath.parent.type, "src/processScript/transform.ts:743:60")
         | 
| 637 | 
            +
            			assert("Identifier" == referencePath.parent.property.type)
         | 
| 638 | 
            +
            			assert(
         | 
| 639 | 
            +
            				"MemberExpression" == referencePath.parentPath.parentPath?.node.type,
         | 
| 640 | 
            +
            				"src/processScript/transform.ts:745:81"
         | 
| 641 | 
            +
            			)
         | 
| 642 | 
            +
            			assert(
         | 
| 643 | 
            +
            				"Identifier" == referencePath.parentPath.parentPath.node.property.type,
         | 
| 644 | 
            +
            				"src/processScript/transform.ts:746:83"
         | 
| 645 | 
            +
            			)
         | 
| 646 | 
            +
            			assert(
         | 
| 647 | 
            +
            				/^[_a-z][\d_a-z]{0,24}$/.test(referencePath.parent.property.name),
         | 
| 648 | 
            +
            				`src/processScript/transform.ts:750:8 invalid user "${referencePath.parent.property.name}" in subscript`
         | 
| 649 | 
            +
            			)
         | 
| 650 | 
            +
            			assert(
         | 
| 651 | 
            +
            				/^[_a-z][\d_a-z]{0,24}$/.test(referencePath.parentPath.parentPath.node.property.name),
         | 
| 652 | 
            +
            				`src/processScript/transform.ts:755:8 invalid script name "${referencePath.parentPath.parentPath.node.property.name}" in subscript`
         | 
| 653 | 
            +
            			)
         | 
| 654 | 
            +
            			if ("CallExpression" == referencePath.parentPath.parentPath.parentPath?.type)
         | 
| 655 | 
            +
            				referencePath.parentPath.parentPath.replaceWith(
         | 
| 656 | 
            +
            					t.identifier(
         | 
| 657 | 
            +
            						`$${uniqueID}$SUBSCRIPT$${referencePath.parent.property.name}$${referencePath.parentPath.parentPath.node.property.name}$`
         | 
| 658 | 
            +
            					)
         | 
| 659 | 
            +
            				)
         | 
| 660 | 
            +
            			else {
         | 
| 661 | 
            +
            				const name = `${referencePath.parent.property.name}$${referencePath.parentPath.parentPath.node.property.name}`
         | 
| 662 | 
            +
            				referencePath.parentPath.parentPath.replaceWith(t.identifier(`_${uniqueID}_SUBSCRIPT_${name}_`))
         | 
| 663 | 
            +
            				neededSubscriptLets.add(name)
         | 
| 657 664 | 
             
            			}
         | 
| 658 | 
            -
            		} | 
| 659 | 
            -
            		return { file, seclevel }
         | 
| 665 | 
            +
            		}
         | 
| 660 666 | 
             
            	}
         | 
| 667 | 
            +
            }
         | 
| 661 668 | 
             
            export { transform as default, transform }
         |