@ibyar/expressions 0.5.4 → 0.6.0

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.
Files changed (137) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +1 -0
  3. package/api/abstract.d.ts +3 -3
  4. package/api/abstract.js +7 -2
  5. package/api/abstract.js.map +1 -1
  6. package/api/class/class.d.ts +45 -24
  7. package/api/class/class.js +158 -112
  8. package/api/class/class.js.map +1 -1
  9. package/api/computing/debugger.d.ts +15 -0
  10. package/api/computing/debugger.js +35 -0
  11. package/api/computing/debugger.js.map +1 -0
  12. package/api/computing/rest.d.ts +4 -4
  13. package/api/computing/rest.js.map +1 -1
  14. package/api/computing/return.d.ts +4 -0
  15. package/api/computing/return.js +5 -0
  16. package/api/computing/return.js.map +1 -1
  17. package/api/computing/throw.d.ts +4 -0
  18. package/api/computing/throw.js +4 -0
  19. package/api/computing/throw.js.map +1 -1
  20. package/api/definition/array.d.ts +7 -6
  21. package/api/definition/array.js +20 -14
  22. package/api/definition/array.js.map +1 -1
  23. package/api/definition/bind.d.ts +6 -0
  24. package/api/definition/bind.js +6 -0
  25. package/api/definition/bind.js.map +1 -1
  26. package/api/definition/function.d.ts +35 -46
  27. package/api/definition/function.js +282 -299
  28. package/api/definition/function.js.map +1 -1
  29. package/api/definition/member.js.map +1 -1
  30. package/api/definition/object.d.ts +9 -6
  31. package/api/definition/object.js +35 -5
  32. package/api/definition/object.js.map +1 -1
  33. package/api/definition/statement.js +5 -1
  34. package/api/definition/statement.js.map +1 -1
  35. package/api/definition/values.d.ts +43 -50
  36. package/api/definition/values.js +84 -149
  37. package/api/definition/values.js.map +1 -1
  38. package/api/deserialize/deserialize.d.ts +7 -1
  39. package/api/deserialize/deserialize.js +9 -1
  40. package/api/deserialize/deserialize.js.map +1 -1
  41. package/api/deserialize/type-store.d.ts +2 -2
  42. package/api/deserialize/type-store.js.map +1 -1
  43. package/api/expression.d.ts +156 -12
  44. package/api/expression.js.map +1 -1
  45. package/api/index.d.ts +2 -0
  46. package/api/index.js +2 -0
  47. package/api/index.js.map +1 -1
  48. package/api/module/common.d.ts +29 -0
  49. package/api/module/common.js +71 -0
  50. package/api/module/common.js.map +1 -0
  51. package/api/module/export.d.ts +78 -9
  52. package/api/module/export.js +120 -15
  53. package/api/module/export.js.map +1 -1
  54. package/api/module/import.d.ts +56 -8
  55. package/api/module/import.js +62 -19
  56. package/api/module/import.js.map +1 -1
  57. package/api/operators/grouping.d.ts +7 -0
  58. package/api/operators/grouping.js +7 -0
  59. package/api/operators/grouping.js.map +1 -1
  60. package/api/operators/pipeline.d.ts +12 -0
  61. package/api/operators/pipeline.js +12 -0
  62. package/api/operators/pipeline.js.map +1 -1
  63. package/api/operators/unary.js +3 -0
  64. package/api/operators/unary.js.map +1 -1
  65. package/api/{module/app/program.d.ts → program.d.ts} +5 -5
  66. package/api/{module/app/program.js → program.js} +3 -3
  67. package/api/program.js.map +1 -0
  68. package/api/statement/control/block.d.ts +5 -2
  69. package/api/statement/control/block.js +24 -21
  70. package/api/statement/control/block.js.map +1 -1
  71. package/api/statement/control/empty.d.ts +7 -0
  72. package/api/statement/control/empty.js +7 -0
  73. package/api/statement/control/empty.js.map +1 -1
  74. package/api/statement/control/if.d.ts +5 -0
  75. package/api/statement/control/if.js +5 -0
  76. package/api/statement/control/if.js.map +1 -1
  77. package/api/statement/control/switch.d.ts +6 -0
  78. package/api/statement/control/switch.js +17 -3
  79. package/api/statement/control/switch.js.map +1 -1
  80. package/api/statement/control/terminate.d.ts +44 -11
  81. package/api/statement/control/terminate.js +87 -18
  82. package/api/statement/control/terminate.js.map +1 -1
  83. package/api/statement/declarations/declares.d.ts +7 -7
  84. package/api/statement/declarations/declares.js +1 -1
  85. package/api/statement/declarations/declares.js.map +1 -1
  86. package/api/statement/iterations/for.d.ts +5 -0
  87. package/api/statement/iterations/for.js +35 -16
  88. package/api/statement/iterations/for.js.map +1 -1
  89. package/api/statement/iterations/while.d.ts +6 -0
  90. package/api/statement/iterations/while.js +25 -11
  91. package/api/statement/iterations/while.js.map +1 -1
  92. package/api/utils.d.ts +2 -0
  93. package/api/utils.js +3 -1
  94. package/api/utils.js.map +1 -1
  95. package/package.json +7 -5
  96. package/scope/event.d.ts +3 -3
  97. package/scope/event.js +2 -2
  98. package/scope/event.js.map +1 -1
  99. package/scope/pool.d.ts +7 -0
  100. package/scope/pool.js +29 -0
  101. package/scope/pool.js.map +1 -0
  102. package/scope/proxy.d.ts +6 -11
  103. package/scope/proxy.js +23 -52
  104. package/scope/proxy.js.map +1 -1
  105. package/scope/scope.d.ts +161 -38
  106. package/scope/scope.js +260 -106
  107. package/scope/scope.js.map +1 -1
  108. package/scope/stack.d.ts +97 -21
  109. package/scope/stack.js +13 -0
  110. package/scope/stack.js.map +1 -1
  111. package/v8/enums.d.ts +204 -0
  112. package/v8/enums.js +406 -0
  113. package/v8/enums.js.map +1 -0
  114. package/v8/index.d.ts +2 -1
  115. package/v8/index.js +2 -1
  116. package/v8/index.js.map +1 -1
  117. package/v8/inline.d.ts +213 -0
  118. package/v8/inline.js +2375 -0
  119. package/v8/inline.js.map +1 -0
  120. package/v8/nodes.d.ts +8 -7
  121. package/v8/nodes.js +39 -64
  122. package/v8/nodes.js.map +1 -1
  123. package/v8/parser.d.ts +49 -151
  124. package/v8/parser.js +839 -1608
  125. package/v8/parser.js.map +1 -1
  126. package/v8/stream.d.ts +39 -3
  127. package/v8/stream.js +685 -171
  128. package/v8/stream.js.map +1 -1
  129. package/v8/token.d.ts +244 -9
  130. package/v8/token.js +315 -47
  131. package/v8/token.js.map +1 -1
  132. package/visit/visitor.d.ts +3 -0
  133. package/visit/visitor.js.map +1 -1
  134. package/api/module/app/program.js.map +0 -1
  135. package/v8/app.d.ts +0 -0
  136. package/v8/app.js +0 -2
  137. package/v8/app.js.map +0 -1
package/scope/stack.d.ts CHANGED
@@ -1,8 +1,8 @@
1
- import type { CanDeclareExpression } from '../api/expression.js';
2
- import { ModuleScope, ReactiveScope, Scope, ScopeContext, WebModuleScope } from './scope.js';
1
+ import type { DeclarationExpression } from '../api/expression.js';
2
+ import { ModuleScope, ReactiveScope, Scope, Context, WebModuleScope } from './scope.js';
3
3
  export interface AwaitPromiseInfo {
4
4
  promise: Promise<any>;
5
- node: CanDeclareExpression;
5
+ node: DeclarationExpression;
6
6
  declareVariable: boolean;
7
7
  }
