@ibyar/expressions 0.5.6 → 0.5.62
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/api/abstract.js +5 -0
- package/api/abstract.js.map +1 -1
- package/api/class/class.d.ts +25 -0
- package/api/class/class.js +27 -0
- package/api/class/class.js.map +1 -1
- package/api/computing/return.d.ts +4 -0
- package/api/computing/return.js +5 -0
- package/api/computing/return.js.map +1 -1
- package/api/computing/throw.d.ts +4 -0
- package/api/computing/throw.js +4 -0
- package/api/computing/throw.js.map +1 -1
- package/api/definition/bind.d.ts +6 -0
- package/api/definition/bind.js +6 -0
- package/api/definition/bind.js.map +1 -1
- package/api/definition/function.js +1 -0
- package/api/definition/function.js.map +1 -1
- package/api/definition/values.d.ts +9 -0
- package/api/definition/values.js +21 -0
- package/api/definition/values.js.map +1 -1
- package/api/deserialize/deserialize.d.ts +5 -0
- package/api/deserialize/deserialize.js +5 -0
- package/api/deserialize/deserialize.js.map +1 -1
- package/api/expression.d.ts +146 -0
- package/api/module/export.d.ts +63 -0
- package/api/module/export.js +63 -0
- package/api/module/export.js.map +1 -1
- package/api/module/import.d.ts +53 -0
- package/api/module/import.js +53 -0
- package/api/module/import.js.map +1 -1
- package/api/operators/grouping.d.ts +7 -0
- package/api/operators/grouping.js +7 -0
- package/api/operators/grouping.js.map +1 -1
- package/api/operators/pipeline.d.ts +12 -0
- package/api/operators/pipeline.js +12 -0
- package/api/operators/pipeline.js.map +1 -1
- package/api/operators/unary.js +3 -0
- package/api/operators/unary.js.map +1 -1
- package/api/statement/control/block.d.ts +4 -0
- package/api/statement/control/block.js +4 -0
- package/api/statement/control/block.js.map +1 -1
- package/api/statement/control/empty.d.ts +7 -0
- package/api/statement/control/empty.js +7 -0
- package/api/statement/control/empty.js.map +1 -1
- package/api/statement/control/if.d.ts +5 -0
- package/api/statement/control/if.js +5 -0
- package/api/statement/control/if.js.map +1 -1
- package/api/statement/control/switch.d.ts +6 -0
- package/api/statement/control/switch.js +9 -0
- package/api/statement/control/switch.js.map +1 -1
- package/api/statement/control/terminate.d.ts +8 -0
- package/api/statement/control/terminate.js +8 -0
- package/api/statement/control/terminate.js.map +1 -1
- package/api/statement/iterations/for.d.ts +5 -0
- package/api/statement/iterations/for.js +13 -0
- package/api/statement/iterations/for.js.map +1 -1
- package/api/statement/iterations/while.d.ts +6 -0
- package/api/statement/iterations/while.js +10 -0
- package/api/statement/iterations/while.js.map +1 -1
- package/package.json +2 -2
- package/scope/proxy.d.ts +3 -0
- package/scope/proxy.js +4 -0
- package/scope/proxy.js.map +1 -1
- package/scope/scope.d.ts +68 -0
- package/scope/scope.js +5 -0
- package/scope/scope.js.map +1 -1
- package/scope/stack.d.ts +74 -0
- package/scope/stack.js +6 -0
- package/scope/stack.js.map +1 -1
- package/v8/enums.js +31 -0
- package/v8/enums.js.map +1 -1
- package/v8/inline.d.ts +36 -0
- package/v8/inline.js +407 -5
- package/v8/inline.js.map +1 -1
- package/v8/nodes.js +2 -1
- package/v8/nodes.js.map +1 -1
- package/v8/parser.d.ts +8 -0
- package/v8/parser.js +304 -1
- package/v8/parser.js.map +1 -1
- package/v8/stream.d.ts +4 -0
- package/v8/stream.js +79 -17
- package/v8/stream.js.map +1 -1
- package/v8/token.d.ts +229 -0
- package/v8/token.js +236 -1
- package/v8/token.js.map +1 -1
- package/visit/visitor.d.ts +3 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bind.js","sourceRoot":"","sources":["../../../../src/expressions/api/definition/bind.ts"],"names":[],"mappings":";;AAMA,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"bind.js","sourceRoot":"","sources":["../../../../src/expressions/api/definition/bind.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n\tNodeDeserializer, ExpressionNode, CanFindScope,\n\tExpressionEventPath, VisitNodeType\n} from '../expression.js';\nimport type { Scope } from '../../scope/scope.js';\nimport type { Stack } from '../../scope/stack.js';\nimport { Deserializer } from '../deserialize/deserialize.js';\nimport { AbstractExpressionNode } from '../abstract.js';\n\n/**\n * ```js\n * const x = {method: function(){...}};\n * const z = x::method;\n * ```\n */\n@Deserializer('BindExpression')\nexport class BindExpression extends AbstractExpressionNode implements CanFindScope {\n\tstatic fromJSON(node: BindExpression, deserializer: NodeDeserializer): BindExpression {\n\t\treturn new BindExpression(\n\t\t\tdeserializer(node.object),\n\t\t\tdeserializer(node.property),\n\t\t\tnode.computed,\n\t\t\tnode.optional\n\t\t);\n\t}\n\tstatic visit(node: BindExpression, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.object);\n\t\tvisitNode(node.property);\n\t}\n\tconstructor(\n\t\tprotected object: ExpressionNode,\n\t\tprotected property: ExpressionNode,\n\t\tprivate computed: boolean,\n\t\tprivate optional: boolean = false) {\n\t\tsuper();\n\t}\n\tgetObject() {\n\t\treturn this.object;\n\t}\n\tgetProperty() {\n\t\treturn this.property;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void { }\n\tset(stack: Stack) {\n\t\tthrow new Error(\"BindExpression#set() has no implementation.\");\n\t}\n\tget(stack: Stack, thisContext?: any) {\n\t\tconst objectRef = thisContext ?? this.object.get(stack);\n\t\tif (typeof objectRef === 'undefined') {\n\t\t\tthrow new TypeError(`Cannot read property '${this.property.toString()}' of undefined`);\n\t\t}\n\t\tlet value;\n\t\tif (this.computed) {\n\t\t\tvalue = objectRef[this.property.get(stack)];\n\t\t} else {\n\t\t\tvalue = this.property.get(stack, objectRef);\n\t\t}\n\t\tif (this.optional && (value === undefined || value === null)) {\n\t\t\treturn;\n\t\t}\n\t\tif (typeof value !== 'function') {\n\t\t\tthrow new Error(`can't bind to non-function type ${value}`);\n\t\t}\n\t\treturn (<Function>value).bind(objectRef);\n\t}\n\tfindScope<T extends object>(stack: Stack): Scope<T>;\n\tfindScope<T extends object>(stack: Stack, scope: Scope<any>): Scope<T>;\n\tfindScope<T extends object>(stack: Stack, objectScope?: Scope<any>): Scope<T> | undefined {\n\t\tif (!objectScope) {\n\t\t\tobjectScope = (this.object as ExpressionNode & CanFindScope).findScope(stack);\n\t\t}\n\t\treturn (this.property as ExpressionNode & CanFindScope).findScope(stack, objectScope);\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.object.dependency(computed).concat(this.property.dependency(computed));\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.object.dependencyPath(computed).concat(this.property.dependencyPath(computed));\n\t}\n\ttoString() {\n\t\tif (this.computed) {\n\t\t\treturn `${this.object.toString()}${this.optional ? '?::' : '::'}[${this.property.toString()}]`;\n\t\t}\n\t\treturn `${this.object.toString()}${this.optional ? '?::' : '::'}${this.property.toString()}`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tobject: this.object.toJSON(),\n\t\t\tproperty: this.property.toJSON(),\n\t\t\tcomputed: this.computed,\n\t\t\toptional: this.optional\n\t\t};\n\t}\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"function.js","sourceRoot":"","sources":["../../../../src/expressions/api/definition/function.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n\tDeclarationExpression, ExpressionEventPath, ExpressionNode,\n\tNodeDeserializer, VisitNodeType\n} from '../expression.js';\nimport { Stack } from '../../scope/stack.js';\nimport { Scope } from '../../scope/scope.js';\nimport {\n\tAbstractExpressionNode, AwaitPromise, ReturnValue,\n\tYieldDelegateValue, YieldValue\n} from '../abstract.js';\nimport { Deserializer } from '../deserialize/deserialize.js';\nimport { Identifier } from './values.js';\nimport { TerminateReturnType } from '../statement/control/terminate.js';\nimport { RestElement } from '../computing/rest.js';\nimport { BlockStatement } from '../statement/control/block.js';\n\n@Deserializer('Param')\nexport class Param extends AbstractExpressionNode {\n\tstatic fromJSON(node: Param, deserializer: NodeDeserializer): Param {\n\t\treturn new Param(\n\t\t\tdeserializer(node.identifier) as DeclarationExpression,\n\t\t\tnode.defaultValue ? deserializer(node.defaultValue) as Identifier : void 0\n\t\t);\n\t}\n\tstatic visit(node: Param, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.identifier);\n\t\tnode.defaultValue && visitNode(node.defaultValue);\n\t}\n\tconstructor(private identifier: DeclarationExpression, private defaultValue?: ExpressionNode) {\n\t\tsuper();\n\t}\n\tgetIdentifier() {\n\t\treturn this.identifier;\n\t}\n\tgetDefaultValue() {\n\t\treturn this.defaultValue;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.defaultValue?.shareVariables(scopeList);\n\t}\n\tset(stack: Stack, value: Function) {\n\t\tthis.identifier.declareVariable?.(stack, value);\n\t}\n\tget(stack: Stack) {\n\t\tthrow new Error('Param#get() has no implementation.');\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.defaultValue ? [this.defaultValue] : [];\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.defaultValue?.dependencyPath(computed) || [];\n\t}\n\ttoString(): string {\n\t\tlet init = this.defaultValue ? (' = ' + this.defaultValue.toString()) : '';\n\t\treturn this.identifier.toString() + init;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tidentifier: this.identifier.toJSON(),\n\t\t\tdefaultValue: this.defaultValue?.toJSON()\n\t\t};\n\t}\n}\n\nexport abstract class BaseFunctionExpression extends AbstractExpressionNode {\n\tprivate sharedVariables: Scope<any>[];\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.sharedVariables = scopeList;\n\t}\n\tinitFunctionScope(stack: Stack) {\n\t\tconst scope = Scope.blockScope<object>();\n\t\tconst innerScopes = this.sharedVariables ? this.sharedVariables.slice() : [];\n\t\tinnerScopes.push(scope);\n\t\tinnerScopes.forEach(variableScope => stack.pushScope(variableScope));\n\t\treturn innerScopes;\n\t}\n\tclearFunctionScope(stack: Stack, innerScopes: Scope<any>[]) {\n\t\tstack.clearTo(innerScopes[0]);\n\t}\n}\n\n@Deserializer('FunctionExpression')\nexport class FunctionExpression extends BaseFunctionExpression {\n\tstatic fromJSON(node: FunctionExpression, deserializer: NodeDeserializer): FunctionExpression {\n\t\treturn new FunctionExpression(\n\t\t\tnode.params.map(deserializer),\n\t\t\tdeserializer(node.body),\n\t\t\tnode.async,\n\t\t\tnode.generator,\n\t\t\tnode.id ? deserializer(node.id) as Identifier : void 0,\n\t\t);\n\t}\n\tstatic visit(node: FunctionExpression, visitNode: VisitNodeType): void {\n\t\tnode.id && visitNode(node.id);\n\t\tnode.params.forEach(visitNode);\n\t\tvisitNode(node.body);\n\t}\n\tconstructor(\n\t\tprotected params: ExpressionNode[], protected body: ExpressionNode,\n\t\tprotected async: boolean, protected generator: boolean,\n\t\tprotected id?: Identifier,\n\t) {\n\t\tsuper();\n\t}\n\tgetParams() {\n\t\treturn this.params;\n\t}\n\tgetBody() {\n\t\treturn this.body;\n\t}\n\tgetGenerator() {\n\t\treturn this.generator;\n\t}\n\tgetId() {\n\t\treturn this.id;\n\t}\n\tgetAsync() {\n\t\treturn this.async;\n\t}\n\tset(stack: Stack, value: Function) {\n\t\tthrow new Error(`${this.constructor.name}#set() has no implementation.`);\n\t}\n\tsetParameter(stack: Stack, args: any[]) {\n\t\tconst rest = this.params[this.params.length - 1] instanceof RestElement;\n\t\tconst limit = rest ? this.params.length - 1 : this.params.length;\n\t\tfor (let i = 0; i < limit; i++) {\n\t\t\tthis.params[i].set(stack, args[i]);\n\t\t}\n\t\tif (rest) {\n\t\t\tthis.params[limit].set(stack, args.slice(limit));\n\t\t}\n\t}\n\tget(stack: Stack) {\n\t\tlet func: Function;\n\t\tif (this.async && this.generator) {\n\t\t\tfunc = this.getAsyncGeneratorFunction(stack);\n\t\t} else if (this.async) {\n\t\t\tfunc = this.getAsyncFunction(stack);\n\t\t} else if (this.generator) {\n\t\t\tfunc = this.getGeneratorFunction(stack);\n\t\t} else {\n\t\t\tfunc = this.getFunction(stack);\n\t\t}\n\t\t// this.id?.declareVariable(stack, func);\n\t\treturn func;\n\t}\n\tprivate getAsyncFunction(stack: Stack) {\n\t\tconst self = this;\n\t\treturn async function (this: any, ...args: any[]) {\n\t\t\tconst innerScopes = self.initFunctionScope(stack);\n\t\t\tstack.declareVariable('this', this);\n\t\t\tself.setParameter(stack, args);\n\t\t\tlet returnValue: any;\n\t\t\tconst statements = (self.body as BlockStatement).getBody();\n\t\t\tfor (const statement of statements) {\n\t\t\t\tstatement.shareVariables(innerScopes);\n\t\t\t\treturnValue = statement.get(stack);\n\t\t\t\tif (stack.awaitPromise.length > 0) {\n\t\t\t\t\tfor (const awaitRef of stack.awaitPromise) {\n\t\t\t\t\t\tconst awaitValue = await awaitRef.promise;\n\t\t\t\t\t\tif (awaitRef.declareVariable) {\n\t\t\t\t\t\t\tawaitRef.node.declareVariable(stack, awaitValue);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tawaitRef.node.set(stack, awaitValue);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tstack.awaitPromise.splice(0);\n\t\t\t\t}\n\t\t\t\telse if (stack.forAwaitAsyncIterable) {\n\t\t\t\t\tfor await (let iterator of stack.forAwaitAsyncIterable.iterable) {\n\t\t\t\t\t\tconst result = stack.forAwaitAsyncIterable.forAwaitBody(iterator);\n\t\t\t\t\t\tif (result instanceof TerminateReturnType) {\n\t\t\t\t\t\t\tif (result.type === 'continue') {\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (result instanceof ReturnValue) {\n\t\t\t\t\t\t\treturnValue = result;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tstack.forAwaitAsyncIterable = undefined;\n\t\t\t\t}\n\t\t\t\tif (returnValue instanceof ReturnValue) {\n\t\t\t\t\treturnValue = returnValue.value;\n\t\t\t\t\tif (returnValue instanceof AwaitPromise) {\n\t\t\t\t\t\treturnValue = await returnValue.promise;\n\t\t\t\t\t\tself.clearFunctionScope(stack, innerScopes);\n\t\t\t\t\t\treturn returnValue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tself.clearFunctionScope(stack, innerScopes);\n\t\t};\n\n\t}\n\tprivate getGeneratorFunction(stack: Stack) {\n\t\tconst self = this;\n\t\treturn function* (this: any, ...args: any[]) {\n\t\t\tconst innerScopes = self.initFunctionScope(stack);\n\t\t\tstack.declareVariable('this', this);\n\t\t\tself.setParameter(stack, args);\n\t\t\tlet returnValue: any;\n\t\t\tconst statements = (self.body as BlockStatement).getBody();\n\t\t\tfor (const statement of statements) {\n\t\t\t\tstatement.shareVariables(innerScopes);\n\t\t\t\treturnValue = statement.get(stack);\n\t\t\t\tif (returnValue instanceof ReturnValue) {\n\t\t\t\t\tself.clearFunctionScope(stack, innerScopes);\n\t\t\t\t\treturn returnValue.value;\n\t\t\t\t} else if (returnValue instanceof YieldValue) {\n\t\t\t\t\tyield returnValue.value;\n\t\t\t\t} else if (returnValue instanceof YieldDelegateValue) {\n\t\t\t\t\tyield* returnValue.value;\n\t\t\t\t}\n\t\t\t}\n\t\t\tself.clearFunctionScope(stack, innerScopes);\n\t\t};\n\t}\n\tprivate getAsyncGeneratorFunction(stack: Stack) {\n\t\tconst self = this;\n\t\treturn async function* (this: any, ...args: any[]) {\n\t\t\tconst innerScopes = self.initFunctionScope(stack);\n\t\t\tstack.declareVariable('this', this);\n\t\t\tself.setParameter(stack, args);\n\t\t\tlet returnValue: any;\n\t\t\tconst statements = (self.body as BlockStatement).getBody();\n\t\t\tfor (const statement of statements) {\n\t\t\t\tstatement.shareVariables(innerScopes);\n\t\t\t\treturnValue = statement.get(stack);\n\t\t\t\tif (stack.awaitPromise.length > 0) {\n\t\t\t\t\tfor (const awaitRef of stack.awaitPromise) {\n\t\t\t\t\t\tconst awaitValue = await awaitRef.promise;\n\t\t\t\t\t\tif (awaitRef.declareVariable) {\n\t\t\t\t\t\t\tawaitRef.node.declareVariable(stack, awaitValue);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tawaitRef.node.set(stack, awaitValue);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tstack.awaitPromise.splice(0);\n\t\t\t\t}\n\t\t\t\telse if (stack.forAwaitAsyncIterable) {\n\t\t\t\t\tfor await (let iterator of stack.forAwaitAsyncIterable.iterable) {\n\t\t\t\t\t\tconst result = stack.forAwaitAsyncIterable.forAwaitBody(iterator);\n\t\t\t\t\t\tif (result instanceof TerminateReturnType) {\n\t\t\t\t\t\t\tif (result.type === 'continue') {\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (result instanceof ReturnValue) {\n\t\t\t\t\t\t\tself.clearFunctionScope(stack, innerScopes);\n\t\t\t\t\t\t\treturnValue = returnValue.value;\n\t\t\t\t\t\t\tif (returnValue instanceof AwaitPromise) {\n\t\t\t\t\t\t\t\treturn await returnValue.promise;\n\t\t\t\t\t\t\t} else if (returnValue instanceof YieldValue) {\n\t\t\t\t\t\t\t\tyield returnValue.value;\n\t\t\t\t\t\t\t} else if (returnValue instanceof YieldDelegateValue) {\n\t\t\t\t\t\t\t\tyield* returnValue.value;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn returnValue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tstack.forAwaitAsyncIterable = undefined;\n\t\t\t\t}\n\t\t\t\tif (returnValue instanceof ReturnValue) {\n\t\t\t\t\treturnValue = returnValue.value;\n\t\t\t\t\tif (returnValue instanceof AwaitPromise) {\n\t\t\t\t\t\treturn await returnValue.promise;\n\t\t\t\t\t}\n\t\t\t\t\treturn returnValue;\n\t\t\t\t}\n\t\t\t}\n\t\t\tself.clearFunctionScope(stack, innerScopes);\n\t\t};\n\t}\n\tprivate getFunction(stack: Stack) {\n\t\tconst self = this;\n\t\treturn function (this: any, ...args: any[]) {\n\t\t\tconst innerScopes = self.initFunctionScope(stack);\n\t\t\tstack.declareVariable('this', this);\n\t\t\tself.setParameter(stack, args);\n\t\t\tlet returnValue: any;\n\t\t\tconst statements = (self.body as BlockStatement).getBody();\n\t\t\tfor (const statement of statements) {\n\t\t\t\tstatement.shareVariables(innerScopes);\n\t\t\t\treturnValue = statement.get(stack);\n\t\t\t\tif (returnValue instanceof ReturnValue) {\n\t\t\t\t\tself.clearFunctionScope(stack, innerScopes);\n\t\t\t\t\treturn returnValue.value;\n\t\t\t\t}\n\t\t\t}\n\t\t\tself.clearFunctionScope(stack, innerScopes);\n\t\t};\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.params.flatMap(param => param.dependency());\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.params.flatMap(param => param.dependencyPath(computed));\n\t}\n\ttoString(): string {\n\t\tlet declare: string = 'function ';\n\t\tif (this.async && this.generator) {\n\t\t\tdeclare = 'async function* ';\n\t\t} else if (this.async) {\n\t\t\tdeclare = 'async function ';\n\t\t} else if (this.generator) {\n\t\t\tdeclare = 'function* ';\n\t\t}\n\t\treturn `${declare}${this.id?.toString() || ''}${this.paramsAndBodyToString()}`;\n\t}\n\tparamsAndBodyToString() {\n\t\treturn `(${this.params.map(param => param.toString()).join(', ')}) ${this.body.toString()}`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tparams: this.params.map(param => param.toJSON()),\n\t\t\tbody: this.body.toJSON(),\n\t\t\tasync: this.async,\n\t\t\tid: this.id?.toJSON(),\n\t\t\tgenerator: this.generator\n\t\t};\n\t}\n}\n\n@Deserializer('FunctionDeclaration')\nexport class FunctionDeclaration extends FunctionExpression implements DeclarationExpression {\n\tstatic fromJSON(node: FunctionDeclaration, deserializer: NodeDeserializer): FunctionDeclaration {\n\t\treturn new FunctionDeclaration(\n\t\t\tnode.params.map(deserializer),\n\t\t\tdeserializer(node.body),\n\t\t\tnode.async,\n\t\t\tnode.generator,\n\t\t\tdeserializer(node.id) as Identifier\n\t\t);\n\t}\n\tstatic visit(node: FunctionDeclaration, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.id);\n\t\tnode.params.forEach(visitNode);\n\t\tvisitNode(node.body);\n\t}\n\tdeclare protected id: Identifier;\n\tconstructor(\n\t\tparams: ExpressionNode[],\n\t\tbody: ExpressionNode,\n\t\tasync: boolean,\n\t\tgenerator: boolean,\n\t\tid: Identifier) {\n\t\tsuper(params, body, async, generator, id);\n\t}\n\toverride get(stack: Stack): Function {\n\t\tconst func = super.get(stack);\n\t\tthis.declareVariable(stack, func);\n\t\treturn func;\n\t}\n\tdeclareVariable(stack: Stack, value: Function) {\n\t\tthis.id.declareVariable(stack, value);\n\t}\n}\n\n\n@Deserializer('ArrowFunctionExpression')\nexport class ArrowFunctionExpression extends BaseFunctionExpression {\n\tstatic fromJSON(node: ArrowFunctionExpression, deserializer: NodeDeserializer): ArrowFunctionExpression {\n\t\treturn new ArrowFunctionExpression(\n\t\t\tnode.params.map(deserializer),\n\t\t\tArray.isArray(node.body)\n\t\t\t\t? node.body.map(deserializer)\n\t\t\t\t: deserializer(node.body),\n\t\t\tnode.expression,\n\t\t\tnode.async\n\t\t);\n\t}\n\tstatic visit(node: ArrowFunctionExpression, visitNode: VisitNodeType): void {\n\t\tnode.params.forEach(visitNode);\n\t\tArray.isArray(node.body)\n\t\t\t? node.body.forEach(visitNode)\n\t\t\t: visitNode(node.body);\n\t}\n\tprivate generator = false;\n\tconstructor(\n\t\tprivate params: ExpressionNode[],\n\t\tprivate body: ExpressionNode | ExpressionNode[],\n\t\tprivate expression: boolean,\n\t\tprivate async: boolean,) {\n\t\tsuper();\n\t}\n\tgetParams() {\n\t\treturn this.params;\n\t}\n\tgetBody() {\n\t\treturn this.body;\n\t}\n\tgetExpression() {\n\t\treturn this.expression;\n\t}\n\tset(stack: Stack, value: Function) {\n\t\tthrow new Error('ArrowFunctionExpression#set() has no implementation.');\n\t}\n\tprivate setParameter(stack: Stack, args: any[]) {\n\t\tconst rest = this.params[this.params.length - 1] instanceof RestElement;\n\t\tconst limit = rest ? this.params.length - 1 : this.params.length;\n\t\tfor (let i = 0; i < limit; i++) {\n\t\t\tthis.params[i].set(stack, args[i]);\n\t\t}\n\t\tif (rest) {\n\t\t\tthis.params[limit].set(stack, args.slice(limit));\n\t\t}\n\t}\n\tget(stack: Stack) {\n\t\treturn this.async ? this.getAsyncArrowFunction(stack) : this.getArrowFunction(stack);\n\t}\n\tprivate getAsyncArrowFunction(stack: Stack) {\n\t\tasync (...args: any[]) => {\n\t\t\tconst innerScopes = this.initFunctionScope(stack);\n\t\t\tthis.setParameter(stack, args);\n\t\t\tlet returnValue: any;\n\t\t\tconst statements = Array.isArray(this.body) ? this.body : [this.body];\n\t\t\tfor (const state of statements) {\n\t\t\t\tstate.shareVariables(innerScopes);\n\t\t\t\treturnValue = state.get(stack);\n\t\t\t\tif (stack.awaitPromise.length > 0) {\n\t\t\t\t\tfor (const awaitRef of stack.awaitPromise) {\n\t\t\t\t\t\tconst awaitValue = await awaitRef.promise;\n\t\t\t\t\t\tif (awaitRef.declareVariable) {\n\t\t\t\t\t\t\tawaitRef.node.declareVariable(stack, awaitValue);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tawaitRef.node.set(stack, awaitValue);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tstack.awaitPromise.splice(0);\n\t\t\t\t}\n\t\t\t\telse if (stack.forAwaitAsyncIterable) {\n\t\t\t\t\tfor await (let iterator of stack.forAwaitAsyncIterable.iterable) {\n\t\t\t\t\t\tconst result = stack.forAwaitAsyncIterable.forAwaitBody(iterator);\n\t\t\t\t\t\tif (result instanceof TerminateReturnType) {\n\t\t\t\t\t\t\tif (result.type === 'continue') {\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (result instanceof ReturnValue) {\n\t\t\t\t\t\t\treturnValue = result;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tstack.forAwaitAsyncIterable = undefined;\n\t\t\t\t}\n\t\t\t\tif (returnValue instanceof ReturnValue) {\n\t\t\t\t\treturnValue = returnValue.value;\n\t\t\t\t\tif (returnValue instanceof AwaitPromise) {\n\t\t\t\t\t\tthis.clearFunctionScope(stack, innerScopes);\n\t\t\t\t\t\treturn await returnValue.promise;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.clearFunctionScope(stack, innerScopes);\n\t\t\tif (this.expression) {\n\t\t\t\treturn returnValue;\n\t\t\t}\n\t\t};\n\t}\n\tprivate getArrowFunction(stack: Stack) {\n\t\treturn (...args: any[]) => {\n\t\t\tconst innerScopes = this.initFunctionScope(stack);\n\t\t\tthis.setParameter(stack, args);\n\t\t\tlet returnValue: any;\n\t\t\tconst statements = Array.isArray(this.body) ? this.body : [this.body];\n\t\t\tfor (const statement of statements) {\n\t\t\t\tstatement.shareVariables(innerScopes);\n\t\t\t\treturnValue = statement.get(stack);\n\t\t\t\tif (returnValue instanceof ReturnValue) {\n\t\t\t\t\tthis.clearFunctionScope(stack, innerScopes);\n\t\t\t\t\treturn returnValue.value;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.clearFunctionScope(stack, innerScopes);\n\t\t\tif (this.expression) {\n\t\t\t\treturn returnValue;\n\t\t\t}\n\t\t};\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.params.flatMap(param => param.dependency());\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.params.flatMap(param => param.dependencyPath(computed));\n\t}\n\ttoString(): string {\n\t\tlet str = this.async ? 'async ' : '';\n\t\tif (this.params.length === 1) {\n\t\t\tstr += this.params[0].toString();\n\t\t} else {\n\t\t\tstr += `(${this.params.map(param => param.toString()).join(', ')})`;\n\t\t}\n\t\tstr += ' => ';\n\t\tstr += this.body.toString();\n\t\treturn str;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tparams: this.params.map(param => param.toJSON()),\n\t\t\tbody: Array.isArray(this.body) ? this.body.map(item => item.toJSON()) : this.body.toJSON(),\n\t\t\texpression: true,\n\t\t\tasync: this.async,\n\t\t\tgenerator: this.generator\n\t\t};\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"function.js","sourceRoot":"","sources":["../../../../src/expressions/api/definition/function.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n\tDeclarationExpression, ExpressionEventPath, ExpressionNode,\n\tNodeDeserializer, VisitNodeType\n} from '../expression.js';\nimport { Stack } from '../../scope/stack.js';\nimport { Scope } from '../../scope/scope.js';\nimport {\n\tAbstractExpressionNode, AwaitPromise, ReturnValue,\n\tYieldDelegateValue, YieldValue\n} from '../abstract.js';\nimport { Deserializer } from '../deserialize/deserialize.js';\nimport { Identifier } from './values.js';\nimport { TerminateReturnType } from '../statement/control/terminate.js';\nimport { RestElement } from '../computing/rest.js';\nimport { BlockStatement } from '../statement/control/block.js';\n\n@Deserializer('Param')\nexport class Param extends AbstractExpressionNode {\n\tstatic fromJSON(node: Param, deserializer: NodeDeserializer): Param {\n\t\treturn new Param(\n\t\t\tdeserializer(node.identifier) as DeclarationExpression,\n\t\t\tnode.defaultValue ? deserializer(node.defaultValue) as Identifier : void 0\n\t\t);\n\t}\n\tstatic visit(node: Param, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.identifier);\n\t\tnode.defaultValue && visitNode(node.defaultValue);\n\t}\n\tconstructor(private identifier: DeclarationExpression, private defaultValue?: ExpressionNode) {\n\t\tsuper();\n\t}\n\tgetIdentifier() {\n\t\treturn this.identifier;\n\t}\n\tgetDefaultValue() {\n\t\treturn this.defaultValue;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.defaultValue?.shareVariables(scopeList);\n\t}\n\tset(stack: Stack, value: Function) {\n\t\tthis.identifier.declareVariable?.(stack, value);\n\t}\n\tget(stack: Stack) {\n\t\tthrow new Error('Param#get() has no implementation.');\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.defaultValue ? [this.defaultValue] : [];\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.defaultValue?.dependencyPath(computed) || [];\n\t}\n\ttoString(): string {\n\t\tlet init = this.defaultValue ? (' = ' + this.defaultValue.toString()) : '';\n\t\treturn this.identifier.toString() + init;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tidentifier: this.identifier.toJSON(),\n\t\t\tdefaultValue: this.defaultValue?.toJSON()\n\t\t};\n\t}\n}\n\nexport abstract class BaseFunctionExpression extends AbstractExpressionNode {\n\tprivate sharedVariables: Scope<any>[];\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.sharedVariables = scopeList;\n\t}\n\tinitFunctionScope(stack: Stack) {\n\t\tconst scope = Scope.blockScope<object>();\n\t\tconst innerScopes = this.sharedVariables ? this.sharedVariables.slice() : [];\n\t\tinnerScopes.push(scope);\n\t\tinnerScopes.forEach(variableScope => stack.pushScope(variableScope));\n\t\treturn innerScopes;\n\t}\n\tclearFunctionScope(stack: Stack, innerScopes: Scope<any>[]) {\n\t\tstack.clearTo(innerScopes[0]);\n\t}\n}\n\n@Deserializer('FunctionExpression')\nexport class FunctionExpression extends BaseFunctionExpression {\n\tstatic fromJSON(node: FunctionExpression, deserializer: NodeDeserializer): FunctionExpression {\n\t\treturn new FunctionExpression(\n\t\t\tnode.params.map(deserializer),\n\t\t\tdeserializer(node.body),\n\t\t\tnode.async,\n\t\t\tnode.generator,\n\t\t\tnode.id ? deserializer(node.id) as Identifier : void 0,\n\t\t);\n\t}\n\tstatic visit(node: FunctionExpression, visitNode: VisitNodeType): void {\n\t\tnode.id && visitNode(node.id);\n\t\tnode.params.forEach(visitNode);\n\t\tvisitNode(node.body);\n\t}\n\tconstructor(\n\t\tprotected params: ExpressionNode[], protected body: ExpressionNode,\n\t\tprotected async: boolean, protected generator: boolean,\n\t\tprotected id?: Identifier,\n\t) {\n\t\tsuper();\n\t}\n\tgetParams() {\n\t\treturn this.params;\n\t}\n\tgetBody() {\n\t\treturn this.body;\n\t}\n\tgetGenerator() {\n\t\treturn this.generator;\n\t}\n\tgetId() {\n\t\treturn this.id;\n\t}\n\tgetAsync() {\n\t\treturn this.async;\n\t}\n\tset(stack: Stack, value: Function) {\n\t\tthrow new Error(`${this.constructor.name}#set() has no implementation.`);\n\t}\n\tsetParameter(stack: Stack, args: any[]) {\n\t\tconst rest = this.params[this.params.length - 1] instanceof RestElement;\n\t\tconst limit = rest ? this.params.length - 1 : this.params.length;\n\t\tfor (let i = 0; i < limit; i++) {\n\t\t\tthis.params[i].set(stack, args[i]);\n\t\t}\n\t\tif (rest) {\n\t\t\tthis.params[limit].set(stack, args.slice(limit));\n\t\t}\n\t}\n\tget(stack: Stack) {\n\t\tlet func: Function;\n\t\tif (this.async && this.generator) {\n\t\t\tfunc = this.getAsyncGeneratorFunction(stack);\n\t\t} else if (this.async) {\n\t\t\tfunc = this.getAsyncFunction(stack);\n\t\t} else if (this.generator) {\n\t\t\tfunc = this.getGeneratorFunction(stack);\n\t\t} else {\n\t\t\tfunc = this.getFunction(stack);\n\t\t}\n\t\t// this.id?.declareVariable(stack, func);\n\t\treturn func;\n\t}\n\tprivate getAsyncFunction(stack: Stack) {\n\t\tconst self = this;\n\t\treturn async function (this: any, ...args: any[]) {\n\t\t\tconst innerScopes = self.initFunctionScope(stack);\n\t\t\tstack.declareVariable('this', this);\n\t\t\tself.setParameter(stack, args);\n\t\t\tlet returnValue: any;\n\t\t\tconst statements = (self.body as BlockStatement).getBody();\n\t\t\tfor (const statement of statements) {\n\t\t\t\tstatement.shareVariables(innerScopes);\n\t\t\t\treturnValue = statement.get(stack);\n\t\t\t\tif (stack.awaitPromise.length > 0) {\n\t\t\t\t\tfor (const awaitRef of stack.awaitPromise) {\n\t\t\t\t\t\tconst awaitValue = await awaitRef.promise;\n\t\t\t\t\t\tif (awaitRef.declareVariable) {\n\t\t\t\t\t\t\tawaitRef.node.declareVariable(stack, awaitValue);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tawaitRef.node.set(stack, awaitValue);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tstack.awaitPromise.splice(0);\n\t\t\t\t}\n\t\t\t\telse if (stack.forAwaitAsyncIterable) {\n\t\t\t\t\tfor await (let iterator of stack.forAwaitAsyncIterable.iterable) {\n\t\t\t\t\t\tconst result = stack.forAwaitAsyncIterable.forAwaitBody(iterator);\n\t\t\t\t\t\tif (result instanceof TerminateReturnType) {\n\t\t\t\t\t\t\tif (result.type === 'continue') {\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (result instanceof ReturnValue) {\n\t\t\t\t\t\t\treturnValue = result;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tstack.forAwaitAsyncIterable = undefined;\n\t\t\t\t}\n\t\t\t\tif (returnValue instanceof ReturnValue) {\n\t\t\t\t\treturnValue = returnValue.value;\n\t\t\t\t\tif (returnValue instanceof AwaitPromise) {\n\t\t\t\t\t\treturnValue = await returnValue.promise;\n\t\t\t\t\t\tself.clearFunctionScope(stack, innerScopes);\n\t\t\t\t\t\treturn returnValue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tself.clearFunctionScope(stack, innerScopes);\n\t\t};\n\n\t}\n\tprivate getGeneratorFunction(stack: Stack) {\n\t\tconst self = this;\n\t\treturn function* (this: any, ...args: any[]) {\n\t\t\tconst innerScopes = self.initFunctionScope(stack);\n\t\t\tstack.declareVariable('this', this);\n\t\t\tself.setParameter(stack, args);\n\t\t\tlet returnValue: any;\n\t\t\tconst statements = (self.body as BlockStatement).getBody();\n\t\t\tfor (const statement of statements) {\n\t\t\t\tstatement.shareVariables(innerScopes);\n\t\t\t\treturnValue = statement.get(stack);\n\t\t\t\tif (returnValue instanceof ReturnValue) {\n\t\t\t\t\tself.clearFunctionScope(stack, innerScopes);\n\t\t\t\t\treturn returnValue.value;\n\t\t\t\t} else if (returnValue instanceof YieldValue) {\n\t\t\t\t\tyield returnValue.value;\n\t\t\t\t} else if (returnValue instanceof YieldDelegateValue) {\n\t\t\t\t\tyield* returnValue.value;\n\t\t\t\t}\n\t\t\t}\n\t\t\tself.clearFunctionScope(stack, innerScopes);\n\t\t};\n\t}\n\tprivate getAsyncGeneratorFunction(stack: Stack) {\n\t\tconst self = this;\n\t\treturn async function* (this: any, ...args: any[]) {\n\t\t\tconst innerScopes = self.initFunctionScope(stack);\n\t\t\tstack.declareVariable('this', this);\n\t\t\tself.setParameter(stack, args);\n\t\t\tlet returnValue: any;\n\t\t\tconst statements = (self.body as BlockStatement).getBody();\n\t\t\tfor (const statement of statements) {\n\t\t\t\tstatement.shareVariables(innerScopes);\n\t\t\t\treturnValue = statement.get(stack);\n\t\t\t\tif (stack.awaitPromise.length > 0) {\n\t\t\t\t\tfor (const awaitRef of stack.awaitPromise) {\n\t\t\t\t\t\tconst awaitValue = await awaitRef.promise;\n\t\t\t\t\t\tif (awaitRef.declareVariable) {\n\t\t\t\t\t\t\tawaitRef.node.declareVariable(stack, awaitValue);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tawaitRef.node.set(stack, awaitValue);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tstack.awaitPromise.splice(0);\n\t\t\t\t}\n\t\t\t\telse if (stack.forAwaitAsyncIterable) {\n\t\t\t\t\tfor await (let iterator of stack.forAwaitAsyncIterable.iterable) {\n\t\t\t\t\t\tconst result = stack.forAwaitAsyncIterable.forAwaitBody(iterator);\n\t\t\t\t\t\tif (result instanceof TerminateReturnType) {\n\t\t\t\t\t\t\tif (result.type === 'continue') {\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (result instanceof ReturnValue) {\n\t\t\t\t\t\t\tself.clearFunctionScope(stack, innerScopes);\n\t\t\t\t\t\t\treturnValue = returnValue.value;\n\t\t\t\t\t\t\tif (returnValue instanceof AwaitPromise) {\n\t\t\t\t\t\t\t\treturn await returnValue.promise;\n\t\t\t\t\t\t\t} else if (returnValue instanceof YieldValue) {\n\t\t\t\t\t\t\t\tyield returnValue.value;\n\t\t\t\t\t\t\t} else if (returnValue instanceof YieldDelegateValue) {\n\t\t\t\t\t\t\t\tyield* returnValue.value;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn returnValue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tstack.forAwaitAsyncIterable = undefined;\n\t\t\t\t}\n\t\t\t\tif (returnValue instanceof ReturnValue) {\n\t\t\t\t\treturnValue = returnValue.value;\n\t\t\t\t\tif (returnValue instanceof AwaitPromise) {\n\t\t\t\t\t\treturn await returnValue.promise;\n\t\t\t\t\t}\n\t\t\t\t\treturn returnValue;\n\t\t\t\t}\n\t\t\t}\n\t\t\tself.clearFunctionScope(stack, innerScopes);\n\t\t};\n\t}\n\tprivate getFunction(stack: Stack) {\n\t\tconst self = this;\n\t\treturn function (this: any, ...args: any[]) {\n\t\t\tconst innerScopes = self.initFunctionScope(stack);\n\t\t\tstack.declareVariable('this', this);\n\t\t\tself.setParameter(stack, args);\n\t\t\tlet returnValue: any;\n\t\t\tconst statements = (self.body as BlockStatement).getBody();\n\t\t\tfor (const statement of statements) {\n\t\t\t\tstatement.shareVariables(innerScopes);\n\t\t\t\treturnValue = statement.get(stack);\n\t\t\t\tif (returnValue instanceof ReturnValue) {\n\t\t\t\t\tself.clearFunctionScope(stack, innerScopes);\n\t\t\t\t\treturn returnValue.value;\n\t\t\t\t}\n\t\t\t}\n\t\t\tself.clearFunctionScope(stack, innerScopes);\n\t\t};\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.params.flatMap(param => param.dependency());\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.params.flatMap(param => param.dependencyPath(computed));\n\t}\n\ttoString(): string {\n\t\tlet declare: string = 'function ';\n\t\tif (this.async && this.generator) {\n\t\t\tdeclare = 'async function* ';\n\t\t} else if (this.async) {\n\t\t\tdeclare = 'async function ';\n\t\t} else if (this.generator) {\n\t\t\tdeclare = 'function* ';\n\t\t}\n\t\treturn `${declare}${this.id?.toString() || ''}${this.paramsAndBodyToString()}`;\n\t}\n\tparamsAndBodyToString() {\n\t\treturn `(${this.params.map(param => param.toString()).join(', ')}) ${this.body.toString()}`;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tparams: this.params.map(param => param.toJSON()),\n\t\t\tbody: this.body.toJSON(),\n\t\t\tasync: this.async,\n\t\t\tid: this.id?.toJSON(),\n\t\t\tgenerator: this.generator\n\t\t};\n\t}\n}\n\n@Deserializer('FunctionDeclaration')\nexport class FunctionDeclaration extends FunctionExpression implements DeclarationExpression {\n\tstatic fromJSON(node: FunctionDeclaration, deserializer: NodeDeserializer): FunctionDeclaration {\n\t\treturn new FunctionDeclaration(\n\t\t\tnode.params.map(deserializer),\n\t\t\tdeserializer(node.body),\n\t\t\tnode.async,\n\t\t\tnode.generator,\n\t\t\tdeserializer(node.id) as Identifier\n\t\t);\n\t}\n\tstatic visit(node: FunctionDeclaration, visitNode: VisitNodeType): void {\n\t\tvisitNode(node.id);\n\t\tnode.params.forEach(visitNode);\n\t\tvisitNode(node.body);\n\t}\n\tdeclare protected id: Identifier;\n\tconstructor(\n\t\tparams: ExpressionNode[],\n\t\tbody: ExpressionNode,\n\t\tasync: boolean,\n\t\tgenerator: boolean,\n\t\tid: Identifier) {\n\t\tsuper(params, body, async, generator, id);\n\t}\n\toverride get(stack: Stack): Function {\n\t\tconst func = super.get(stack);\n\t\tthis.declareVariable(stack, func);\n\t\treturn func;\n\t}\n\tdeclareVariable(stack: Stack, value: Function) {\n\t\tthis.id.declareVariable(stack, value);\n\t}\n}\n\n\n@Deserializer('ArrowFunctionExpression')\nexport class ArrowFunctionExpression extends BaseFunctionExpression {\n\tstatic fromJSON(node: ArrowFunctionExpression, deserializer: NodeDeserializer): ArrowFunctionExpression {\n\t\treturn new ArrowFunctionExpression(\n\t\t\tnode.params.map(deserializer),\n\t\t\tArray.isArray(node.body)\n\t\t\t\t? node.body.map(deserializer)\n\t\t\t\t: deserializer(node.body),\n\t\t\tnode.expression,\n\t\t\tnode.async\n\t\t);\n\t}\n\tstatic visit(node: ArrowFunctionExpression, visitNode: VisitNodeType): void {\n\t\tnode.params.forEach(visitNode);\n\t\tArray.isArray(node.body)\n\t\t\t? node.body.forEach(visitNode)\n\t\t\t: visitNode(node.body);\n\t}\n\tprivate generator = false;\n\tconstructor(\n\t\tprivate params: ExpressionNode[],\n\t\tprivate body: ExpressionNode | ExpressionNode[],\n\t\tprivate expression: boolean,\n\t\tprivate async: boolean,) {\n\t\tsuper();\n\t}\n\tgetParams() {\n\t\treturn this.params;\n\t}\n\tgetBody() {\n\t\treturn this.body;\n\t}\n\tgetExpression() {\n\t\treturn this.expression;\n\t}\n\tset(stack: Stack, value: Function) {\n\t\tthrow new Error('ArrowFunctionExpression#set() has no implementation.');\n\t}\n\tprivate setParameter(stack: Stack, args: any[]) {\n\t\tconst rest = this.params[this.params.length - 1] instanceof RestElement;\n\t\tconst limit = rest ? this.params.length - 1 : this.params.length;\n\t\tfor (let i = 0; i < limit; i++) {\n\t\t\tthis.params[i].set(stack, args[i]);\n\t\t}\n\t\tif (rest) {\n\t\t\tthis.params[limit].set(stack, args.slice(limit));\n\t\t}\n\t}\n\tget(stack: Stack) {\n\t\treturn this.async ? this.getAsyncArrowFunction(stack) : this.getArrowFunction(stack);\n\t}\n\tprivate getAsyncArrowFunction(stack: Stack) {\n\t\tasync (...args: any[]) => {\n\t\t\tconst innerScopes = this.initFunctionScope(stack);\n\t\t\tthis.setParameter(stack, args);\n\t\t\tlet returnValue: any;\n\t\t\tconst statements = Array.isArray(this.body) ? this.body : [this.body];\n\t\t\tfor (const state of statements) {\n\t\t\t\tstate.shareVariables(innerScopes);\n\t\t\t\treturnValue = state.get(stack);\n\t\t\t\tif (stack.awaitPromise.length > 0) {\n\t\t\t\t\tfor (const awaitRef of stack.awaitPromise) {\n\t\t\t\t\t\tconst awaitValue = await awaitRef.promise;\n\t\t\t\t\t\tif (awaitRef.declareVariable) {\n\t\t\t\t\t\t\tawaitRef.node.declareVariable(stack, awaitValue);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tawaitRef.node.set(stack, awaitValue);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tstack.awaitPromise.splice(0);\n\t\t\t\t}\n\t\t\t\telse if (stack.forAwaitAsyncIterable) {\n\t\t\t\t\tfor await (let iterator of stack.forAwaitAsyncIterable.iterable) {\n\t\t\t\t\t\tconst result = stack.forAwaitAsyncIterable.forAwaitBody(iterator);\n\t\t\t\t\t\tif (result instanceof TerminateReturnType) {\n\t\t\t\t\t\t\tif (result.type === 'continue') {\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (result instanceof ReturnValue) {\n\t\t\t\t\t\t\treturnValue = result;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tstack.forAwaitAsyncIterable = undefined;\n\t\t\t\t}\n\t\t\t\tif (returnValue instanceof ReturnValue) {\n\t\t\t\t\treturnValue = returnValue.value;\n\t\t\t\t\tif (returnValue instanceof AwaitPromise) {\n\t\t\t\t\t\tthis.clearFunctionScope(stack, innerScopes);\n\t\t\t\t\t\treturn await returnValue.promise;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.clearFunctionScope(stack, innerScopes);\n\t\t\tif (this.expression) {\n\t\t\t\treturn returnValue;\n\t\t\t}\n\t\t};\n\t}\n\tprivate getArrowFunction(stack: Stack) {\n\t\treturn (...args: any[]) => {\n\t\t\tconst innerScopes = this.initFunctionScope(stack);\n\t\t\tthis.setParameter(stack, args);\n\t\t\tlet returnValue: any;\n\t\t\tconst statements = Array.isArray(this.body) ? this.body : [this.body];\n\t\t\tfor (const statement of statements) {\n\t\t\t\tstatement.shareVariables(innerScopes);\n\t\t\t\treturnValue = statement.get(stack);\n\t\t\t\tif (returnValue instanceof ReturnValue) {\n\t\t\t\t\tthis.clearFunctionScope(stack, innerScopes);\n\t\t\t\t\treturn returnValue.value;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.clearFunctionScope(stack, innerScopes);\n\t\t\tif (this.expression) {\n\t\t\t\treturn returnValue;\n\t\t\t}\n\t\t};\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.params.flatMap(param => param.dependency());\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.params.flatMap(param => param.dependencyPath(computed));\n\t}\n\ttoString(): string {\n\t\tlet str = this.async ? 'async ' : '';\n\t\tif (this.params.length === 1) {\n\t\t\tstr += this.params[0].toString();\n\t\t} else {\n\t\t\tstr += `(${this.params.map(param => param.toString()).join(', ')})`;\n\t\t}\n\t\tstr += ' => ';\n\t\tstr += this.body.toString();\n\t\treturn str;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tparams: this.params.map(param => param.toJSON()),\n\t\t\tbody: Array.isArray(this.body) ? this.body.map(item => item.toJSON()) : this.body.toJSON(),\n\t\t\texpression: true,\n\t\t\tasync: this.async,\n\t\t\tgenerator: this.generator\n\t\t};\n\t}\n}\n"]}
|
|
@@ -2,6 +2,15 @@ import type { DeclarationExpression, ExpressionNode, NodeDeserializer, CanFindSc
|
|
|
2
2
|
import type { Scope } from '../../scope/scope.js';
|
|
3
3
|
import type { Stack } from '../../scope/stack.js';
|
|
4
4
|
import { AbstractExpressionNode } from '../abstract.js';
|
|
5
|
+
/**
|
|
6
|
+
* An identifier is a sequence of characters in the code that identifies a variable, function, or property.
|
|
7
|
+
* In JavaScript, identifiers are case-sensitive and can contain Unicode letters, $, _, and digits (0-9),
|
|
8
|
+
* but may not start with a digit.
|
|
9
|
+
* An identifier differs from a string in that a string is data,
|
|
10
|
+
* while an identifier is part of the code. In JavaScript,
|
|
11
|
+
* there is no way to convert identifiers to strings,
|
|
12
|
+
* but sometimes it is possible to parse strings into identifiers.
|
|
13
|
+
*/
|
|
5
14
|
export declare class Identifier extends AbstractExpressionNode implements DeclarationExpression, CanFindScope {
|
|
6
15
|
protected name: string | number;
|
|
7
16
|
static fromJSON(node: Identifier): Identifier;
|
package/api/definition/values.js
CHANGED
|
@@ -2,6 +2,15 @@ var Identifier_1, Literal_1;
|
|
|
2
2
|
import { __decorate, __metadata } from "tslib";
|
|
3
3
|
import { Deserializer } from '../deserialize/deserialize.js';
|
|
4
4
|
import { AbstractExpressionNode } from '../abstract.js';
|
|
5
|
+
/**
|
|
6
|
+
* An identifier is a sequence of characters in the code that identifies a variable, function, or property.
|
|
7
|
+
* In JavaScript, identifiers are case-sensitive and can contain Unicode letters, $, _, and digits (0-9),
|
|
8
|
+
* but may not start with a digit.
|
|
9
|
+
* An identifier differs from a string in that a string is data,
|
|
10
|
+
* while an identifier is part of the code. In JavaScript,
|
|
11
|
+
* there is no way to convert identifiers to strings,
|
|
12
|
+
* but sometimes it is possible to parse strings into identifiers.
|
|
13
|
+
*/
|
|
5
14
|
let Identifier = Identifier_1 = class Identifier extends AbstractExpressionNode {
|
|
6
15
|
constructor(name) {
|
|
7
16
|
super();
|
|
@@ -237,6 +246,18 @@ TaggedTemplateExpression = __decorate([
|
|
|
237
246
|
__metadata("design:paramtypes", [Object, Array, Array])
|
|
238
247
|
], TaggedTemplateExpression);
|
|
239
248
|
export { TaggedTemplateExpression };
|
|
249
|
+
// @Deserializer('BigIntLiteral')
|
|
250
|
+
// export class BigIntLiteral extends Literal<bigint> {
|
|
251
|
+
// static fromJSON(node: BigIntLiteral): BigIntLiteral {
|
|
252
|
+
// return new BigIntLiteral(BigInt(String(node.value)));
|
|
253
|
+
// }
|
|
254
|
+
// toString(): string {
|
|
255
|
+
// return `${this.value}n`;
|
|
256
|
+
// }
|
|
257
|
+
// toJson(): object {
|
|
258
|
+
// return { value: this.value.toString() };
|
|
259
|
+
// }
|
|
260
|
+
// }
|
|
240
261
|
export const TRUE = String(true);
|
|
241
262
|
export const FALSE = String(false);
|
|
242
263
|
export const NULL = String(null);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"values.js","sourceRoot":"","sources":["../../../../src/expressions/api/definition/values.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n\tDeclarationExpression, ExpressionNode, NodeDeserializer,\n\tCanFindScope, ExpressionEventPath, VisitNodeType\n} from '../expression.js';\nimport type { Scope } from '../../scope/scope.js';\nimport type { Stack } from '../../scope/stack.js';\nimport { Deserializer } from '../deserialize/deserialize.js';\nimport { AbstractExpressionNode } from '../abstract.js';\n\n/**\n * An identifier is a sequence of characters in the code that identifies a variable, function, or property.\n * In JavaScript, identifiers are case-sensitive and can contain Unicode letters, $, _, and digits (0-9),\n * but may not start with a digit.\n * An identifier differs from a string in that a string is data,\n * while an identifier is part of the code. In JavaScript,\n * there is no way to convert identifiers to strings,\n * but sometimes it is possible to parse strings into identifiers.\n */\n@Deserializer('Identifier')\nexport class Identifier extends AbstractExpressionNode implements DeclarationExpression, CanFindScope {\n\tstatic fromJSON(node: Identifier): Identifier {\n\t\treturn new Identifier(node.name);\n\t}\n\tconstructor(protected name: string | number) {\n\t\tsuper();\n\t}\n\tgetName() {\n\t\treturn this.name;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void { }\n\tset(stack: Stack, value: any) {\n\t\treturn stack.set(this.name, value) ? value : void 0;\n\t}\n\tget(stack: Stack, thisContext?: any) {\n\t\tif (thisContext) {\n\t\t\treturn thisContext[this.name];\n\t\t}\n\t\treturn stack.get(this.name);\n\t}\n\tfindScope<T extends object>(stack: Stack): Scope<T>;\n\tfindScope<T extends object>(stack: Stack, scope: Scope<any>): Scope<T>;\n\tfindScope<T extends object>(stack: Stack, scope?: Scope<any>): Scope<T> | undefined {\n\t\tif (scope) {\n\t\t\treturn scope.getScope(this.name);\n\t\t}\n\t\tscope = stack.findScope(this.name);\n\t\treturn scope.getScope(this.name);\n\t}\n\tdeclareVariable(stack: Stack, propertyValue: any): any {\n\t\treturn stack.declareVariable(this.name, propertyValue);\n\t}\n\tgetDeclarationName(): string {\n\t\treturn this.toString();\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn [this];\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\tconst path: ExpressionEventPath[] = [{ computed: false, path: this.toString() }];\n\t\treturn computed ? [{ computed, path: this.toString(), computedPath: [path] }] : path;\n\t}\n\ttoString(): string {\n\t\treturn String(this.name);\n\t}\n\ttoJson(): object {\n\t\treturn { name: this.name };\n\t}\n}\n\n@Deserializer('ThisExpression')\nexport class ThisExpression extends Identifier {\n\tstatic fromJSON(node: ThisExpression): ThisExpression {\n\t\treturn ThisNode;\n\t}\n\tconstructor() {\n\t\tsuper('this');\n\t}\n}\n\n@Deserializer('Literal')\nexport class Literal<T> extends AbstractExpressionNode implements CanFindScope {\n\tstatic fromJSON(node: Literal<any>):\n\t\tLiteral<string>\n\t\t| Literal<number>\n\t\t| Literal<boolean>\n\t\t| Literal<RegExp>\n\t\t| Literal<bigint>\n\t\t| Literal<null>\n\t\t| Literal<undefined> {\n\t\tif (node.bigint) {\n\t\t\treturn new Literal(BigInt(node.bigint), node.raw, undefined, node.bigint);\n\t\t} else if (node.regex) {\n\t\t\treturn new Literal(RegExp(node.regex.pattern, node.regex.flags), node.raw, node.regex);\n\t\t}\n\t\treturn new Literal(node.value, node.raw);\n\t}\n\tconstructor(protected value: T, protected raw?: string, protected regex?: { pattern: string, flags: string }, protected bigint?: string) {\n\t\tsuper();\n\t}\n\tgetValue() {\n\t\treturn this.value;\n\t}\n\tgetRegex() {\n\t\treturn this.regex;\n\t}\n\tgetBigint() {\n\t\treturn this.bigint;\n\t}\n\tgeRaw() {\n\t\treturn this.raw;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void { }\n\tset() {\n\t\tthrow new Error(`${this.constructor.name}#set() has no implementation.`);\n\t}\n\tget(): T {\n\t\treturn this.value;\n\t}\n\tfindScope<V extends object>(stack: Stack): Scope<V>;\n\tfindScope<V extends object>(stack: Stack, scope: Scope<any>): Scope<V>;\n\tfindScope<V extends object>(stack: Stack, scope?: Scope<any>): Scope<V> | undefined {\n\t\tif (scope) {\n\t\t\treturn scope.getScope<V>(this.value as any);\n\t\t}\n\t\tscope = stack.findScope<V>(this.value as any);\n\t\treturn scope.getScope<V>(this.value as any);\n\t}\n\tdependency(computed: true): ExpressionNode[] {\n\t\treturn computed ? [this] : [];\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn computed ? [{ computed: false, path: this.toString() }] : [];\n\t}\n\ttoString(): string {\n\t\treturn this.raw ?? String(this.value);\n\t}\n\ttoJson(): object {\n\t\tif (this.bigint) {\n\t\t\treturn {\n\t\t\t\tbigint: this.bigint,\n\t\t\t\traw: this.raw,\n\t\t\t};\n\t\t} else if (this.regex) {\n\t\t\treturn {\n\t\t\t\tregex: { pattern: this.regex?.pattern, flags: this.regex?.flags },\n\t\t\t\traw: this.raw,\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tvalue: this.value,\n\t\t\traw: this.raw,\n\t\t};\n\t}\n}\n\nclass TemplateArray extends Array<string> implements TemplateStringsArray {\n\traw: readonly string[];\n\tconstructor(strings: string[]) {\n\t\tsuper(...strings);\n\t\tthis.raw = strings;\n\t}\n}\n\nexport class TemplateLiteralExpressionNode extends AbstractExpressionNode {\n\tstatic fromJSON(node: TemplateLiteralExpressionNode, deserializer: NodeDeserializer): TemplateLiteralExpressionNode {\n\t\treturn new TemplateLiteralExpressionNode(\n\t\t\tnode.quasis,\n\t\t\tnode.expressions.map(deserializer),\n\t\t\tnode.tag ? deserializer(node.tag) : void 0\n\t\t);\n\t}\n\tstatic visit(node: TemplateLiteralExpressionNode, visitNode: VisitNodeType): void {\n\t\tnode.tag && visitNode(node.tag);\n\t\tnode.expressions.forEach(visitNode);\n\t}\n\tconstructor(protected quasis: string[], protected expressions: ExpressionNode[], protected tag?: ExpressionNode,) {\n\t\tsuper();\n\t}\n\tgetTag() {\n\t\treturn this.tag;\n\t}\n\tgetExpressions() {\n\t\treturn this.expressions;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.expressions.forEach(value => value.shareVariables(scopeList));\n\t}\n\tset(stack: Stack, value: any) {\n\t\tthrow new Error(`TemplateLiteralExpressionNode#set() has no implementation.`);\n\t}\n\tget(stack: Stack) {\n\t\tconst tagged: Function = this.tag?.get(stack) || String.raw;\n\t\tconst templateStringsArray = new TemplateArray(this.quasis);\n\t\ttemplateStringsArray.raw = templateStringsArray;\n\t\tconst values = this.expressions.map(expr => expr.get(stack));\n\t\treturn tagged(templateStringsArray, ...values);\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.expressions.flatMap(exp => exp.dependency(computed));\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.expressions.flatMap(exp => exp.dependencyPath(computed));\n\t}\n\ttoString(): string {\n\t\tlet str = this.tag?.toString() || '';\n\t\tstr += '`';\n\t\tlet i = 0;\n\t\tfor (; i < this.quasis.length - 1; i++) {\n\t\t\tstr += this.quasis[i];\n\t\t\tstr += '${';\n\t\t\tstr += this.expressions[i].toString();\n\t\t\tstr += '}';\n\t\t}\n\t\tstr += this.quasis[i];\n\t\tstr += '`';\n\t\treturn str;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tquasis: this.quasis,\n\t\t\texpressions: this.expressions.map(expr => expr.toJSON()),\n\t\t\ttag: this.tag?.toJSON(),\n\t\t};\n\t}\n}\n\n@Deserializer('TemplateLiteral')\nexport class TemplateLiteral extends TemplateLiteralExpressionNode {\n\tdeclare protected tag: undefined;\n\tconstructor(quasis: string[], expressions: ExpressionNode[]) {\n\t\tsuper(quasis, expressions);\n\t}\n\toverride getTag(): undefined {\n\t\treturn undefined;\n\t}\n}\n\n@Deserializer('TaggedTemplateExpression')\nexport class TaggedTemplateExpression extends TemplateLiteralExpressionNode {\n\tdeclare protected tag: ExpressionNode;\n\tconstructor(tag: ExpressionNode, quasis: string[], expressions: ExpressionNode[]) {\n\t\tsuper(quasis, expressions, tag);\n\t}\n\toverride getTag(): ExpressionNode {\n\t\treturn super.getTag()!;\n\t}\n}\n\n\n// @Deserializer('BigIntLiteral')\n// export class BigIntLiteral extends Literal<bigint> {\n// \tstatic fromJSON(node: BigIntLiteral): BigIntLiteral {\n// \t\treturn new BigIntLiteral(BigInt(String(node.value)));\n// \t}\n// \ttoString(): string {\n// \t\treturn `${this.value}n`;\n// \t}\n// \ttoJson(): object {\n// \t\treturn { value: this.value.toString() };\n// \t}\n// }\n\n\nexport const TRUE = String(true);\nexport const FALSE = String(false);\n\nexport const NULL = String(null);\nexport const UNDEFINED = String(undefined);\n\nexport const NullNode = Object.freeze(new Literal<null>(null)) as Literal<null>;\nexport const UndefinedNode = Object.freeze(new Literal<undefined>(undefined)) as Literal<undefined>;\nexport const TrueNode = Object.freeze(new Literal<boolean>(true)) as Literal<boolean>;\nexport const FalseNode = Object.freeze(new Literal<boolean>(false)) as Literal<boolean>;\nexport const ThisNode = Object.freeze(new ThisExpression()) as ThisExpression;\nexport const GlobalThisNode = Object.freeze(new Identifier('globalThis')) as Identifier;\nexport const SymbolNode = Object.freeze(new Identifier('Symbol')) as Identifier;\nexport const OfNode = Object.freeze(new Identifier('of')) as Identifier;\nexport const AsNode = Object.freeze(new Identifier('as')) as Identifier;\nexport const DefaultNode = Object.freeze(new Identifier('default')) as Identifier;\nexport const GetIdentifier = Object.freeze(new Identifier('get')) as Identifier;\nexport const SetIdentifier = Object.freeze(new Identifier('set')) as Identifier;\nexport const AsyncIdentifier = Object.freeze(new Identifier('async')) as Identifier;\nexport const AwaitIdentifier = Object.freeze(new Identifier('await')) as Identifier;\nexport const ConstructorIdentifier = Object.freeze(new Identifier('constructor')) as Identifier;\nexport const NameIdentifier = Object.freeze(new Identifier('name')) as Identifier;\nexport const EvalIdentifier = Object.freeze(new Identifier('eval')) as Identifier;\nexport const ArgumentsIdentifier = Object.freeze(new Identifier('arguments')) as Identifier;\nexport const YieldIdentifier = Object.freeze(new Identifier('yield')) as Identifier;\nexport const SuperIdentifier = Object.freeze(new Identifier('super')) as Identifier;\nexport const LetIdentifier = Object.freeze(new Identifier('let')) as Identifier;\n"]}
|
|
1
|
+
{"version":3,"file":"values.js","sourceRoot":"","sources":["../../../../src/expressions/api/definition/values.ts"],"names":[],"mappings":";;AAMA,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAExD;;;;;;;;GAQG;AAEH,IAAa,UAAU,kBAAvB,MAAa,UAAW,SAAQ,sBAAsB;IAIrD,YAAsB,IAAqB;QAC1C,KAAK,EAAE,CAAC;QADa,SAAI,GAAJ,IAAI,CAAiB;IAE3C,CAAC;IALD,MAAM,CAAC,QAAQ,CAAC,IAAgB;QAC/B,OAAO,IAAI,YAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAID,OAAO;QACN,OAAO,IAAI,CAAC,IAAI,CAAC;IAClB,CAAC;IACD,cAAc,CAAC,SAAuB,IAAU,CAAC;IACjD,GAAG,CAAC,KAAY,EAAE,KAAU;QAC3B,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACrD,CAAC;IACD,GAAG,CAAC,KAAY,EAAE,WAAiB;QAClC,IAAI,WAAW,EAAE;YAChB,OAAO,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAC9B;QACD,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAGD,SAAS,CAAmB,KAAY,EAAE,KAAkB;QAC3D,IAAI,KAAK,EAAE;YACV,OAAO,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACjC;QACD,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnC,OAAO,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IACD,eAAe,CAAC,KAAY,EAAE,aAAkB;QAC/C,OAAO,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IACxD,CAAC;IACD,kBAAkB;QACjB,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;IACxB,CAAC;IACD,UAAU,CAAC,QAAe;QACzB,OAAO,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;IACD,cAAc,CAAC,QAAe;QAC7B,MAAM,IAAI,GAA0B,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACjF,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,YAAY,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACtF,CAAC;IACD,QAAQ;QACP,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IACD,MAAM;QACL,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,CAAC;CACD,CAAA;AAhDY,UAAU;IADtB,YAAY,CAAC,YAAY,CAAC;;GACd,UAAU,CAgDtB;SAhDY,UAAU;AAmDvB,IAAa,cAAc,GAA3B,MAAa,cAAe,SAAQ,UAAU;IAC7C,MAAM,CAAC,QAAQ,CAAC,IAAoB;QACnC,OAAO,QAAQ,CAAC;IACjB,CAAC;IACD;QACC,KAAK,CAAC,MAAM,CAAC,CAAC;IACf,CAAC;CACD,CAAA;AAPY,cAAc;IAD1B,YAAY,CAAC,gBAAgB,CAAC;;GAClB,cAAc,CAO1B;SAPY,cAAc;AAU3B,IAAa,OAAO,eAApB,MAAa,OAAW,SAAQ,sBAAsB;IAgBrD,YAAsB,KAAQ,EAAY,GAAY,EAAY,KAA0C,EAAY,MAAe;QACtI,KAAK,EAAE,CAAC;QADa,UAAK,GAAL,KAAK,CAAG;QAAY,QAAG,GAAH,GAAG,CAAS;QAAY,UAAK,GAAL,KAAK,CAAqC;QAAY,WAAM,GAAN,MAAM,CAAS;IAEvI,CAAC;IAjBD,MAAM,CAAC,QAAQ,CAAC,IAAkB;QAQjC,IAAI,IAAI,CAAC,MAAM,EAAE;YAChB,OAAO,IAAI,SAAO,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;SAC1E;aAAM,IAAI,IAAI,CAAC,KAAK,EAAE;YACtB,OAAO,IAAI,SAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;SACvF;QACD,OAAO,IAAI,SAAO,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1C,CAAC;IAID,QAAQ;QACP,OAAO,IAAI,CAAC,KAAK,CAAC;IACnB,CAAC;IACD,QAAQ;QACP,OAAO,IAAI,CAAC,KAAK,CAAC;IACnB,CAAC;IACD,SAAS;QACR,OAAO,IAAI,CAAC,MAAM,CAAC;IACpB,CAAC;IACD,KAAK;QACJ,OAAO,IAAI,CAAC,GAAG,CAAC;IACjB,CAAC;IACD,cAAc,CAAC,SAAuB,IAAU,CAAC;IACjD,GAAG;QACF,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,+BAA+B,CAAC,CAAC;IAC1E,CAAC;IACD,GAAG;QACF,OAAO,IAAI,CAAC,KAAK,CAAC;IACnB,CAAC;IAGD,SAAS,CAAmB,KAAY,EAAE,KAAkB;QAC3D,IAAI,KAAK,EAAE;YACV,OAAO,KAAK,CAAC,QAAQ,CAAI,IAAI,CAAC,KAAY,CAAC,CAAC;SAC5C;QACD,KAAK,GAAG,KAAK,CAAC,SAAS,CAAI,IAAI,CAAC,KAAY,CAAC,CAAC;QAC9C,OAAO,KAAK,CAAC,QAAQ,CAAI,IAAI,CAAC,KAAY,CAAC,CAAC;IAC7C,CAAC;IACD,UAAU,CAAC,QAAc;QACxB,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/B,CAAC;IACD,cAAc,CAAC,QAAe;QAC7B,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACrE,CAAC;IACD,QAAQ;QACP,OAAO,IAAI,CAAC,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;IACD,MAAM;QACL,IAAI,IAAI,CAAC,MAAM,EAAE;YAChB,OAAO;gBACN,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,GAAG,EAAE,IAAI,CAAC,GAAG;aACb,CAAC;SACF;aAAM,IAAI,IAAI,CAAC,KAAK,EAAE;YACtB,OAAO;gBACN,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE;gBACjE,GAAG,EAAE,IAAI,CAAC,GAAG;aACb,CAAC;SACF;QACD,OAAO;YACN,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,GAAG,EAAE,IAAI,CAAC,GAAG;SACb,CAAC;IACH,CAAC;CACD,CAAA;AAzEY,OAAO;IADnB,YAAY,CAAC,SAAS,CAAC;;GACX,OAAO,CAyEnB;SAzEY,OAAO;AA2EpB,MAAM,aAAc,SAAQ,KAAa;IAExC,YAAY,OAAiB;QAC5B,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC;QAClB,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC;IACpB,CAAC;CACD;AAED,MAAM,OAAO,6BAA8B,SAAQ,sBAAsB;IAYxE,YAAsB,MAAgB,EAAY,WAA6B,EAAY,GAAoB;QAC9G,KAAK,EAAE,CAAC;QADa,WAAM,GAAN,MAAM,CAAU;QAAY,gBAAW,GAAX,WAAW,CAAkB;QAAY,QAAG,GAAH,GAAG,CAAiB;IAE/G,CAAC;IAbD,MAAM,CAAC,QAAQ,CAAC,IAAmC,EAAE,YAA8B;QAClF,OAAO,IAAI,6BAA6B,CACvC,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,EAClC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAC1C,CAAC;IACH,CAAC;IACD,MAAM,CAAC,KAAK,CAAC,IAAmC,EAAE,SAAwB;QACzE,IAAI,CAAC,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACrC,CAAC;IAID,MAAM;QACL,OAAO,IAAI,CAAC,GAAG,CAAC;IACjB,CAAC;IACD,cAAc;QACb,OAAO,IAAI,CAAC,WAAW,CAAC;IACzB,CAAC;IACD,cAAc,CAAC,SAAuB;QACrC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC;IACpE,CAAC;IACD,GAAG,CAAC,KAAY,EAAE,KAAU;QAC3B,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;IAC/E,CAAC;IACD,GAAG,CAAC,KAAY;QACf,MAAM,MAAM,GAAa,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC;QAC5D,MAAM,oBAAoB,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5D,oBAAoB,CAAC,GAAG,GAAG,oBAAoB,CAAC;QAChD,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;QAC7D,OAAO,MAAM,CAAC,oBAAoB,EAAE,GAAG,MAAM,CAAC,CAAC;IAChD,CAAC;IACD,UAAU,CAAC,QAAe;QACzB,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;IAClE,CAAC;IACD,cAAc,CAAC,QAAe;QAC7B,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC;IACtE,CAAC;IACD,QAAQ;QACP,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QACrC,GAAG,IAAI,GAAG,CAAC;QACX,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YACvC,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACtB,GAAG,IAAI,IAAI,CAAC;YACZ,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;YACtC,GAAG,IAAI,GAAG,CAAC;SACX;QACD,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACtB,GAAG,IAAI,GAAG,CAAC;QACX,OAAO,GAAG,CAAC;IACZ,CAAC;IACD,MAAM;QACL,OAAO;YACN,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACxD,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE;SACvB,CAAC;IACH,CAAC;CACD;AAGD,IAAa,eAAe,GAA5B,MAAa,eAAgB,SAAQ,6BAA6B;IAEjE,YAAY,MAAgB,EAAE,WAA6B;QAC1D,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC5B,CAAC;IACQ,MAAM;QACd,OAAO,SAAS,CAAC;IAClB,CAAC;CACD,CAAA;AARY,eAAe;IAD3B,YAAY,CAAC,iBAAiB,CAAC;;GACnB,eAAe,CAQ3B;SARY,eAAe;AAW5B,IAAa,wBAAwB,GAArC,MAAa,wBAAyB,SAAQ,6BAA6B;IAE1E,YAAY,GAAmB,EAAE,MAAgB,EAAE,WAA6B;QAC/E,KAAK,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,CAAC,CAAC;IACjC,CAAC;IACQ,MAAM;QACd,OAAO,KAAK,CAAC,MAAM,EAAG,CAAC;IACxB,CAAC;CACD,CAAA;AARY,wBAAwB;IADpC,YAAY,CAAC,0BAA0B,CAAC;;GAC5B,wBAAwB,CAQpC;SARY,wBAAwB;AAWrC,iCAAiC;AACjC,uDAAuD;AACvD,yDAAyD;AACzD,0DAA0D;AAC1D,KAAK;AACL,wBAAwB;AACxB,6BAA6B;AAC7B,KAAK;AACL,sBAAsB;AACtB,6CAA6C;AAC7C,KAAK;AACL,IAAI;AAGJ,MAAM,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;AACjC,MAAM,CAAC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;AAEnC,MAAM,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;AACjC,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;AAE3C,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,OAAO,CAAO,IAAI,CAAC,CAAkB,CAAC;AAChF,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,OAAO,CAAY,SAAS,CAAC,CAAuB,CAAC;AACpG,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,OAAO,CAAU,IAAI,CAAC,CAAqB,CAAC;AACtF,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,OAAO,CAAU,KAAK,CAAC,CAAqB,CAAC;AACxF,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,cAAc,EAAE,CAAmB,CAAC;AAC9E,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,YAAY,CAAC,CAAe,CAAC;AACxF,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAe,CAAC;AAChF,MAAM,CAAC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAe,CAAC;AACxE,MAAM,CAAC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAe,CAAC;AACxE,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,SAAS,CAAC,CAAe,CAAC;AAClF,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,CAAe,CAAC;AAChF,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,CAAe,CAAC;AAChF,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,CAAe,CAAC;AACpF,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,CAAe,CAAC;AACpF,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,aAAa,CAAC,CAAe,CAAC;AAChG,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,CAAe,CAAC;AAClF,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,CAAe,CAAC;AAClF,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,WAAW,CAAC,CAAe,CAAC;AAC5F,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,CAAe,CAAC;AACpF,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,CAAe,CAAC;AACpF,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,CAAe,CAAC","sourcesContent":["import type {\n\tDeclarationExpression, ExpressionNode, NodeDeserializer,\n\tCanFindScope, ExpressionEventPath, VisitNodeType\n} from '../expression.js';\nimport type { Scope } from '../../scope/scope.js';\nimport type { Stack } from '../../scope/stack.js';\nimport { Deserializer } from '../deserialize/deserialize.js';\nimport { AbstractExpressionNode } from '../abstract.js';\n\n/**\n * An identifier is a sequence of characters in the code that identifies a variable, function, or property.\n * In JavaScript, identifiers are case-sensitive and can contain Unicode letters, $, _, and digits (0-9),\n * but may not start with a digit.\n * An identifier differs from a string in that a string is data,\n * while an identifier is part of the code. In JavaScript,\n * there is no way to convert identifiers to strings,\n * but sometimes it is possible to parse strings into identifiers.\n */\n@Deserializer('Identifier')\nexport class Identifier extends AbstractExpressionNode implements DeclarationExpression, CanFindScope {\n\tstatic fromJSON(node: Identifier): Identifier {\n\t\treturn new Identifier(node.name);\n\t}\n\tconstructor(protected name: string | number) {\n\t\tsuper();\n\t}\n\tgetName() {\n\t\treturn this.name;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void { }\n\tset(stack: Stack, value: any) {\n\t\treturn stack.set(this.name, value) ? value : void 0;\n\t}\n\tget(stack: Stack, thisContext?: any) {\n\t\tif (thisContext) {\n\t\t\treturn thisContext[this.name];\n\t\t}\n\t\treturn stack.get(this.name);\n\t}\n\tfindScope<T extends object>(stack: Stack): Scope<T>;\n\tfindScope<T extends object>(stack: Stack, scope: Scope<any>): Scope<T>;\n\tfindScope<T extends object>(stack: Stack, scope?: Scope<any>): Scope<T> | undefined {\n\t\tif (scope) {\n\t\t\treturn scope.getScope(this.name);\n\t\t}\n\t\tscope = stack.findScope(this.name);\n\t\treturn scope.getScope(this.name);\n\t}\n\tdeclareVariable(stack: Stack, propertyValue: any): any {\n\t\treturn stack.declareVariable(this.name, propertyValue);\n\t}\n\tgetDeclarationName(): string {\n\t\treturn this.toString();\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn [this];\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\tconst path: ExpressionEventPath[] = [{ computed: false, path: this.toString() }];\n\t\treturn computed ? [{ computed, path: this.toString(), computedPath: [path] }] : path;\n\t}\n\ttoString(): string {\n\t\treturn String(this.name);\n\t}\n\ttoJson(): object {\n\t\treturn { name: this.name };\n\t}\n}\n\n@Deserializer('ThisExpression')\nexport class ThisExpression extends Identifier {\n\tstatic fromJSON(node: ThisExpression): ThisExpression {\n\t\treturn ThisNode;\n\t}\n\tconstructor() {\n\t\tsuper('this');\n\t}\n}\n\n@Deserializer('Literal')\nexport class Literal<T> extends AbstractExpressionNode implements CanFindScope {\n\tstatic fromJSON(node: Literal<any>):\n\t\tLiteral<string>\n\t\t| Literal<number>\n\t\t| Literal<boolean>\n\t\t| Literal<RegExp>\n\t\t| Literal<bigint>\n\t\t| Literal<null>\n\t\t| Literal<undefined> {\n\t\tif (node.bigint) {\n\t\t\treturn new Literal(BigInt(node.bigint), node.raw, undefined, node.bigint);\n\t\t} else if (node.regex) {\n\t\t\treturn new Literal(RegExp(node.regex.pattern, node.regex.flags), node.raw, node.regex);\n\t\t}\n\t\treturn new Literal(node.value, node.raw);\n\t}\n\tconstructor(protected value: T, protected raw?: string, protected regex?: { pattern: string, flags: string }, protected bigint?: string) {\n\t\tsuper();\n\t}\n\tgetValue() {\n\t\treturn this.value;\n\t}\n\tgetRegex() {\n\t\treturn this.regex;\n\t}\n\tgetBigint() {\n\t\treturn this.bigint;\n\t}\n\tgeRaw() {\n\t\treturn this.raw;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void { }\n\tset() {\n\t\tthrow new Error(`${this.constructor.name}#set() has no implementation.`);\n\t}\n\tget(): T {\n\t\treturn this.value;\n\t}\n\tfindScope<V extends object>(stack: Stack): Scope<V>;\n\tfindScope<V extends object>(stack: Stack, scope: Scope<any>): Scope<V>;\n\tfindScope<V extends object>(stack: Stack, scope?: Scope<any>): Scope<V> | undefined {\n\t\tif (scope) {\n\t\t\treturn scope.getScope<V>(this.value as any);\n\t\t}\n\t\tscope = stack.findScope<V>(this.value as any);\n\t\treturn scope.getScope<V>(this.value as any);\n\t}\n\tdependency(computed: true): ExpressionNode[] {\n\t\treturn computed ? [this] : [];\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn computed ? [{ computed: false, path: this.toString() }] : [];\n\t}\n\ttoString(): string {\n\t\treturn this.raw ?? String(this.value);\n\t}\n\ttoJson(): object {\n\t\tif (this.bigint) {\n\t\t\treturn {\n\t\t\t\tbigint: this.bigint,\n\t\t\t\traw: this.raw,\n\t\t\t};\n\t\t} else if (this.regex) {\n\t\t\treturn {\n\t\t\t\tregex: { pattern: this.regex?.pattern, flags: this.regex?.flags },\n\t\t\t\traw: this.raw,\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tvalue: this.value,\n\t\t\traw: this.raw,\n\t\t};\n\t}\n}\n\nclass TemplateArray extends Array<string> implements TemplateStringsArray {\n\traw: readonly string[];\n\tconstructor(strings: string[]) {\n\t\tsuper(...strings);\n\t\tthis.raw = strings;\n\t}\n}\n\nexport class TemplateLiteralExpressionNode extends AbstractExpressionNode {\n\tstatic fromJSON(node: TemplateLiteralExpressionNode, deserializer: NodeDeserializer): TemplateLiteralExpressionNode {\n\t\treturn new TemplateLiteralExpressionNode(\n\t\t\tnode.quasis,\n\t\t\tnode.expressions.map(deserializer),\n\t\t\tnode.tag ? deserializer(node.tag) : void 0\n\t\t);\n\t}\n\tstatic visit(node: TemplateLiteralExpressionNode, visitNode: VisitNodeType): void {\n\t\tnode.tag && visitNode(node.tag);\n\t\tnode.expressions.forEach(visitNode);\n\t}\n\tconstructor(protected quasis: string[], protected expressions: ExpressionNode[], protected tag?: ExpressionNode,) {\n\t\tsuper();\n\t}\n\tgetTag() {\n\t\treturn this.tag;\n\t}\n\tgetExpressions() {\n\t\treturn this.expressions;\n\t}\n\tshareVariables(scopeList: Scope<any>[]): void {\n\t\tthis.expressions.forEach(value => value.shareVariables(scopeList));\n\t}\n\tset(stack: Stack, value: any) {\n\t\tthrow new Error(`TemplateLiteralExpressionNode#set() has no implementation.`);\n\t}\n\tget(stack: Stack) {\n\t\tconst tagged: Function = this.tag?.get(stack) || String.raw;\n\t\tconst templateStringsArray = new TemplateArray(this.quasis);\n\t\ttemplateStringsArray.raw = templateStringsArray;\n\t\tconst values = this.expressions.map(expr => expr.get(stack));\n\t\treturn tagged(templateStringsArray, ...values);\n\t}\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.expressions.flatMap(exp => exp.dependency(computed));\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.expressions.flatMap(exp => exp.dependencyPath(computed));\n\t}\n\ttoString(): string {\n\t\tlet str = this.tag?.toString() || '';\n\t\tstr += '`';\n\t\tlet i = 0;\n\t\tfor (; i < this.quasis.length - 1; i++) {\n\t\t\tstr += this.quasis[i];\n\t\t\tstr += '${';\n\t\t\tstr += this.expressions[i].toString();\n\t\t\tstr += '}';\n\t\t}\n\t\tstr += this.quasis[i];\n\t\tstr += '`';\n\t\treturn str;\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tquasis: this.quasis,\n\t\t\texpressions: this.expressions.map(expr => expr.toJSON()),\n\t\t\ttag: this.tag?.toJSON(),\n\t\t};\n\t}\n}\n\n@Deserializer('TemplateLiteral')\nexport class TemplateLiteral extends TemplateLiteralExpressionNode {\n\tdeclare protected tag: undefined;\n\tconstructor(quasis: string[], expressions: ExpressionNode[]) {\n\t\tsuper(quasis, expressions);\n\t}\n\toverride getTag(): undefined {\n\t\treturn undefined;\n\t}\n}\n\n@Deserializer('TaggedTemplateExpression')\nexport class TaggedTemplateExpression extends TemplateLiteralExpressionNode {\n\tdeclare protected tag: ExpressionNode;\n\tconstructor(tag: ExpressionNode, quasis: string[], expressions: ExpressionNode[]) {\n\t\tsuper(quasis, expressions, tag);\n\t}\n\toverride getTag(): ExpressionNode {\n\t\treturn super.getTag()!;\n\t}\n}\n\n\n// @Deserializer('BigIntLiteral')\n// export class BigIntLiteral extends Literal<bigint> {\n// \tstatic fromJSON(node: BigIntLiteral): BigIntLiteral {\n// \t\treturn new BigIntLiteral(BigInt(String(node.value)));\n// \t}\n// \ttoString(): string {\n// \t\treturn `${this.value}n`;\n// \t}\n// \ttoJson(): object {\n// \t\treturn { value: this.value.toString() };\n// \t}\n// }\n\n\nexport const TRUE = String(true);\nexport const FALSE = String(false);\n\nexport const NULL = String(null);\nexport const UNDEFINED = String(undefined);\n\nexport const NullNode = Object.freeze(new Literal<null>(null)) as Literal<null>;\nexport const UndefinedNode = Object.freeze(new Literal<undefined>(undefined)) as Literal<undefined>;\nexport const TrueNode = Object.freeze(new Literal<boolean>(true)) as Literal<boolean>;\nexport const FalseNode = Object.freeze(new Literal<boolean>(false)) as Literal<boolean>;\nexport const ThisNode = Object.freeze(new ThisExpression()) as ThisExpression;\nexport const GlobalThisNode = Object.freeze(new Identifier('globalThis')) as Identifier;\nexport const SymbolNode = Object.freeze(new Identifier('Symbol')) as Identifier;\nexport const OfNode = Object.freeze(new Identifier('of')) as Identifier;\nexport const AsNode = Object.freeze(new Identifier('as')) as Identifier;\nexport const DefaultNode = Object.freeze(new Identifier('default')) as Identifier;\nexport const GetIdentifier = Object.freeze(new Identifier('get')) as Identifier;\nexport const SetIdentifier = Object.freeze(new Identifier('set')) as Identifier;\nexport const AsyncIdentifier = Object.freeze(new Identifier('async')) as Identifier;\nexport const AwaitIdentifier = Object.freeze(new Identifier('await')) as Identifier;\nexport const ConstructorIdentifier = Object.freeze(new Identifier('constructor')) as Identifier;\nexport const NameIdentifier = Object.freeze(new Identifier('name')) as Identifier;\nexport const EvalIdentifier = Object.freeze(new Identifier('eval')) as Identifier;\nexport const ArgumentsIdentifier = Object.freeze(new Identifier('arguments')) as Identifier;\nexport const YieldIdentifier = Object.freeze(new Identifier('yield')) as Identifier;\nexport const SuperIdentifier = Object.freeze(new Identifier('super')) as Identifier;\nexport const LetIdentifier = Object.freeze(new Identifier('let')) as Identifier;\n"]}
|
|
@@ -2,5 +2,10 @@ import type { ExpressionNode, ExpressionNodConstructor } from '../expression.js'
|
|
|
2
2
|
export declare function Deserializer(type: string): Function;
|
|
3
3
|
export declare function getDeserializerType(target: ExpressionNodConstructor<ExpressionNode>): string;
|
|
4
4
|
export declare function serializeNode(node: ExpressionNode): string;
|
|
5
|
+
/**
|
|
6
|
+
* convert from json expression `JSON.stringify(node)` or `serializeNode` to `ExpressionNode`
|
|
7
|
+
* @param node as type `NodeJsonType`
|
|
8
|
+
* @returns ExpressionNode
|
|
9
|
+
*/
|
|
5
10
|
export declare function deserialize(node: ExpressionNode): ExpressionNode;
|
|
6
11
|
export declare function deserializeNode(node: string): ExpressionNode;
|
|
@@ -12,6 +12,11 @@ export function getDeserializerType(target) {
|
|
|
12
12
|
export function serializeNode(node) {
|
|
13
13
|
return JSON.stringify(node);
|
|
14
14
|
}
|
|
15
|
+
/**
|
|
16
|
+
* convert from json expression `JSON.stringify(node)` or `serializeNode` to `ExpressionNode`
|
|
17
|
+
* @param node as type `NodeJsonType`
|
|
18
|
+
* @returns ExpressionNode
|
|
19
|
+
*/
|
|
15
20
|
export function deserialize(node) {
|
|
16
21
|
const fromJSON = expressionTypes.get(node.type)?.fromJSON;
|
|
17
22
|
if (fromJSON) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deserialize.js","sourceRoot":"","sources":["../../../../src/expressions/api/deserialize/deserialize.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAIlD,MAAM,UAAU,YAAY,CAAC,IAAY;IACxC,OAAO,CAAC,MAAgD,EAAE,EAAE;QAC3D,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;QACnB,eAAe,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAClC,OAAO,MAAM,CAAC;IACf,CAAC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAgD;IACnF,OAAO,MAAM,CAAC,IAAI,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAoB;IACjD,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;
|
|
1
|
+
{"version":3,"file":"deserialize.js","sourceRoot":"","sources":["../../../../src/expressions/api/deserialize/deserialize.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAIlD,MAAM,UAAU,YAAY,CAAC,IAAY;IACxC,OAAO,CAAC,MAAgD,EAAE,EAAE;QAC3D,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;QACnB,eAAe,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAClC,OAAO,MAAM,CAAC;IACf,CAAC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAgD;IACnF,OAAO,MAAM,CAAC,IAAI,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAoB;IACjD,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAGD;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,IAAoB;IAC/C,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAO,IAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC;IACjE,IAAI,QAAQ,EAAE;QACb,OAAO,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;KACnC;SAAM;QACN,MAAM,IAAI,KAAK,CAAC,4CAA4C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KACrF;AACF,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAY;IAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7B,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC","sourcesContent":["import type { ExpressionNode, ExpressionNodConstructor } from '../expression.js';\nimport { expressionTypes } from './type-store.js';\n\n\n\nexport function Deserializer(type: string): Function {\n\treturn (target: ExpressionNodConstructor<ExpressionNode>) => {\n\t\ttarget.type = type;\n\t\texpressionTypes.set(type, target);\n\t\treturn target;\n\t};\n}\n\nexport function getDeserializerType(target: ExpressionNodConstructor<ExpressionNode>) {\n\treturn target.type;\n}\n\nexport function serializeNode(node: ExpressionNode) {\n\treturn JSON.stringify(node);\n}\n\n\n/**\n * convert from json expression `JSON.stringify(node)` or `serializeNode` to `ExpressionNode`\n * @param node as type `NodeJsonType`\n * @returns ExpressionNode\n */\nexport function deserialize(node: ExpressionNode) {\n\tconst fromJSON = expressionTypes.get((<any>node).type)?.fromJSON;\n\tif (fromJSON) {\n\t\treturn fromJSON(node, deserialize);\n\t} else {\n\t\tthrow new Error(`Couldn't find Expression class for name: ${JSON.stringify(node)}.`);\n\t}\n}\n\nexport function deserializeNode(node: string) {\n\tconst exp = JSON.parse(node);\n\treturn deserialize(exp);\n}\n"]}
|
package/api/expression.d.ts
CHANGED
|
@@ -21,28 +21,174 @@ export declare type ExpressionEventMap = {
|
|
|
21
21
|
[key: string]: ExpressionEventMap;
|
|
22
22
|
};
|
|
23
23
|
export interface ExpressionNode {
|
|
24
|
+
/**
|
|
25
|
+
* pass scope list from outer function to inner function,
|
|
26
|
+
*
|
|
27
|
+
* all other end point expression should do nothing,
|
|
28
|
+
* if this function executed.
|
|
29
|
+
*
|
|
30
|
+
* @param scopeList all outer function scopes given to the inner function,
|
|
31
|
+
* this solution ignore the fact that some inner function has no need to
|
|
32
|
+
* get shared variables, as its implementation never say that
|
|
33
|
+
* ```js
|
|
34
|
+
* function f(d) {
|
|
35
|
+
* function g() {
|
|
36
|
+
* const a = ({ d }) => d;
|
|
37
|
+
* return a;
|
|
38
|
+
* }
|
|
39
|
+
* return [d, g];
|
|
40
|
+
* }
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
24
43
|
shareVariables(scopeList: Scope<ScopeContext>[]): void;
|
|
44
|
+
/**
|
|
45
|
+
* assign the value to this expression in stack.
|
|
46
|
+
*
|
|
47
|
+
* most ExpressionNode will not implement this method, and will throw an exception.
|
|
48
|
+
* @param stack
|
|
49
|
+
* @param value
|
|
50
|
+
*/
|
|
25
51
|
set(stack: Stack, value: any): any;
|
|
52
|
+
/**
|
|
53
|
+
* execute/get the code for this expression and return the result value.
|
|
54
|
+
* @param stack
|
|
55
|
+
* @param thisContext
|
|
56
|
+
*/
|
|
26
57
|
get(stack: Stack, thisContext?: any): any;
|
|
58
|
+
/**
|
|
59
|
+
* get all dependencies form an expression node
|
|
60
|
+
*
|
|
61
|
+
* tha return from this method, is represent an answer for what identifiers this expression depends-on.
|
|
62
|
+
*
|
|
63
|
+
*
|
|
64
|
+
* ex:
|
|
65
|
+
* ```js
|
|
66
|
+
* x + y;
|
|
67
|
+
* ```
|
|
68
|
+
*
|
|
69
|
+
* - for `+` operator : the answer should be `lhs` and `rhs`,
|
|
70
|
+
* - for `x` identifier: the answer should be node `x`,
|
|
71
|
+
* - for `y` identifier: the answer should be node `y`.
|
|
72
|
+
*
|
|
73
|
+
* so, the return from `+` will be `[ node 'x', node 'y']`
|
|
74
|
+
*
|
|
75
|
+
* and:
|
|
76
|
+
* - `x.y.z * a` ==> `[ member node `x.y.z`, identifier 'a']`
|
|
77
|
+
* @param computed
|
|
78
|
+
*/
|
|
27
79
|
dependency(computed?: true): ExpressionNode[];
|
|
80
|
+
/**
|
|
81
|
+
* ex:
|
|
82
|
+
* ```js
|
|
83
|
+
* x + y;
|
|
84
|
+
* ```
|
|
85
|
+
*
|
|
86
|
+
* - for `+` operator : the answer should be `lhs` and `rhs`,
|
|
87
|
+
* - for `x` identifier: the answer should be node `x`,
|
|
88
|
+
* - for `y` identifier: the answer should be node `y`.
|
|
89
|
+
*
|
|
90
|
+
* so, the return from `+` will be `['x', 'y']`
|
|
91
|
+
*
|
|
92
|
+
* and:
|
|
93
|
+
* - `x.y.z` ==> `['x', 'y', 'z']`
|
|
94
|
+
* - `x[y].z` ==> ['x', ]
|
|
95
|
+
* @param computed required for member and chaining operators
|
|
96
|
+
*/
|
|
28
97
|
dependencyPath(computed?: true): ExpressionEventPath[];
|
|
98
|
+
/**
|
|
99
|
+
* get all the events form this expression
|
|
100
|
+
*
|
|
101
|
+
* tha return from this method, is represent an answer for what is this expression depends-on as identifier name
|
|
102
|
+
*
|
|
103
|
+
* ex:
|
|
104
|
+
* ```js
|
|
105
|
+
* x + y;
|
|
106
|
+
* ```
|
|
107
|
+
*
|
|
108
|
+
* - for `+` operator : the answer should be `lhs` and `rhs`,
|
|
109
|
+
* - for `x` identifier: the answer should be `x`
|
|
110
|
+
* - for `y` identifier: the answer should be `y`
|
|
111
|
+
* the final output will be
|
|
112
|
+
*
|
|
113
|
+
* so, the return from `+` will be `{ x: undefined, y: undefined }`
|
|
114
|
+
*
|
|
115
|
+
* and:
|
|
116
|
+
* - `x.y.z * a` ==> `{ x: { y: { z: undefined }, a: undefined } }`
|
|
117
|
+
* - `x.y.z > x.y.h.g` ==> `{ x: { y: { z: undefined, h: { g: undefined} } } }`
|
|
118
|
+
* - `x[Symbol.toStringTag] + 'Class' + classType + array[3]` ==> `{ x: { 'Symbol.toStringTag': undefined }, classType: undefined, array: { 3: undefined } }`
|
|
119
|
+
* - `'name'` ==> {}
|
|
120
|
+
* - ```js
|
|
121
|
+
* user[firstName + `son of ${fatherName}`]
|
|
122
|
+
* ``` ==> `{ user: { 'firstName:fatherName': undefined }, firstName: undefined, fatherName: undefined }`
|
|
123
|
+
* @param parent
|
|
124
|
+
*/
|
|
29
125
|
events(): ExpressionEventMap;
|
|
126
|
+
/**
|
|
127
|
+
* re-write this expression as a javascript source
|
|
128
|
+
*/
|
|
30
129
|
toString(): string;
|
|
130
|
+
/**
|
|
131
|
+
* used to map this object to represent an [ESTree](https://github.com/estree/estree) json object
|
|
132
|
+
* @param key
|
|
133
|
+
*/
|
|
31
134
|
toJSON(): NodeJsonType;
|
|
135
|
+
/**
|
|
136
|
+
* just a helper method to force class that implement this interface to
|
|
137
|
+
* have a static method `fromJSON` to help reconstruct this ExpressionNode
|
|
138
|
+
* from an [ESTree](https://github.com/estree/estree) json object,
|
|
139
|
+
* with all necessary implementation to execute the code
|
|
140
|
+
*/
|
|
32
141
|
getClass(): ExpressionNodConstructor<ExpressionNode>;
|
|
33
142
|
}
|
|
34
143
|
export declare type NodeDeserializer<N = ExpressionNode> = (node: N) => N;
|
|
35
144
|
export declare type VisitNodeType = (expression: ExpressionNode) => void;
|
|
145
|
+
/**
|
|
146
|
+
* this is how to:
|
|
147
|
+
* describe a class with it's static functions and properties
|
|
148
|
+
* in the interface add getClass method
|
|
149
|
+
*/
|
|
36
150
|
export interface ExpressionNodConstructor<N extends ExpressionNode> extends TypeOf<N> {
|
|
151
|
+
/**
|
|
152
|
+
* the type of an expression
|
|
153
|
+
*/
|
|
37
154
|
type: string;
|
|
155
|
+
/**
|
|
156
|
+
* build expression node from [ESTree](https://github.com/estree/estree) json object
|
|
157
|
+
* @param node
|
|
158
|
+
* @param deserializer
|
|
159
|
+
*/
|
|
38
160
|
fromJSON(node: N, deserializer: NodeDeserializer): N;
|
|
161
|
+
/**
|
|
162
|
+
* visit nodes inside expression
|
|
163
|
+
* @param expression
|
|
164
|
+
* @param callback
|
|
165
|
+
*/
|
|
39
166
|
visit?(node: N, visitNode: Object): void;
|
|
40
167
|
}
|
|
41
168
|
export interface DeclarationExpression extends ExpressionNode {
|
|
169
|
+
/**
|
|
170
|
+
* declare variable in the current local scope (block),
|
|
171
|
+
* or closest function scope (global) scop,
|
|
172
|
+
* the propertyName will be calculated at runtime
|
|
173
|
+
* @param stack the stack which an identifier will be declared
|
|
174
|
+
* @param propertyValue the initial value of identifier
|
|
175
|
+
* @param scope which scop to declare this identifier
|
|
176
|
+
*/
|
|
42
177
|
declareVariable(stack: Stack, propertyValue?: any): any;
|
|
178
|
+
/**
|
|
179
|
+
* get the variable declaration name
|
|
180
|
+
*/
|
|
43
181
|
getDeclarationName?(): string;
|
|
44
182
|
}
|
|
183
|
+
/**
|
|
184
|
+
* An interface meant to be implemented by MemberExpression,
|
|
185
|
+
* Identifier and ChainExpression and all Literal expressions
|
|
186
|
+
*/
|
|
45
187
|
export interface CanFindScope {
|
|
188
|
+
/**
|
|
189
|
+
* try to search for scope of this expression
|
|
190
|
+
* @param stack
|
|
191
|
+
*/
|
|
46
192
|
findScope<T extends ScopeContext>(stack: Stack): Scope<T>;
|
|
47
193
|
findScope<T extends ScopeContext>(stack: Stack, scope: Scope<ScopeContext>): Scope<T>;
|
|
48
194
|
findScope<T extends ScopeContext>(stack: Stack, scope?: Scope<ScopeContext>): Scope<T> | undefined;
|