@ibyar/expressions 0.5.6 → 0.6.1

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 (97) hide show
  1. package/api/abstract.js +5 -0
  2. package/api/abstract.js.map +1 -1
  3. package/api/class/class.d.ts +28 -13
  4. package/api/class/class.js +46 -41
  5. package/api/class/class.js.map +1 -1
  6. package/api/computing/return.d.ts +4 -0
  7. package/api/computing/return.js +5 -0
  8. package/api/computing/return.js.map +1 -1
  9. package/api/computing/throw.d.ts +4 -0
  10. package/api/computing/throw.js +4 -0
  11. package/api/computing/throw.js.map +1 -1
  12. package/api/definition/bind.d.ts +6 -0
  13. package/api/definition/bind.js +6 -0
  14. package/api/definition/bind.js.map +1 -1
  15. package/api/definition/function.js +6 -5
  16. package/api/definition/function.js.map +1 -1
  17. package/api/definition/member.js.map +1 -1
  18. package/api/definition/object.js +1 -1
  19. package/api/definition/object.js.map +1 -1
  20. package/api/definition/values.d.ts +12 -3
  21. package/api/definition/values.js +25 -4
  22. package/api/definition/values.js.map +1 -1
  23. package/api/deserialize/deserialize.d.ts +5 -0
  24. package/api/deserialize/deserialize.js +5 -0
  25. package/api/deserialize/deserialize.js.map +1 -1
  26. package/api/expression.d.ts +151 -5
  27. package/api/expression.js.map +1 -1
  28. package/api/module/export.d.ts +63 -0
  29. package/api/module/export.js +64 -1
  30. package/api/module/export.js.map +1 -1
  31. package/api/module/import.d.ts +53 -0
  32. package/api/module/import.js +53 -0
  33. package/api/module/import.js.map +1 -1
  34. package/api/operators/grouping.d.ts +7 -0
  35. package/api/operators/grouping.js +7 -0
  36. package/api/operators/grouping.js.map +1 -1
  37. package/api/operators/pipeline.d.ts +12 -0
  38. package/api/operators/pipeline.js +12 -0
  39. package/api/operators/pipeline.js.map +1 -1
  40. package/api/operators/unary.js +3 -0
  41. package/api/operators/unary.js.map +1 -1
  42. package/api/program.d.ts +2 -2
  43. package/api/program.js.map +1 -1
  44. package/api/statement/control/block.d.ts +4 -0
  45. package/api/statement/control/block.js +4 -0
  46. package/api/statement/control/block.js.map +1 -1
  47. package/api/statement/control/empty.d.ts +7 -0
  48. package/api/statement/control/empty.js +7 -0
  49. package/api/statement/control/empty.js.map +1 -1
  50. package/api/statement/control/if.d.ts +5 -0
  51. package/api/statement/control/if.js +5 -0
  52. package/api/statement/control/if.js.map +1 -1
  53. package/api/statement/control/switch.d.ts +6 -0
  54. package/api/statement/control/switch.js +9 -0
  55. package/api/statement/control/switch.js.map +1 -1
  56. package/api/statement/control/terminate.d.ts +8 -0
  57. package/api/statement/control/terminate.js +8 -0
  58. package/api/statement/control/terminate.js.map +1 -1
  59. package/api/statement/iterations/for.d.ts +5 -0
  60. package/api/statement/iterations/for.js +13 -0
  61. package/api/statement/iterations/for.js.map +1 -1
  62. package/api/statement/iterations/while.d.ts +6 -0
  63. package/api/statement/iterations/while.js +10 -0
  64. package/api/statement/iterations/while.js.map +1 -1
  65. package/package.json +5 -3
  66. package/scope/event.d.ts +3 -3
  67. package/scope/event.js +2 -2
  68. package/scope/event.js.map +1 -1
  69. package/scope/pool.d.ts +7 -0
  70. package/scope/pool.js +29 -0
  71. package/scope/pool.js.map +1 -0
  72. package/scope/proxy.d.ts +6 -9
  73. package/scope/proxy.js +22 -31
  74. package/scope/proxy.js.map +1 -1
  75. package/scope/scope.d.ts +161 -38
  76. package/scope/scope.js +260 -106
  77. package/scope/scope.js.map +1 -1
  78. package/scope/stack.d.ts +95 -19
  79. package/scope/stack.js +13 -0
  80. package/scope/stack.js.map +1 -1
  81. package/v8/enums.js +31 -0
  82. package/v8/enums.js.map +1 -1
  83. package/v8/inline.d.ts +36 -0
  84. package/v8/inline.js +407 -5
  85. package/v8/inline.js.map +1 -1
  86. package/v8/nodes.js +2 -1
  87. package/v8/nodes.js.map +1 -1
  88. package/v8/parser.d.ts +8 -0
  89. package/v8/parser.js +304 -1
  90. package/v8/parser.js.map +1 -1
  91. package/v8/stream.d.ts +4 -0
  92. package/v8/stream.js +79 -17
  93. package/v8/stream.js.map +1 -1
  94. package/v8/token.d.ts +229 -0
  95. package/v8/token.js +236 -1
  96. package/v8/token.js.map +1 -1
  97. package/visit/visitor.d.ts +3 -0