8
8
  export interface AsyncIterableInfo {
@@ -10,35 +10,106 @@ export interface AsyncIterableInfo {
10
10
  forAwaitBody: (iterator: any) => any;
11
11
  }
12
12
  export interface Stack {
13
+ /**
14
+ * a list of promises to resolve in an 'async' scope as 'async function'
15
+ */
13
16
  awaitPromise: Array<AwaitPromiseInfo>;
17
+ /**
18
+ * resolve await promise in 'await for in' scope
19
+ */
14
20
  forAwaitAsyncIterable?: AsyncIterableInfo;
21
+ /**
22
+ * is this stack has a propertyKey
23
+ * @param propertyKey
24
+ */
15
25
  has(propertyKey: PropertyKey): boolean;
26
+ /**
27
+ * get the first value for provided property key,
28
+ *
29
+ * will search current stack in all scope till find the first key, else undefined
30
+ * @param propertyKey
31
+ */
16
32
  get(propertyKey: PropertyKey): any;
33
+ /**
34
+ * set the value of `propertyKey` in its context provider with `value`.
35
+ * else define it in the first scope 'local scope'
36
+ * @param propertyKey
37
+ * @param value
38
+ * @param receiver
39
+ */
17
40
  set(propertyKey: PropertyKey, value: any, receiver?: any): boolean;
41
+ /**
42
+ * declare variable at last scope in the stack,
43
+ *
44
+ * @param propertyKey the name of property mey be string | number | symbol,
45
+ * @param propertyValue if not exist will be initialize with 'undefined' value
46
+ */
18
47
  declareVariable(propertyKey: PropertyKey, propertyValue?: any): any;
19
- findScope<T extends ScopeContext>(propertyKey: PropertyKey): Scope<T>;
48
+ /**
49
+ * get context object of this provider,
50
+ * search for the first context object that has `propertyKey`.
51
+ *
52
+ * search for the first context that have property key,
53
+ * if not found will return the stack local scop as a default value
54
+ * @param propertyKey the property key
55
+ */
56
+ findScope<T extends Context>(propertyKey: PropertyKey): Scope<T>;
20
57
  resolveAwait(value: AwaitPromiseInfo): void;
21
- lastScope<T extends ScopeContext>(): Scope<T>;
22
- clearTo<T extends ScopeContext>(scope: Scope<T>): boolean;
23
- clearTill<T extends ScopeContext>(scope: Scope<T>): boolean;
24
- popScope<T extends ScopeContext>(): Scope<T>;
25
- removeScope<T extends ScopeContext>(scope: Scope<T>): void;
26
- pushScope<T extends ScopeContext>(scope: Scope<T>): void;
27
- pushBlockScope<T extends ScopeContext>(): Scope<T>;
28
- pushBlockScopeFor<T extends ScopeContext>(context: T): Scope<T>;
29
- pushReactiveScope<T extends ScopeContext>(): ReactiveScope<T>;
30
- pushReactiveScopeFor<T extends ScopeContext>(context: T): ReactiveScope<T>;
58
+ /**
59
+ * get a reference to the last scope in this stack
60
+ */
61
+ lastScope<T extends Context>(): Scope<T>;
62
+ /**
63
+ * clear every thing after this scope, and even this scope
64
+ * @param scope
65
+ */
66
+ clearTo<T extends Context>(scope: Scope<T>): boolean;
67
+ /**
68
+ * clear every thing after this scope, but not this scope
69
+ * @param scope
70
+ */
71
+ clearTill<T extends Context>(scope: Scope<T>): boolean;
72
+ popScope<T extends Context>(): Scope<T>;
73
+ removeScope<T extends Context>(scope: Scope<T>): void;
74
+ pushScope<T extends Context>(scope: Scope<T>): void;
75
+ pushBlockScope<T extends Context>(): Scope<T>;
76
+ pushBlockScopeFor<T extends Context>(context: T): Scope<T>;
77
+ pushReactiveScope<T extends Context>(): ReactiveScope<T>;
78
+ pushReactiveScopeFor<T extends Context>(context: T): ReactiveScope<T>;
79
+ /**
80
+ * create new stack instance with the same reference to the current scope array
81
+ */
31
82
  copyStack(): Stack;
83
+ /**
84
+ * used when want to update ui-view like, you want to replace an array with another
85
+ * without reflect changes on view until reattached again.
86
+ */
32
87
  detach(): void;
88
+ /**
89
+ * apply all the not emitted changes, and continue emit in time.
90
+ */
33
91
  reattach(): void;
92
+ /**
93
+ * import module scope from another stack, by the help of ModuleScopeResolver.
94
+ *
95
+ * used with import statement
96
+ */
34
97
  importModule(source: string, importCallOptions?: ImportCallOptions): ModuleScope;
98
+ /**
99
+ * get the current module for this stack.
100
+ *
101
+ * used with export statement
102
+ */
35
103
  getModule(): ModuleScope | undefined;
104
+ /**
105
+ * register action to do on destroy this stack
106
+ */
36
107
  onDestroy(action: () => void): void;
37
108
  }
38
109
  export declare class Stack implements Stack {
39
- static for(...contexts: Scope<ScopeContext>[]): Stack;
40
- static forScopes(...scopes: Scope<ScopeContext>[]): Stack;
41
- static moduleScope(resolver: ModuleScopeResolver, moduleSource: string, ...globalScopes: Scope<ScopeContext>[]): Stack;
110
+ static for(...contexts: Scope<Context>[]): Stack;
111
+ static forScopes(...scopes: Scope<Context>[]): Stack;
112
+ static moduleScope(resolver: ModuleScopeResolver, moduleSource: string, ...globalScopes: Scope<Context>[]): Stack;
42
113
  awaitPromise: AwaitPromiseInfo[];
43
114
  forAwaitAsyncIterable?: AsyncIterableInfo | undefined;
44
115
  protected readonly stack: Array<Scope<any>>;
@@ -47,12 +118,14 @@ export declare class Stack implements Stack {
47
118
  protected readonly resolver?: ModuleScopeResolver;
48
119
  protected readonly onDestroyActions: (() => void)[];
49
120
  constructor();
50
- constructor(globalScope: Scope<ScopeContext>);
51
- constructor(globalScope: Scope<ScopeContext>, resolver: ModuleScopeResolver, moduleSource: string);
52
- constructor(stack: Array<Scope<ScopeContext>>);
53
- constructor(stack: Array<Scope<ScopeContext>>, resolver: ModuleScopeResolver, moduleSource: string);
121
+ constructor(globalScope: Scope<Context>);
122
+ constructor(globalScope: Scope<Context>, resolver: ModuleScopeResolver, moduleSource: string);
123
+ constructor(stack: Array<Scope<Context>>);
124
+ constructor(stack: Array<Scope<Context>>, resolver: ModuleScopeResolver, moduleSource: string);
54
125
  private initModuleContext;
126
+ detectChanges(): void;
55
127
  private getReactiveScopeControls;
128
+ private getReactiveScope;
56
129
  }
57
130
  export interface ModuleScopeResolver {
58
131
  resolve(source: string, moduleScope: ModuleScope, importCallOptions?: ImportCallOptions): ModuleScope;
@@ -60,6 +133,9 @@ export interface ModuleScopeResolver {
60
133
  }
61
134
  export declare function createRootURL(source: string): URL;
62
135
  export interface ResolverConfig {
136
+ /**
137
+ *
138
+ */
63
139
  allowImportExternal?: boolean;
64
140
  }
65
141
  export declare class ModuleScopeResolver implements ModuleScopeResolver {
package/scope/stack.js CHANGED
@@ -2,6 +2,7 @@ import { finalizerRegister } from './finalizer.js';
2
2
  import { ModuleScope, ReactiveScope, ReactiveScopeControl, Scope, WebModuleScope } from './scope.js';
3
3
  export class Stack {
4
4
  constructor(globals, resolver, moduleSource) {
5
+ this.awaitPromise = [];
5
6
  this.onDestroyActions = [];
6
7
  if (Array.isArray(globals)) {
7
8
  this.stack = globals;
@@ -15,11 +16,14 @@ export class Stack {
15
16
  if (resolver && moduleSource) {
16
17
  this.resolver = resolver;
17
18
  this.moduleSource = moduleSource;
19
+ // init module scope for import and export
18
20
  this.moduleScope = new ModuleScope(this.initModuleContext());
19
21
  this.pushScope(this.moduleScope);
22
+ // for the rest of module body
20
23
  this.pushReactiveScope();
21
24
  }
22
25
  else {
26
+ // not a module scope
23
27
  this.pushBlockScope();
24
28
  }
25
29
  finalizerRegister(this, this.onDestroyActions, this);
@@ -135,11 +139,18 @@ export class Stack {
135
139
  reattach() {
136
140
  this.getReactiveScopeControls().forEach(scope => scope.reattach());
137
141
  }
142
+ detectChanges() {
143
+ this.getReactiveScope().forEach(scope => scope.detectChanges());
144
+ }
138
145
  getReactiveScopeControls() {
139
146
  return this.stack.filter(scope => scope instanceof ReactiveScopeControl);
140
147
  }
148
+ getReactiveScope() {
149
+ return this.stack.filter(scope => scope instanceof ReactiveScope);
150
+ }
141
151
  importModule(source, importCallOptions) {
142
152
  if (!this.resolver || !this.moduleScope) {
153
+ // should o the parse and import the module
143
154
  throw new Error('Module Resolver is undefined');
144
155
  }
145
156
  return this.resolver.resolve(source, this.moduleScope, importCallOptions);
@@ -223,6 +234,8 @@ export class ModuleScopeResolver {
223
234
  }
224
235
  const webScope = new WebModuleScope();
225
236
  this.modules.push([source, webScope]);
237
+ // active later
238
+ // import(source, importCallOptions)
226
239
  import(source).then(module => {
227
240
  webScope.updateContext(module);
228
241
  });
@@ -1 +1 @@
1
- {"version":3,"file":"stack.js","sourceRoot":"","sources":["../../../src/expressions/scope/stack.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CanDeclareExpression } from '../api/expression.js';\nimport { finalizerRegister } from './finalizer.js';\nimport {\n\tModuleContext, ModuleImport, ModuleScope, ReactiveScope,\n\tReactiveScopeControl, Scope, ScopeContext, WebModuleScope\n} from './scope.js';\n\n\nexport interface AwaitPromiseInfo {\n\tpromise: Promise<any>;\n\tnode: CanDeclareExpression;\n\n\tdeclareVariable: boolean;\n}\n\nexport interface AsyncIterableInfo {\n\titerable: AsyncIterable<any>;\n\tforAwaitBody: (iterator: any) => any;\n}\n\nexport interface Stack {\n\t/**\n\t * a list of promises to resolve in an 'async' scope as 'async function'\n\t */\n\tawaitPromise: Array<AwaitPromiseInfo>;\n\n\t/**\n\t * resolve await promise in 'await for in' scope\n\t */\n\tforAwaitAsyncIterable?: AsyncIterableInfo;\n\n\t/**\n\t * is this stack has a propertyKey\n\t * @param propertyKey \n\t */\n\thas(propertyKey: PropertyKey): boolean;\n\n\t/**\n\t * get the first value for provided property key,\n\t * \n\t * will search current stack in all scope till find the first key, else undefined\n\t * @param propertyKey \n\t */\n\tget(propertyKey: PropertyKey): any;\n\n\t/**\n\t * set the value of `propertyKey` in its context provider with `value`.\n\t * else define it in the first scope 'local scope'\n\t * @param propertyKey \n\t * @param value \n\t * @param receiver \n\t */\n\tset(propertyKey: PropertyKey, value: any, receiver?: any): boolean;\n\n\t/**\n\t * declare variable at last scope in the stack,\n\t * \n\t * @param propertyKey the name of property mey be string | number | symbol, \n\t * @param propertyValue if not exist will be initialize with 'undefined' value\n\t */\n\tdeclareVariable(propertyKey: PropertyKey, propertyValue?: any): any;\n\n\n\t/**\n\t * get context object of this provider,\n\t * search for the first context object that has `propertyKey`.\n\t * \n\t * search for the first context that have property key,\n\t * if not found will return the stack local scop as a default value\n\t * @param propertyKey the property key\n\t */\n\tfindScope<T extends ScopeContext>(propertyKey: PropertyKey): Scope<T>;\n\n\tresolveAwait(value: AwaitPromiseInfo): void;\n\n\t/**\n\t * get a reference to the last scope in this stack\n\t */\n\tlastScope<T extends ScopeContext>(): Scope<T>;\n\n\t/**\n\t * clear every thing after this scope, and even this scope\n\t * @param scope \n\t */\n\tclearTo<T extends ScopeContext>(scope: Scope<T>): boolean;\n\n\t/**\n\t * clear every thing after this scope, but not this scope\n\t * @param scope \n\t */\n\tclearTill<T extends ScopeContext>(scope: Scope<T>): boolean;\n\n\tpopScope<T extends ScopeContext>(): Scope<T>;\n\n\tremoveScope<T extends ScopeContext>(scope: Scope<T>): void;\n\n\tpushScope<T extends ScopeContext>(scope: Scope<T>): void;\n\n\tpushBlockScope<T extends ScopeContext>(): Scope<T>;\n\n\tpushBlockScopeFor<T extends ScopeContext>(context: T): Scope<T>;\n\n\tpushReactiveScope<T extends ScopeContext>(): ReactiveScope<T>;\n\n\tpushReactiveScopeFor<T extends ScopeContext>(context: T): ReactiveScope<T>;\n\n\t/**\n\t * create new stack instance with the same reference to the current scope array\n\t */\n\tcopyStack(): Stack;\n\n\t/**\n\t * used when want to update ui-view like, you want to replace an array with another \n\t * without reflect changes on view until reattached again.\n\t */\n\tdetach(): void;\n\n\t/**\n\t * apply all the not emitted changes, and continue emit in time.\n\t */\n\treattach(): void;\n\n\t/**\n\t * import module scope from another stack, by the help of ModuleScopeResolver.\n\t * \n\t * used with import statement\n\t */\n\timportModule(source: string, importCallOptions?: ImportCallOptions): ModuleScope;\n\n\t/**\n\t * get the current module for this stack.\n\t * \n\t * used with export statement\n\t */\n\tgetModule(): ModuleScope | undefined;\n\n\t/**\n\t * register action to do on destroy this stack\n\t */\n\tonDestroy(action: () => void): void;\n}\n\nexport class Stack implements Stack {\n\tstatic for(...contexts: Scope<ScopeContext>[]): Stack {\n\t\tif (contexts.length === 0) {\n\t\t\treturn new Stack();\n\t\t}\n\t\treturn new Stack(contexts.map(context => new Scope<ScopeContext>(context)));\n\t}\n\tstatic forScopes(...scopes: Scope<ScopeContext>[]): Stack {\n\t\tif (scopes.length === 0) {\n\t\t\tscopes.push(Scope.blockScope());\n\t\t}\n\t\treturn new Stack(scopes);\n\t}\n\tstatic moduleScope(resolver: ModuleScopeResolver, moduleSource: string, ...globalScopes: Scope<ScopeContext>[]) {\n\t\treturn new Stack(globalScopes, resolver, moduleSource);\n\t}\n\tawaitPromise: AwaitPromiseInfo[];\n\tforAwaitAsyncIterable?: AsyncIterableInfo | undefined;\n\n\tprotected readonly stack: Array<Scope<any>>;\n\tprotected readonly moduleScope?: ModuleScope;\n\tprotected readonly moduleSource?: string;\n\tprotected readonly resolver?: ModuleScopeResolver;\n\n\tprotected readonly onDestroyActions: (() => void)[] = [];\n\n\tconstructor();\n\tconstructor(globalScope: Scope<ScopeContext>);\n\tconstructor(globalScope: Scope<ScopeContext>, resolver: ModuleScopeResolver, moduleSource: string);\n\n\tconstructor(stack: Array<Scope<ScopeContext>>);\n\tconstructor(stack: Array<Scope<ScopeContext>>, resolver: ModuleScopeResolver, moduleSource: string);\n\n\tconstructor(globals?: Array<Scope<ScopeContext>> | Scope<ScopeContext>, resolver?: ModuleScopeResolver, moduleSource?: string) {\n\t\tif (Array.isArray(globals)) {\n\t\t\tthis.stack = globals;\n\t\t} else if (typeof globals == 'object') {\n\t\t\tthis.stack = [globals];\n\t\t} else {\n\t\t\tthis.stack = [];\n\t\t}\n\t\tif (resolver && moduleSource) {\n\t\t\tthis.resolver = resolver;\n\t\t\tthis.moduleSource = moduleSource;\n\t\t\t// init module scope for import and export\n\t\t\tthis.moduleScope = new ModuleScope(this.initModuleContext());\n\t\t\tthis.pushScope(this.moduleScope);\n\t\t\t// for the rest of module body\n\t\t\tthis.pushReactiveScope();\n\t\t} else {\n\t\t\t// not a module scope\n\t\t\tthis.pushBlockScope();\n\t\t}\n\t\tfinalizerRegister(this, this.onDestroyActions, this);\n\t}\n\tprivate initModuleContext(): ModuleContext {\n\t\tconst importFunc = (path: string) => {\n\t\t\treturn this.importModule(path);\n\t\t};\n\t\timportFunc.meta = {\n\t\t\turl: createRootURL(this.moduleSource!),\n\t\t\tresolve: (specified: string, parent?: string | URL): Promise<string> => {\n\t\t\t\treturn Promise.resolve(this.resolver!.resolveURL(specified, parent ?? importFunc.meta.url));\n\t\t\t}\n\t\t};\n\t\tconst im: ModuleImport & ((path: string) => Promise<any>) = importFunc as any;\n\t\treturn { import: im };\n\t}\n\thas(propertyKey: PropertyKey): boolean {\n\t\treturn this.stack.find(context => context.has(propertyKey)) ? true : false;\n\t}\n\tget(propertyKey: PropertyKey) {\n\t\treturn this.findScope<ScopeContext>(propertyKey).get(propertyKey);\n\t}\n\tset(propertyKey: PropertyKey, value: any, receiver?: any): boolean {\n\t\treturn this.findScope<ScopeContext>(propertyKey).set(propertyKey, value, receiver);\n\t}\n\tdeclareVariable(propertyKey: PropertyKey, propertyValue?: any) {\n\t\treturn this.lastScope<ScopeContext>().set(propertyKey, propertyValue);\n\t}\n\tfindScope<T extends ScopeContext>(propertyKey: PropertyKey): Scope<T> {\n\t\tlet lastIndex = this.stack.length;\n\t\twhile (lastIndex--) {\n\t\t\tconst scope = this.stack[lastIndex];\n\t\t\tif (scope.has(propertyKey)) {\n\t\t\t\treturn scope;\n\t\t\t}\n\t\t}\n\t\treturn this.lastScope();\n\t}\n\tresolveAwait(value: AwaitPromiseInfo): void {\n\t\tthis.awaitPromise.push(value);\n\t}\n\tpopScope<T extends ScopeContext>(): Scope<T> {\n\t\treturn this.stack.pop()!;\n\t}\n\tremoveScope<T extends ScopeContext>(scope: Scope<T>): void {\n\t\tconst index = this.stack.lastIndexOf(scope);\n\t\tthis.stack.splice(index, 1);\n\t}\n\tpushScope<T extends ScopeContext>(scope: Scope<T>): void {\n\t\tthis.stack.push(scope);\n\t}\n\tpushBlockScope<T extends ScopeContext>(): Scope<T> {\n\t\tconst scope = Scope.blockScope<T>();\n\t\tthis.stack.push(scope);\n\t\treturn scope;\n\t}\n\tpushBlockScopeFor<T extends ScopeContext>(context: T): Scope<T> {\n\t\tconst scope = Scope.for<T>(context);\n\t\tthis.stack.push(scope);\n\t\treturn scope;\n\t}\n\tpushReactiveScope<T extends ScopeContext>(): ReactiveScope<T> {\n\t\tconst scope = ReactiveScope.blockScope<T>();\n\t\tthis.stack.push(scope);\n\t\treturn scope;\n\t}\n\tpushReactiveScopeFor<T extends ScopeContext>(context: T): ReactiveScope<T> {\n\t\tconst scope = ReactiveScope.for(context);\n\t\tthis.stack.push(scope);\n\t\treturn scope;\n\t}\n\tlastScope<T extends ScopeContext>(): Scope<T> {\n\t\treturn this.stack[this.stack.length - 1];\n\t}\n\tclearTo<T extends ScopeContext>(scope: Scope<T>): boolean {\n\t\tconst index = this.stack.lastIndexOf(scope);\n\t\tif (index === -1) {\n\t\t\treturn false;\n\t\t}\n\t\tthis.stack.splice(index);\n\t\treturn true;\n\t}\n\tclearTill<T extends ScopeContext>(scope: Scope<T>): boolean {\n\t\tconst index = this.stack.lastIndexOf(scope);\n\t\tif (index === -1) {\n\t\t\treturn false;\n\t\t}\n\t\tthis.stack.splice(index + 1);\n\t\treturn true;\n\t}\n\tcopyStack(): Stack {\n\t\treturn new Stack(this.stack.slice(), this.resolver!, this.moduleSource!);\n\t}\n\tdetach(): void {\n\t\tthis.getReactiveScopeControls().forEach(scope => scope.detach());\n\t}\n\treattach(): void {\n\t\tthis.getReactiveScopeControls().forEach(scope => scope.reattach());\n\t}\n\tprivate getReactiveScopeControls(): ReactiveScopeControl<any>[] {\n\t\treturn this.stack.filter(scope => scope instanceof ReactiveScopeControl) as ReactiveScopeControl<any>[];\n\t}\n\timportModule(source: string, importCallOptions?: ImportCallOptions): ModuleScope {\n\t\tif (!this.resolver || !this.moduleScope) {\n\t\t\t// should o the parse and import the module\n\t\t\tthrow new Error('Module Resolver is undefined');\n\t\t}\n\t\treturn this.resolver.resolve(source, this.moduleScope, importCallOptions);\n\t}\n\tgetModule(): ModuleScope | undefined {\n\t\treturn this.moduleScope;\n\t}\n\n\tonDestroy(action: () => void): void {\n\t\tthis.onDestroyActions.push(action);\n\t}\n}\n\n\nexport interface ModuleScopeResolver {\n\tresolve(source: string, moduleScope: ModuleScope, importCallOptions?: ImportCallOptions): ModuleScope;\n\tresolveURL(specified: string, parent: string | URL): string;\n}\n\nconst ROOT_URL = 'https://root';\nexport function createRootURL(source: string): URL {\n\treturn new URL(source, ROOT_URL);\n}\n\n\nexport interface ResolverConfig {\n\t/**\n\t * \n\t */\n\tallowImportExternal?: boolean;\n\n};\nexport class ModuleScopeResolver implements ModuleScopeResolver {\n\tprotected modules: [string, ModuleScope][] = [];\n\tconstructor(protected config?: ResolverConfig) { }\n\tregister(source: string, moduleScope: ModuleScope) {\n\t\tconst stackInfo = this.modules.find(tuple => tuple[0] == source && tuple[1] == moduleScope);\n\t\tif (stackInfo) {\n\t\t\tstackInfo[1] = moduleScope;\n\t\t} else {\n\t\t\tthis.modules.push([source, moduleScope]);\n\t\t}\n\t}\n\tresolve(source: string, moduleScope: ModuleScope, importCallOptions?: ImportCallOptions): ModuleScope {\n\t\tif (this.isValidHTTPUrl(source)) {\n\t\t\treturn this.resolveExternalModule(source, importCallOptions);\n\t\t}\n\t\tif (source.startsWith('/')) {\n\t\t\treturn this.findScopeBySource(source, importCallOptions);\n\t\t}\n\t\tconst currentSource = this.findSourceByScope(moduleScope);\n\t\tconst absoluteUrl = this.resolveURL(source, currentSource);\n\t\treturn this.findScopeBySource(absoluteUrl, importCallOptions);\n\t}\n\tresolveURL(specified: string, parent: string | URL): string {\n\t\tconst currentUrl = parent instanceof URL ? parent.href : createRootURL(parent).href;\n\t\tconst importedUrl = new URL(specified, currentUrl).href;\n\t\tconst absoluteUrl = importedUrl.replace(ROOT_URL, '');\n\t\treturn absoluteUrl;\n\t}\n\tprotected findScopeBySource(source: string, importCallOptions?: ImportCallOptions): ModuleScope {\n\t\tif (importCallOptions?.assert?.type) {\n\t\t\tconst type = importCallOptions.assert.type;\n\t\t\tif (!source.endsWith(`.${type}`)) {\n\t\t\t\tthrow new Error(`Can't find module scope`);\n\t\t\t}\n\t\t}\n\t\tconst importedScope = this.modules.find(tuple => tuple[0] == source)?.[1];\n\t\tif (!importedScope) {\n\t\t\tthrow new Error(`Can't find module scope`);\n\t\t}\n\t\treturn importedScope;\n\t}\n\tprotected findSourceByScope(moduleScope: ModuleScope): string {\n\t\tconst importedSource = this.modules.find(tuple => tuple[1] == moduleScope)?.[0];\n\t\tif (!importedSource) {\n\t\t\tthrow new Error(`Can't resolve scope source`);\n\t\t}\n\t\treturn importedSource;\n\t}\n\tprotected resolveExternalModule(source: string, importCallOptions?: ImportCallOptions): WebModuleScope {\n\t\tif (!this.config?.allowImportExternal) {\n\t\t\tthrow new Error(`Error: Import External Module is not allowed.`);\n\t\t}\n\t\tconst webScope = new WebModuleScope()\n\t\tthis.modules.push([source, webScope]);\n\t\t// active later\n\t\t// import(source, importCallOptions)\n\t\timport(source).then(module => {\n\t\t\twebScope.updateContext(module);\n\t\t});\n\t\treturn webScope;\n\t}\n\tprotected readonly isValidHTTPUrl = (string: string) => {\n\t\tlet url: URL;\n\t\ttry {\n\t\t\turl = new URL(string);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t\treturn url.protocol === 'http:' || url.protocol === 'https:';\n\t}\n}\n"]}
1
+ {"version":3,"file":"stack.js","sourceRoot":"","sources":["../../../src/expressions/scope/stack.ts"],"names":[],"mappings":"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","sourcesContent":["import type { DeclarationExpression } from '../api/expression.js';\nimport { finalizerRegister } from './finalizer.js';\nimport {\n\tModuleContext, ModuleImport, ModuleScope, ReactiveScope,\n\tReactiveScopeControl, Scope, Context, WebModuleScope\n} from './scope.js';\n\n\nexport interface AwaitPromiseInfo {\n\tpromise: Promise<any>;\n\tnode: DeclarationExpression;\n\n\tdeclareVariable: boolean;\n}\n\nexport interface AsyncIterableInfo {\n\titerable: AsyncIterable<any>;\n\tforAwaitBody: (iterator: any) => any;\n}\n\nexport interface Stack {\n\t/**\n\t * a list of promises to resolve in an 'async' scope as 'async function'\n\t */\n\tawaitPromise: Array<AwaitPromiseInfo>;\n\n\t/**\n\t * resolve await promise in 'await for in' scope\n\t */\n\tforAwaitAsyncIterable?: AsyncIterableInfo;\n\n\t/**\n\t * is this stack has a propertyKey\n\t * @param propertyKey \n\t */\n\thas(propertyKey: PropertyKey): boolean;\n\n\t/**\n\t * get the first value for provided property key,\n\t * \n\t * will search current stack in all scope till find the first key, else undefined\n\t * @param propertyKey \n\t */\n\tget(propertyKey: PropertyKey): any;\n\n\t/**\n\t * set the value of `propertyKey` in its context provider with `value`.\n\t * else define it in the first scope 'local scope'\n\t * @param propertyKey \n\t * @param value \n\t * @param receiver \n\t */\n\tset(propertyKey: PropertyKey, value: any, receiver?: any): boolean;\n\n\t/**\n\t * declare variable at last scope in the stack,\n\t * \n\t * @param propertyKey the name of property mey be string | number | symbol, \n\t * @param propertyValue if not exist will be initialize with 'undefined' value\n\t */\n\tdeclareVariable(propertyKey: PropertyKey, propertyValue?: any): any;\n\n\n\t/**\n\t * get context object of this provider,\n\t * search for the first context object that has `propertyKey`.\n\t * \n\t * search for the first context that have property key,\n\t * if not found will return the stack local scop as a default value\n\t * @param propertyKey the property key\n\t */\n\tfindScope<T extends Context>(propertyKey: PropertyKey): Scope<T>;\n\n\tresolveAwait(value: AwaitPromiseInfo): void;\n\n\t/**\n\t * get a reference to the last scope in this stack\n\t */\n\tlastScope<T extends Context>(): Scope<T>;\n\n\t/**\n\t * clear every thing after this scope, and even this scope\n\t * @param scope \n\t */\n\tclearTo<T extends Context>(scope: Scope<T>): boolean;\n\n\t/**\n\t * clear every thing after this scope, but not this scope\n\t * @param scope \n\t */\n\tclearTill<T extends Context>(scope: Scope<T>): boolean;\n\n\tpopScope<T extends Context>(): Scope<T>;\n\n\tremoveScope<T extends Context>(scope: Scope<T>): void;\n\n\tpushScope<T extends Context>(scope: Scope<T>): void;\n\n\tpushBlockScope<T extends Context>(): Scope<T>;\n\n\tpushBlockScopeFor<T extends Context>(context: T): Scope<T>;\n\n\tpushReactiveScope<T extends Context>(): ReactiveScope<T>;\n\n\tpushReactiveScopeFor<T extends Context>(context: T): ReactiveScope<T>;\n\n\t/**\n\t * create new stack instance with the same reference to the current scope array\n\t */\n\tcopyStack(): Stack;\n\n\t/**\n\t * used when want to update ui-view like, you want to replace an array with another \n\t * without reflect changes on view until reattached again.\n\t */\n\tdetach(): void;\n\n\t/**\n\t * apply all the not emitted changes, and continue emit in time.\n\t */\n\treattach(): void;\n\n\t/**\n\t * import module scope from another stack, by the help of ModuleScopeResolver.\n\t * \n\t * used with import statement\n\t */\n\timportModule(source: string, importCallOptions?: ImportCallOptions): ModuleScope;\n\n\t/**\n\t * get the current module for this stack.\n\t * \n\t * used with export statement\n\t */\n\tgetModule(): ModuleScope | undefined;\n\n\t/**\n\t * register action to do on destroy this stack\n\t */\n\tonDestroy(action: () => void): void;\n}\n\nexport class Stack implements Stack {\n\tstatic for(...contexts: Scope<Context>[]): Stack {\n\t\tif (contexts.length === 0) {\n\t\t\treturn new Stack();\n\t\t}\n\t\treturn new Stack(contexts.map(context => new Scope<Context>(context)));\n\t}\n\tstatic forScopes(...scopes: Scope<Context>[]): Stack {\n\t\tif (scopes.length === 0) {\n\t\t\tscopes.push(Scope.blockScope());\n\t\t}\n\t\treturn new Stack(scopes);\n\t}\n\tstatic moduleScope(resolver: ModuleScopeResolver, moduleSource: string, ...globalScopes: Scope<Context>[]) {\n\t\treturn new Stack(globalScopes, resolver, moduleSource);\n\t}\n\tawaitPromise: AwaitPromiseInfo[] = [];\n\tforAwaitAsyncIterable?: AsyncIterableInfo | undefined;\n\n\tprotected readonly stack: Array<Scope<any>>;\n\tprotected readonly moduleScope?: ModuleScope;\n\tprotected readonly moduleSource?: string;\n\tprotected readonly resolver?: ModuleScopeResolver;\n\n\tprotected readonly onDestroyActions: (() => void)[] = [];\n\n\tconstructor();\n\tconstructor(globalScope: Scope<Context>);\n\tconstructor(globalScope: Scope<Context>, resolver: ModuleScopeResolver, moduleSource: string);\n\n\tconstructor(stack: Array<Scope<Context>>);\n\tconstructor(stack: Array<Scope<Context>>, resolver: ModuleScopeResolver, moduleSource: string);\n\n\tconstructor(globals?: Array<Scope<Context>> | Scope<Context>, resolver?: ModuleScopeResolver, moduleSource?: string) {\n\t\tif (Array.isArray(globals)) {\n\t\t\tthis.stack = globals;\n\t\t} else if (typeof globals == 'object') {\n\t\t\tthis.stack = [globals];\n\t\t} else {\n\t\t\tthis.stack = [];\n\t\t}\n\t\tif (resolver && moduleSource) {\n\t\t\tthis.resolver = resolver;\n\t\t\tthis.moduleSource = moduleSource;\n\t\t\t// init module scope for import and export\n\t\t\tthis.moduleScope = new ModuleScope(this.initModuleContext());\n\t\t\tthis.pushScope(this.moduleScope);\n\t\t\t// for the rest of module body\n\t\t\tthis.pushReactiveScope();\n\t\t} else {\n\t\t\t// not a module scope\n\t\t\tthis.pushBlockScope();\n\t\t}\n\t\tfinalizerRegister(this, this.onDestroyActions, this);\n\t}\n\tprivate initModuleContext(): ModuleContext {\n\t\tconst importFunc = (path: string) => {\n\t\t\treturn this.importModule(path);\n\t\t};\n\t\timportFunc.meta = {\n\t\t\turl: createRootURL(this.moduleSource!),\n\t\t\tresolve: (specified: string, parent?: string | URL): Promise<string> => {\n\t\t\t\treturn Promise.resolve(this.resolver!.resolveURL(specified, parent ?? importFunc.meta.url));\n\t\t\t}\n\t\t};\n\t\tconst im: ModuleImport & ((path: string) => Promise<any>) = importFunc as any;\n\t\treturn { import: im };\n\t}\n\thas(propertyKey: PropertyKey): boolean {\n\t\treturn this.stack.find(context => context.has(propertyKey)) ? true : false;\n\t}\n\tget(propertyKey: PropertyKey) {\n\t\treturn this.findScope<Context>(propertyKey).get(propertyKey);\n\t}\n\tset(propertyKey: PropertyKey, value: any, receiver?: any): boolean {\n\t\treturn this.findScope<Context>(propertyKey).set(propertyKey, value, receiver);\n\t}\n\tdeclareVariable(propertyKey: PropertyKey, propertyValue?: any) {\n\t\treturn this.lastScope<Context>().set(propertyKey, propertyValue);\n\t}\n\tfindScope<T extends Context>(propertyKey: PropertyKey): Scope<T> {\n\t\tlet lastIndex = this.stack.length;\n\t\twhile (lastIndex--) {\n\t\t\tconst scope = this.stack[lastIndex];\n\t\t\tif (scope.has(propertyKey)) {\n\t\t\t\treturn scope;\n\t\t\t}\n\t\t}\n\t\treturn this.lastScope();\n\t}\n\tresolveAwait(value: AwaitPromiseInfo): void {\n\t\tthis.awaitPromise.push(value);\n\t}\n\tpopScope<T extends Context>(): Scope<T> {\n\t\treturn this.stack.pop()!;\n\t}\n\tremoveScope<T extends Context>(scope: Scope<T>): void {\n\t\tconst index = this.stack.lastIndexOf(scope);\n\t\tthis.stack.splice(index, 1);\n\t}\n\tpushScope<T extends Context>(scope: Scope<T>): void {\n\t\tthis.stack.push(scope);\n\t}\n\tpushBlockScope<T extends Context>(): Scope<T> {\n\t\tconst scope = Scope.blockScope<T>();\n\t\tthis.stack.push(scope);\n\t\treturn scope;\n\t}\n\tpushBlockScopeFor<T extends Context>(context: T): Scope<T> {\n\t\tconst scope = Scope.for<T>(context);\n\t\tthis.stack.push(scope);\n\t\treturn scope;\n\t}\n\tpushReactiveScope<T extends Context>(): ReactiveScope<T> {\n\t\tconst scope = ReactiveScope.blockScope<T>();\n\t\tthis.stack.push(scope);\n\t\treturn scope;\n\t}\n\tpushReactiveScopeFor<T extends Context>(context: T): ReactiveScope<T> {\n\t\tconst scope = ReactiveScope.for(context);\n\t\tthis.stack.push(scope);\n\t\treturn scope;\n\t}\n\tlastScope<T extends Context>(): Scope<T> {\n\t\treturn this.stack[this.stack.length - 1];\n\t}\n\tclearTo<T extends Context>(scope: Scope<T>): boolean {\n\t\tconst index = this.stack.lastIndexOf(scope);\n\t\tif (index === -1) {\n\t\t\treturn false;\n\t\t}\n\t\tthis.stack.splice(index);\n\t\treturn true;\n\t}\n\tclearTill<T extends Context>(scope: Scope<T>): boolean {\n\t\tconst index = this.stack.lastIndexOf(scope);\n\t\tif (index === -1) {\n\t\t\treturn false;\n\t\t}\n\t\tthis.stack.splice(index + 1);\n\t\treturn true;\n\t}\n\tcopyStack(): Stack {\n\t\treturn new Stack(this.stack.slice(), this.resolver!, this.moduleSource!);\n\t}\n\tdetach(): void {\n\t\tthis.getReactiveScopeControls().forEach(scope => scope.detach());\n\t}\n\treattach(): void {\n\t\tthis.getReactiveScopeControls().forEach(scope => scope.reattach());\n\t}\n\tdetectChanges() {\n\t\tthis.getReactiveScope().forEach(scope => scope.detectChanges());\n\t}\n\tprivate getReactiveScopeControls(): ReactiveScopeControl<any>[] {\n\t\treturn this.stack.filter(scope => scope instanceof ReactiveScopeControl) as ReactiveScopeControl<any>[];\n\t}\n\tprivate getReactiveScope(): ReactiveScope<any>[] {\n\t\treturn this.stack.filter(scope => scope instanceof ReactiveScope) as ReactiveScope<any>[];\n\t}\n\timportModule(source: string, importCallOptions?: ImportCallOptions): ModuleScope {\n\t\tif (!this.resolver || !this.moduleScope) {\n\t\t\t// should o the parse and import the module\n\t\t\tthrow new Error('Module Resolver is undefined');\n\t\t}\n\t\treturn this.resolver.resolve(source, this.moduleScope, importCallOptions);\n\t}\n\tgetModule(): ModuleScope | undefined {\n\t\treturn this.moduleScope;\n\t}\n\n\tonDestroy(action: () => void): void {\n\t\tthis.onDestroyActions.push(action);\n\t}\n}\n\n\nexport interface ModuleScopeResolver {\n\tresolve(source: string, moduleScope: ModuleScope, importCallOptions?: ImportCallOptions): ModuleScope;\n\tresolveURL(specified: string, parent: string | URL): string;\n}\n\nconst ROOT_URL = 'https://root';\nexport function createRootURL(source: string): URL {\n\treturn new URL(source, ROOT_URL);\n}\n\n\nexport interface ResolverConfig {\n\t/**\n\t * \n\t */\n\tallowImportExternal?: boolean;\n\n};\nexport class ModuleScopeResolver implements ModuleScopeResolver {\n\tprotected modules: [string, ModuleScope][] = [];\n\tconstructor(protected config?: ResolverConfig) { }\n\tregister(source: string, moduleScope: ModuleScope) {\n\t\tconst stackInfo = this.modules.find(tuple => tuple[0] == source && tuple[1] == moduleScope);\n\t\tif (stackInfo) {\n\t\t\tstackInfo[1] = moduleScope;\n\t\t} else {\n\t\t\tthis.modules.push([source, moduleScope]);\n\t\t}\n\t}\n\tresolve(source: string, moduleScope: ModuleScope, importCallOptions?: ImportCallOptions): ModuleScope {\n\t\tif (this.isValidHTTPUrl(source)) {\n\t\t\treturn this.resolveExternalModule(source, importCallOptions);\n\t\t}\n\t\tif (source.startsWith('/')) {\n\t\t\treturn this.findScopeBySource(source, importCallOptions);\n\t\t}\n\t\tconst currentSource = this.findSourceByScope(moduleScope);\n\t\tconst absoluteUrl = this.resolveURL(source, currentSource);\n\t\treturn this.findScopeBySource(absoluteUrl, importCallOptions);\n\t}\n\tresolveURL(specified: string, parent: string | URL): string {\n\t\tconst currentUrl = parent instanceof URL ? parent.href : createRootURL(parent).href;\n\t\tconst importedUrl = new URL(specified, currentUrl).href;\n\t\tconst absoluteUrl = importedUrl.replace(ROOT_URL, '');\n\t\treturn absoluteUrl;\n\t}\n\tprotected findScopeBySource(source: string, importCallOptions?: ImportCallOptions): ModuleScope {\n\t\tif (importCallOptions?.assert?.type) {\n\t\t\tconst type = importCallOptions.assert.type;\n\t\t\tif (!source.endsWith(`.${type}`)) {\n\t\t\t\tthrow new Error(`Can't find module scope`);\n\t\t\t}\n\t\t}\n\t\tconst importedScope = this.modules.find(tuple => tuple[0] == source)?.[1];\n\t\tif (!importedScope) {\n\t\t\tthrow new Error(`Can't find module scope`);\n\t\t}\n\t\treturn importedScope;\n\t}\n\tprotected findSourceByScope(moduleScope: ModuleScope): string {\n\t\tconst importedSource = this.modules.find(tuple => tuple[1] == moduleScope)?.[0];\n\t\tif (!importedSource) {\n\t\t\tthrow new Error(`Can't resolve scope source`);\n\t\t}\n\t\treturn importedSource;\n\t}\n\tprotected resolveExternalModule(source: string, importCallOptions?: ImportCallOptions): WebModuleScope {\n\t\tif (!this.config?.allowImportExternal) {\n\t\t\tthrow new Error(`Error: Import External Module is not allowed.`);\n\t\t}\n\t\tconst webScope = new WebModuleScope()\n\t\tthis.modules.push([source, webScope]);\n\t\t// active later\n\t\t// import(source, importCallOptions)\n\t\timport(source).then(module => {\n\t\t\twebScope.updateContext(module);\n\t\t});\n\t\treturn webScope;\n\t}\n\tprotected readonly isValidHTTPUrl = (string: string) => {\n\t\tlet url: URL;\n\t\ttry {\n\t\t\turl = new URL(string);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t\treturn url.protocol === 'http:' || url.protocol === 'https:';\n\t}\n}\n"]}
package/v8/enums.d.ts ADDED
@@ -0,0 +1,204 @@
1
+ import { AccessorProperty, MethodDefinition, PropertyDefinition, StaticBlock } from '../api/class/class.js';
2
+ import { ExpressionNode } from '../api/expression.js';
3
+ import { VariableDeclarator } from '../api/statement/declarations/declares.js';
4
+ import { Token } from './token.js';
5
+ export declare function isInRange(num: number, start: number, end: number): boolean;
6
+ export declare enum ParsingArrowHeadFlag {
7
+ CertainlyNotArrowHead = 0,
8
+ MaybeArrowHead = 1,
9
+ AsyncArrowFunction = 2
10
+ }
11
+ export declare enum PropertyKind {
12
+ Value = 0,
13
+ Shorthand = 1,
14
+ ShorthandOrClassField = 2,
15
+ Assign = 3,
16
+ Method = 4,
17
+ ClassField = 5,
18
+ AccessorGetter = 6,
19
+ AccessorSetter = 7,
20
+ Spread = 8,
21
+ NotSet = 9
22
+ }
23
+ export declare function isAccessor(kind: PropertyKind): boolean;
24
+ export declare enum PropertyPosition {
25
+ ObjectLiteral = 0,
26
+ ClassLiteral = 1
27
+ }
28
+ export declare class PropertyKindInfo {
29
+ name: string;
30
+ position: PropertyPosition;
31
+ funcFlag: ParseFunctionFlag;
32
+ kind: PropertyKind;
33
+ isComputedName: boolean;
34
+ isPrivate: boolean;
35
+ isStatic: boolean;
36
+ isRest: boolean;
37
+ parsePropertyKindFromToken(token: Token): boolean;
38
+ }
39
+ export declare type FunctionInfo = {
40
+ rest?: boolean;
41
+ };
42
+ export declare enum PreParserIdentifierType {
43
+ NullIdentifier = 0,
44
+ UnknownIdentifier = 1,
45
+ EvalIdentifier = 2,
46
+ ArgumentsIdentifier = 3,
47
+ ConstructorIdentifier = 4,
48
+ AwaitIdentifier = 5,
49
+ AsyncIdentifier = 6,
50
+ NameIdentifier = 7,
51
+ PrivateNameIdentifier = 8
52
+ }
53
+ export declare enum FunctionBodyType {
54
+ EXPRESSION = 0,
55
+ BLOCK = 1
56
+ }
57
+ export declare enum ParseFunctionFlag {
58
+ IsNormal = 0,
59
+ IsGenerator = 1,
60
+ IsAsync = 2
61
+ }
62
+ export declare enum FunctionKind {
63
+ NormalFunction = 0,
64
+ Module = 1,
65
+ AsyncModule = 2,
66
+ BaseConstructor = 3,
67
+ DefaultBaseConstructor = 4,
68
+ DefaultDerivedConstructor = 5,
69
+ DerivedConstructor = 6,
70
+ GetterFunction = 7,
71
+ StaticGetterFunction = 8,
72
+ SetterFunction = 9,
73
+ StaticSetterFunction = 10,
74
+ ArrowFunction = 11,
75
+ AsyncArrowFunction = 12,
76
+ AsyncFunction = 13,
77
+ AsyncConciseMethod = 14,
78
+ StaticAsyncConciseMethod = 15,
79
+ AsyncConciseGeneratorMethod = 16,
80
+ StaticAsyncConciseGeneratorMethod = 17,
81
+ AsyncGeneratorFunction = 18,
82
+ GeneratorFunction = 19,
83
+ ConciseGeneratorMethod = 20,
84
+ StaticConciseGeneratorMethod = 21,
85
+ ConciseMethod = 22,
86
+ StaticConciseMethod = 23,
87
+ ClassMembersInitializerFunction = 24,
88
+ ClassStaticInitializerFunction = 25,
89
+ Invalid = 26,
90
+ LastFunctionKind = 25
91
+ }
92
+ export declare enum SubFunctionKind {
93
+ NormalFunction = 0,
94
+ NonStaticMethod = 1,
95
+ StaticMethod = 2
96
+ }
97
+ export declare enum StaticFlag {
98
+ NotStatic = 0,
99
+ Static = 1
100
+ }
101
+ export declare function functionKindForImpl(subFunctionKind: SubFunctionKind, flags: ParseFunctionFlag): FunctionKind;
102
+ export declare function functionKindFor(isGenerator: boolean, isAsync: boolean): FunctionKind;
103
+ export declare function methodKindFor(isStatic: boolean, isGenerator: boolean, isAsync: boolean): FunctionKind;
104
+ export declare enum FunctionSyntaxKind {
105
+ AnonymousExpression = 0,
106
+ NamedExpression = 1,
107
+ Declaration = 2,
108
+ AccessorOrMethod = 3,
109
+ Wrapped = 4,
110
+ LastFunctionSyntaxKind = 4
111
+ }
112
+ export declare function isArrowFunction(kind: FunctionKind): boolean;
113
+ export declare function isModule(kind: FunctionKind): boolean;
114
+ export declare function isAsyncModule(kind: FunctionKind): boolean;
115
+ export declare function isAsyncGeneratorFunction(kind: FunctionKind): boolean;
116
+ export declare function isGeneratorFunction(kind: FunctionKind): boolean;
117
+ export declare function isAsyncFunction(kind: FunctionKind): boolean;
118
+ export declare function isResumableFunction(kind: FunctionKind): boolean;
119
+ export declare function isConciseMethod(kind: FunctionKind): boolean;
120
+ export declare function isStrictFunctionWithoutPrototype(kind: FunctionKind): boolean;
121
+ export declare function isGetterFunction(kind: FunctionKind): boolean;
122
+ export declare function isSetterFunction(kind: FunctionKind): boolean;
123
+ export declare function isAccessorFunction(kind: FunctionKind): boolean;
124
+ export declare function isDefaultConstructor(kind: FunctionKind): boolean;
125
+ export declare function isBaseConstructor(kind: FunctionKind): boolean;
126
+ export declare function isDerivedConstructor(kind: FunctionKind): boolean;
127
+ export declare function isClassConstructor(kind: FunctionKind): boolean;
128
+ export declare function isClassMembersInitializerFunction(kind: FunctionKind): boolean;
129
+ export declare function isConstructable(kind: FunctionKind): boolean;
130
+ export declare function isStatic(kind: FunctionKind): boolean;
131
+ export declare function bindsSuper(kind: FunctionKind): boolean;
132
+ export declare function isAwaitAsIdentifierDisallowed(kind: FunctionKind): boolean;
133
+ export declare function functionKind2String(kind: FunctionKind): string;
134
+ export declare type ClassInfo = {
135
+ extends?: ExpressionNode;
136
+ publicMembers: (MethodDefinition | PropertyDefinition)[];
137
+ privateMembers: (MethodDefinition | PropertyDefinition)[];
138
+ staticElements: (MethodDefinition | PropertyDefinition | AccessorProperty | StaticBlock)[];
139
+ instanceFields: (MethodDefinition | PropertyDefinition | AccessorProperty)[];
140
+ constructor: MethodDefinition | undefined;
141
+ hasSeenConstructor: boolean;
142
+ hasStaticComputedNames: boolean;
143
+ hasStaticElements: boolean;
144
+ hasStaticPrivateMethods: boolean;
145
+ hasStaticBlocks: boolean;
146
+ hasInstanceMembers: boolean;
147
+ requiresBrand: boolean;
148
+ isAnonymous: boolean;
149
+ hasPrivateMethods: boolean;
150
+ computedFieldCount: number;
151
+ homeObjectVariable?: VariableDeclarator;
152
+ staticHomeObjectVariable?: VariableDeclarator;
153
+ };
154
+ export declare function createClassInfo(): ClassInfo;
155
+ export declare enum FunctionNameValidity {
156
+ FunctionNameIsStrictReserved = "FunctionNameIsStrictReserved",
157
+ SkipFunctionNameCheck = "SkipFunctionNameCheck",
158
+ FunctionNameValidityUnknown = "FunctionNameValidityUnknown"
159
+ }
160
+ export declare enum ObjectLiteralPropertyKind {
161
+ CONSTANT = "CONSTANT",
162
+ COMPUTED = "COMPUTED",
163
+ MATERIALIZED_LITERAL = "MATERIALIZED_LITERAL",
164
+ GETTER = "GETTER",
165
+ SETTER = "SETTER",
166
+ PROTOTYPE = "PROTOTYPE",
167
+ SPREAD = "SPREAD"
168
+ }
169
+ export declare class ObjectLiteralProperty {
170
+ static Kind: typeof ObjectLiteralPropertyKind;
171
+ }
172
+ export declare enum ClassLiteralPropertyKind {
173
+ METHOD = "METHOD",
174
+ GETTER = "GETTER",
175
+ SETTER = "SETTER",
176
+ FIELD = "FIELD"
177
+ }
178
+ export declare class ClassLiteralProperty {
179
+ static Kind: typeof ClassLiteralPropertyKind;
180
+ }
181
+ export declare function classPropertyKindFor(kind: PropertyKind): ClassLiteralPropertyKind;
182
+ export declare enum VariableMode {
183
+ Const = "Const",
184
+ PrivateMethod = "PrivateMethod",
185
+ PrivateGetterOnly = "PrivateGetterOnly",
186
+ PrivateSetterOnly = "PrivateSetterOnly"
187
+ }
188
+ export declare function getVariableMode(kind: ClassLiteralPropertyKind): VariableMode;
189
+ export declare enum LanguageMode {
190
+ Sloppy = 0,
191
+ Strict = 1
192
+ }
193
+ export declare function isSloppy(mode: LanguageMode): boolean;
194
+ export declare function isStrict(mode: LanguageMode): boolean;
195
+ export declare function getLanguageMode(isModule: boolean): LanguageMode;
196
+ export declare enum VariableDeclarationContext {
197
+ StatementListItem = 0,
198
+ Statement = 1,
199
+ ForStatement = 2
200
+ }
201
+ export declare enum AllowLabelledFunctionStatement {
202
+ AllowLabelledFunctionStatement = 0,
203
+ DisallowLabelledFunctionStatement = 1
204
+ }