package/v8/nodes.js CHANGED
@@ -71,7 +71,7 @@ export function createTernaryExpression(op, logical, ifTrue, ifFalse) {
71
71
  export function creteCommaExpression(nodes) {
72
72
  return new SequenceExpression(nodes);
73
73
  }
74
- const USELESS_STACK = null;
74
+ const USELESS_STACK = null; //Object.create(null);
75
75
  const ALLOWED_TYPES = ['string', 'number', 'bigint', 'boolean'];
76
76
  export function shortcutNumericLiteralBinaryExpression(x, y, op) {
77
77
  const expression = creteInfixExpression(op.getName(), x, y);
@@ -98,6 +98,7 @@ export function coverValue(value) {
98
98
  if (value === null) {
99
99
  return NullNode;
100
100
  }
101
+ // never reach
101
102
  case 'function':
102
103
  case 'symbol':
103
104
  default:
package/v8/nodes.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"nodes.js","sourceRoot":"","sources":["../../../src/expressions/v8/nodes.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ExpressionNode } from '../api/expression.js';\nimport type { Stack } from '../scope/stack.js';\nimport { Token, TokenExpression } from './token.js';\nimport { AssignmentExpression } from '../api/operators/assignment.js';\nimport { LogicalExpression } from '../api/operators/logical.js';\nimport { UnaryExpression } from '../api/operators/unary.js';\nimport { ConditionalExpression } from '../api/operators/ternary.js';\nimport { SequenceExpression } from '../api/operators/comma.js';\nimport { Literal, TrueNode, FalseNode, NullNode, UndefinedNode } from '../api/definition/values.js';\nimport { AwaitExpression } from '../api/operators/await.js';\nimport { UpdateExpression } from '../api/operators/update.js';\nimport { BinaryExpression } from '../api/operators/binary.js';\n\nexport function creteInfixExpression(op: string, left: ExpressionNode, right: ExpressionNode): ExpressionNode {\n\tswitch (op) {\n\t\tcase '=':\n\t\tcase '+=':\n\t\tcase '-=':\n\t\tcase '**=':\n\t\tcase '/=':\n\t\tcase '%=':\n\t\tcase '<<=':\n\t\tcase '>>=':\n\t\tcase '>>>=':\n\t\tcase '&=':\n\t\tcase '^=':\n\t\tcase '|=':\n\t\tcase '&&=':\n\t\tcase '||=':\n\t\tcase '??=':\n\t\t\treturn new AssignmentExpression(op, left, right);\n\t\tcase '&&':\n\t\tcase '||':\n\t\tcase '??':\n\t\t\treturn new LogicalExpression(op, left, right);\n\t\tcase '**':\n\t\tcase '*':\n\t\tcase '/':\n\t\tcase '%':\n\t\tcase '+':\n\t\tcase '-':\n\t\tcase '<':\n\t\tcase '<=':\n\t\tcase '>':\n\t\tcase '>=':\n\t\tcase 'in':\n\t\tcase 'instanceof':\n\t\tcase '==':\n\t\tcase '!=':\n\t\tcase '===':\n\t\tcase '!==':\n\t\tcase '<<':\n\t\tcase '>>':\n\t\tcase '>>>':\n\t\tcase '&':\n\t\tcase '^':\n\t\tcase '|':\n\t\tcase '>?':\n\t\tcase '<?':\n\t\tcase '<=>':\n\t\t\treturn new BinaryExpression(op, left, right);\n\t\tdefault:\n\t\t\tthrow new Error(`Not Supported Operator: ${op}`);\n\t}\n}\n\nexport function createTernaryExpression(op: string, logical: ExpressionNode, ifTrue: ExpressionNode, ifFalse: ExpressionNode): ExpressionNode {\n\tswitch (op) {\n\t\tcase '?':\n\t\t\treturn new ConditionalExpression(logical, ifTrue, ifFalse);\n\t\tdefault:\n\t\t\tthrow new Error(`${op} is not ternary operator`);\n\n\t}\n}\n\nexport function creteCommaExpression(nodes: ExpressionNode[]): ExpressionNode {\n\treturn new SequenceExpression(nodes);\n}\n\nconst USELESS_STACK: Stack = null as unknown as Stack;//Object.create(null);\nconst ALLOWED_TYPES = ['string', 'number', 'bigint', 'boolean'];\n\nexport function shortcutNumericLiteralBinaryExpression(x: ExpressionNode, y: ExpressionNode, op: Token): ExpressionNode {\n\tconst expression = creteInfixExpression(op.getName(), x, y);\n\n\tif (x instanceof Literal && y instanceof Literal) {\n\t\tconst typeX = typeof x.getValue();\n\t\tconst typeY = typeof y.getValue();\n\t\tif (x === y && ALLOWED_TYPES.indexOf(typeX) > -1) {\n\t\t\tconst result = expression.get(USELESS_STACK);\n\t\t\tconst rawString = `${x.toString()} ${op.getName()} ${x.toString()}`;\n\t\t\treturn new Literal<any>(result, rawString);\n\t\t}\n\t}\n\treturn expression!;\n}\nexport function coverValue(value: any) {\n\tswitch (typeof value) {\n\t\tcase 'undefined': return UndefinedNode;\n\t\tcase 'boolean': return value ? TrueNode : FalseNode;\n\t\tcase 'number':\n\t\tcase 'bigint':\n\t\tcase 'string':\n\t\t\treturn new Literal<number | string | bigint>(value);\n\t\tcase 'object':\n\t\t\tif (value === null) {\n\t\t\t\treturn NullNode;\n\t\t\t}\n\t\t// never reach\n\t\tcase 'function':\n\t\tcase 'symbol':\n\t\tdefault:\n\t\t\treturn false;\n\t}\n}\n\nexport function buildUnaryExpression(expression: ExpressionNode, op: Token) {\n\tconst name = op.getName();\n\tswitch (name) {\n\t\tcase '++':\n\t\tcase '--':\n\t\t\treturn new UpdateExpression(name, expression, true);\n\t\tcase '+':\n\t\tcase '-':\n\t\tcase '!':\n\t\tcase '~':\n\t\tcase 'typeof':\n\t\tcase 'void':\n\t\tcase 'delete':\n\t\t\treturn new UnaryExpression(name, expression);\n\t\tcase 'await':\n\t\t\treturn new AwaitExpression(expression);\n\t\tdefault:\n\t\t\tthrow new Error(`${op} is not prefix operator`);\n\t}\n}\n\nexport function buildPostfixExpression(expression: ExpressionNode, op: Token) {\n\tconst name = op.getName();\n\tswitch (name) {\n\t\tcase '++':\n\t\tcase '--':\n\t\t\treturn new UpdateExpression(name, expression, false);\n\t\tdefault:\n\t\t\tthrow new Error(`${op} is not postfix operator`);\n\t}\n}\n\nexport function expressionFromLiteral(te: TokenExpression) {\n\tswitch (te.token) {\n\t\tcase Token.NUMBER:\n\t\tcase Token.BIGINT:\n\t\tcase Token.STRING:\n\t\tcase Token.REGEXP_LITERAL:\n\t\tcase Token.IDENTIFIER:\n\t\t\treturn te.getValue();\n\n\t\tcase Token.NULL_LITERAL: return NullNode;\n\t\tcase Token.TRUE_LITERAL: return TrueNode;\n\t\tcase Token.FALSE_LITERAL: return FalseNode;\n\t\tdefault:\n\t\tcase Token.UNDEFINED_LITERAL: return UndefinedNode;\n\t}\n}\n"]}
1
+ {"version":3,"file":"nodes.js","sourceRoot":"","sources":["../../../src/expressions/v8/nodes.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ExpressionNode } from '../api/expression.js';\nimport type { Stack } from '../scope/stack.js';\nimport { Token, TokenExpression } from './token.js';\nimport { AssignmentExpression } from '../api/operators/assignment.js';\nimport { LogicalExpression } from '../api/operators/logical.js';\nimport { UnaryExpression } from '../api/operators/unary.js';\nimport { ConditionalExpression } from '../api/operators/ternary.js';\nimport { SequenceExpression } from '../api/operators/comma.js';\nimport { Literal, TrueNode, FalseNode, NullNode, UndefinedNode } from '../api/definition/values.js';\nimport { AwaitExpression } from '../api/operators/await.js';\nimport { UpdateExpression } from '../api/operators/update.js';\nimport { BinaryExpression } from '../api/operators/binary.js';\n\nexport function creteInfixExpression(op: string, left: ExpressionNode, right: ExpressionNode): ExpressionNode {\n\tswitch (op) {\n\t\tcase '=':\n\t\tcase '+=':\n\t\tcase '-=':\n\t\tcase '**=':\n\t\tcase '/=':\n\t\tcase '%=':\n\t\tcase '<<=':\n\t\tcase '>>=':\n\t\tcase '>>>=':\n\t\tcase '&=':\n\t\tcase '^=':\n\t\tcase '|=':\n\t\tcase '&&=':\n\t\tcase '||=':\n\t\tcase '??=':\n\t\t\treturn new AssignmentExpression(op, left, right);\n\t\tcase '&&':\n\t\tcase '||':\n\t\tcase '??':\n\t\t\treturn new LogicalExpression(op, left, right);\n\t\tcase '**':\n\t\tcase '*':\n\t\tcase '/':\n\t\tcase '%':\n\t\tcase '+':\n\t\tcase '-':\n\t\tcase '<':\n\t\tcase '<=':\n\t\tcase '>':\n\t\tcase '>=':\n\t\tcase 'in':\n\t\tcase 'instanceof':\n\t\tcase '==':\n\t\tcase '!=':\n\t\tcase '===':\n\t\tcase '!==':\n\t\tcase '<<':\n\t\tcase '>>':\n\t\tcase '>>>':\n\t\tcase '&':\n\t\tcase '^':\n\t\tcase '|':\n\t\tcase '>?':\n\t\tcase '<?':\n\t\tcase '<=>':\n\t\t\treturn new BinaryExpression(op, left, right);\n\t\tdefault:\n\t\t\tthrow new Error(`Not Supported Operator: ${op}`);\n\t}\n}\n\nexport function createTernaryExpression(op: string, logical: ExpressionNode, ifTrue: ExpressionNode, ifFalse: ExpressionNode): ExpressionNode {\n\tswitch (op) {\n\t\tcase '?':\n\t\t\treturn new ConditionalExpression(logical, ifTrue, ifFalse);\n\t\tdefault:\n\t\t\tthrow new Error(`${op} is not ternary operator`);\n\n\t}\n}\n\nexport function creteCommaExpression(nodes: ExpressionNode[]): ExpressionNode {\n\treturn new SequenceExpression(nodes);\n}\n\nconst USELESS_STACK: Stack = null as unknown as Stack;//Object.create(null);\nconst ALLOWED_TYPES = ['string', 'number', 'bigint', 'boolean'];\n\nexport function shortcutNumericLiteralBinaryExpression(x: ExpressionNode, y: ExpressionNode, op: Token): ExpressionNode {\n\tconst expression = creteInfixExpression(op.getName(), x, y);\n\n\tif (x instanceof Literal && y instanceof Literal) {\n\t\tconst typeX = typeof x.getValue();\n\t\tconst typeY = typeof y.getValue();\n\t\tif (x === y && ALLOWED_TYPES.indexOf(typeX) > -1) {\n\t\t\tconst result = expression.get(USELESS_STACK);\n\t\t\tconst rawString = `${x.toString()} ${op.getName()} ${x.toString()}`;\n\t\t\treturn new Literal<any>(result, rawString);\n\t\t}\n\t}\n\treturn expression!;\n}\nexport function coverValue(value: any) {\n\tswitch (typeof value) {\n\t\tcase 'undefined': return UndefinedNode;\n\t\tcase 'boolean': return value ? TrueNode : FalseNode;\n\t\tcase 'number':\n\t\tcase 'bigint':\n\t\tcase 'string':\n\t\t\treturn new Literal<number | string | bigint>(value);\n\t\tcase 'object':\n\t\t\tif (value === null) {\n\t\t\t\treturn NullNode;\n\t\t\t}\n\t\t// never reach\n\t\tcase 'function':\n\t\tcase 'symbol':\n\t\tdefault:\n\t\t\treturn false;\n\t}\n}\n\nexport function buildUnaryExpression(expression: ExpressionNode, op: Token) {\n\tconst name = op.getName();\n\tswitch (name) {\n\t\tcase '++':\n\t\tcase '--':\n\t\t\treturn new UpdateExpression(name, expression, true);\n\t\tcase '+':\n\t\tcase '-':\n\t\tcase '!':\n\t\tcase '~':\n\t\tcase 'typeof':\n\t\tcase 'void':\n\t\tcase 'delete':\n\t\t\treturn new UnaryExpression(name, expression);\n\t\tcase 'await':\n\t\t\treturn new AwaitExpression(expression);\n\t\tdefault:\n\t\t\tthrow new Error(`${op} is not prefix operator`);\n\t}\n}\n\nexport function buildPostfixExpression(expression: ExpressionNode, op: Token) {\n\tconst name = op.getName();\n\tswitch (name) {\n\t\tcase '++':\n\t\tcase '--':\n\t\t\treturn new UpdateExpression(name, expression, false);\n\t\tdefault:\n\t\t\tthrow new Error(`${op} is not postfix operator`);\n\t}\n}\n\nexport function expressionFromLiteral(te: TokenExpression) {\n\tswitch (te.token) {\n\t\tcase Token.NUMBER:\n\t\tcase Token.BIGINT:\n\t\tcase Token.STRING:\n\t\tcase Token.REGEXP_LITERAL:\n\t\tcase Token.IDENTIFIER:\n\t\t\treturn te.getValue();\n\n\t\tcase Token.NULL_LITERAL: return NullNode;\n\t\tcase Token.TRUE_LITERAL: return TrueNode;\n\t\tcase Token.FALSE_LITERAL: return FalseNode;\n\t\tdefault:\n\t\tcase Token.UNDEFINED_LITERAL: return UndefinedNode;\n\t}\n}\n"]}
package/v8/parser.d.ts CHANGED
@@ -13,7 +13,15 @@ export declare type ParserOptions = {
13
13
  mode?: LanguageMode;
14
14
  };
15
15
  export declare class JavaScriptParser extends JavaScriptInlineParser {
16
+ /**
17
+ * parser js with
18
+ * @param source
19
+ * @returns
20
+ */
16
21
  static parse(source: string | TokenExpression[] | TokenStream, { mode }?: ParserOptions): ExpressionNode;
22
+ /**
23
+ * parse inline code like that used in html 2 or 1 way binding
24
+ */
17
25
  static parseScript(source: string | TokenExpression[] | TokenStream, options?: InlineParserOptions): ExpressionNode;
18
26
  scan(): ExpressionNode;
19
27
  protected parseNewTargetExpression(): ExpressionNode;