@tsonic/emitter 0.0.14 → 0.0.16

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 (242) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/adapter-generator.js +3 -3
  3. package/dist/adapter-generator.js.map +1 -1
  4. package/dist/array.test.d.ts +1 -1
  5. package/dist/array.test.js +18 -17
  6. package/dist/array.test.js.map +1 -1
  7. package/dist/core/attributes.test.js +2 -2
  8. package/dist/core/attributes.test.js.map +1 -1
  9. package/dist/core/imports.d.ts.map +1 -1
  10. package/dist/core/imports.js +7 -12
  11. package/dist/core/imports.js.map +1 -1
  12. package/dist/core/local-types.d.ts.map +1 -1
  13. package/dist/core/local-types.js +12 -0
  14. package/dist/core/local-types.js.map +1 -1
  15. package/dist/core/module-emitter/orchestrator.d.ts.map +1 -1
  16. package/dist/core/module-emitter/orchestrator.js +15 -2
  17. package/dist/core/module-emitter/orchestrator.js.map +1 -1
  18. package/dist/core/module-emitter/static-container.d.ts.map +1 -1
  19. package/dist/core/module-emitter/static-container.js +30 -4
  20. package/dist/core/module-emitter/static-container.js.map +1 -1
  21. package/dist/core/module-emitter.test.js +6 -6
  22. package/dist/core/module-map.d.ts.map +1 -1
  23. package/dist/core/module-map.js +42 -0
  24. package/dist/core/module-map.js.map +1 -1
  25. package/dist/core/naming-collisions.d.ts +4 -0
  26. package/dist/core/naming-collisions.d.ts.map +1 -0
  27. package/dist/core/naming-collisions.js +191 -0
  28. package/dist/core/naming-collisions.js.map +1 -0
  29. package/dist/core/type-member-index.d.ts +4 -0
  30. package/dist/core/type-member-index.d.ts.map +1 -0
  31. package/dist/core/type-member-index.js +62 -0
  32. package/dist/core/type-member-index.js.map +1 -0
  33. package/dist/core/unsafe.d.ts +11 -0
  34. package/dist/core/unsafe.d.ts.map +1 -0
  35. package/dist/core/unsafe.js +264 -0
  36. package/dist/core/unsafe.js.map +1 -0
  37. package/dist/emitter-types/context.d.ts +1 -1
  38. package/dist/emitter-types/context.d.ts.map +1 -1
  39. package/dist/emitter-types/context.js +5 -3
  40. package/dist/emitter-types/context.js.map +1 -1
  41. package/dist/emitter-types/core.d.ts +45 -2
  42. package/dist/emitter-types/core.d.ts.map +1 -1
  43. package/dist/emitter-types/fqn.d.ts +0 -7
  44. package/dist/emitter-types/fqn.d.ts.map +1 -1
  45. package/dist/emitter-types/fqn.js +0 -8
  46. package/dist/emitter-types/fqn.js.map +1 -1
  47. package/dist/emitter-types/index.d.ts +1 -1
  48. package/dist/emitter-types/index.d.ts.map +1 -1
  49. package/dist/emitter-types/index.js.map +1 -1
  50. package/dist/emitter.d.ts.map +1 -1
  51. package/dist/emitter.js +12 -1
  52. package/dist/emitter.js.map +1 -1
  53. package/dist/expression-emitter.d.ts.map +1 -1
  54. package/dist/expression-emitter.js +255 -73
  55. package/dist/expression-emitter.js.map +1 -1
  56. package/dist/expressions/access.d.ts +3 -1
  57. package/dist/expressions/access.d.ts.map +1 -1
  58. package/dist/expressions/access.js +144 -50
  59. package/dist/expressions/access.js.map +1 -1
  60. package/dist/expressions/calls.d.ts.map +1 -1
  61. package/dist/expressions/calls.js +266 -88
  62. package/dist/expressions/calls.js.map +1 -1
  63. package/dist/expressions/collections.d.ts.map +1 -1
  64. package/dist/expressions/collections.js +169 -57
  65. package/dist/expressions/collections.js.map +1 -1
  66. package/dist/expressions/functions.d.ts.map +1 -1
  67. package/dist/expressions/functions.js +30 -10
  68. package/dist/expressions/functions.js.map +1 -1
  69. package/dist/expressions/identifiers.d.ts.map +1 -1
  70. package/dist/expressions/identifiers.js +11 -30
  71. package/dist/expressions/identifiers.js.map +1 -1
  72. package/dist/expressions/index.test.js +89 -200
  73. package/dist/expressions/index.test.js.map +1 -1
  74. package/dist/expressions/literals.d.ts +4 -5
  75. package/dist/expressions/literals.d.ts.map +1 -1
  76. package/dist/expressions/literals.js +94 -15
  77. package/dist/expressions/literals.js.map +1 -1
  78. package/dist/expressions/operators.d.ts +0 -4
  79. package/dist/expressions/operators.d.ts.map +1 -1
  80. package/dist/expressions/operators.js +84 -24
  81. package/dist/expressions/operators.js.map +1 -1
  82. package/dist/expressions/other.d.ts.map +1 -1
  83. package/dist/expressions/other.js +21 -3
  84. package/dist/expressions/other.js.map +1 -1
  85. package/dist/expressions/parentheses.d.ts +4 -0
  86. package/dist/expressions/parentheses.d.ts.map +1 -0
  87. package/dist/expressions/parentheses.js +83 -0
  88. package/dist/expressions/parentheses.js.map +1 -0
  89. package/dist/extension-methods.test.d.ts +5 -0
  90. package/dist/extension-methods.test.d.ts.map +1 -0
  91. package/dist/extension-methods.test.js +110 -0
  92. package/dist/extension-methods.test.js.map +1 -0
  93. package/dist/generator-exchange.d.ts.map +1 -1
  94. package/dist/generator-exchange.js +5 -2
  95. package/dist/generator-exchange.js.map +1 -1
  96. package/dist/generator-wrapper.d.ts.map +1 -1
  97. package/dist/generator-wrapper.js +13 -7
  98. package/dist/generator-wrapper.js.map +1 -1
  99. package/dist/generator-wrapper.test.js +12 -12
  100. package/dist/generator-wrapper.test.js.map +1 -1
  101. package/dist/generator.test.js +42 -42
  102. package/dist/generator.test.js.map +1 -1
  103. package/dist/golden-tests/discovery.d.ts +6 -11
  104. package/dist/golden-tests/discovery.d.ts.map +1 -1
  105. package/dist/golden-tests/discovery.js +14 -79
  106. package/dist/golden-tests/discovery.js.map +1 -1
  107. package/dist/golden-tests/index.d.ts +1 -1
  108. package/dist/golden-tests/index.d.ts.map +1 -1
  109. package/dist/golden-tests/index.js.map +1 -1
  110. package/dist/golden-tests/runner.d.ts.map +1 -1
  111. package/dist/golden-tests/runner.js +6 -7
  112. package/dist/golden-tests/runner.js.map +1 -1
  113. package/dist/golden-tests/types.d.ts +0 -7
  114. package/dist/golden-tests/types.d.ts.map +1 -1
  115. package/dist/golden.test.d.ts +3 -10
  116. package/dist/golden.test.d.ts.map +1 -1
  117. package/dist/golden.test.js +8 -24
  118. package/dist/golden.test.js.map +1 -1
  119. package/dist/hierarchical-bindings.test.js +18 -12
  120. package/dist/hierarchical-bindings.test.js.map +1 -1
  121. package/dist/integration.test.js +76 -35
  122. package/dist/integration.test.js.map +1 -1
  123. package/dist/invariants/emitter-globals-subset.test.d.ts +1 -1
  124. package/dist/invariants/emitter-globals-subset.test.js +34 -74
  125. package/dist/invariants/emitter-globals-subset.test.js.map +1 -1
  126. package/dist/invariants/numeric-proof-contract.test.js +3 -3
  127. package/dist/invariants/numeric-proof-contract.test.js.map +1 -1
  128. package/dist/naming-policy.d.ts +5 -0
  129. package/dist/naming-policy.d.ts.map +1 -0
  130. package/dist/naming-policy.js +10 -0
  131. package/dist/naming-policy.js.map +1 -0
  132. package/dist/patterns.d.ts +98 -0
  133. package/dist/patterns.d.ts.map +1 -0
  134. package/dist/patterns.js +366 -0
  135. package/dist/patterns.js.map +1 -0
  136. package/dist/patterns.test.d.ts +15 -0
  137. package/dist/patterns.test.d.ts.map +1 -0
  138. package/dist/patterns.test.js +1262 -0
  139. package/dist/patterns.test.js.map +1 -0
  140. package/dist/specialization/generation.d.ts.map +1 -1
  141. package/dist/specialization/generation.js +2 -2
  142. package/dist/specialization/generation.js.map +1 -1
  143. package/dist/specialization/generic-classes.test.js +1 -1
  144. package/dist/specialization/generic-functions.test.js +6 -6
  145. package/dist/specialization/interfaces.test.js +5 -5
  146. package/dist/specialization/substitution.d.ts.map +1 -1
  147. package/dist/specialization/substitution.js +4 -0
  148. package/dist/specialization/substitution.js.map +1 -1
  149. package/dist/specialization/type-aliases.test.js +6 -6
  150. package/dist/specialization/type-aliases.test.js.map +1 -1
  151. package/dist/statement-emitter.d.ts.map +1 -1
  152. package/dist/statement-emitter.js +1 -1
  153. package/dist/statement-emitter.js.map +1 -1
  154. package/dist/statements/blocks.d.ts.map +1 -1
  155. package/dist/statements/blocks.js +14 -45
  156. package/dist/statements/blocks.js.map +1 -1
  157. package/dist/statements/classes/index.d.ts +1 -1
  158. package/dist/statements/classes/index.d.ts.map +1 -1
  159. package/dist/statements/classes/index.js +1 -1
  160. package/dist/statements/classes/index.js.map +1 -1
  161. package/dist/statements/classes/inline-types.d.ts +1 -1
  162. package/dist/statements/classes/inline-types.d.ts.map +1 -1
  163. package/dist/statements/classes/inline-types.js +15 -5
  164. package/dist/statements/classes/inline-types.js.map +1 -1
  165. package/dist/statements/classes/members/constructors.d.ts.map +1 -1
  166. package/dist/statements/classes/members/constructors.js +40 -14
  167. package/dist/statements/classes/members/constructors.js.map +1 -1
  168. package/dist/statements/classes/members/methods.d.ts.map +1 -1
  169. package/dist/statements/classes/members/methods.js +62 -25
  170. package/dist/statements/classes/members/methods.js.map +1 -1
  171. package/dist/statements/classes/members/orchestrator.d.ts.map +1 -1
  172. package/dist/statements/classes/members/orchestrator.js +1 -3
  173. package/dist/statements/classes/members/orchestrator.js.map +1 -1
  174. package/dist/statements/classes/members/properties.d.ts.map +1 -1
  175. package/dist/statements/classes/members/properties.js +70 -10
  176. package/dist/statements/classes/members/properties.js.map +1 -1
  177. package/dist/statements/classes/parameters.d.ts +43 -1
  178. package/dist/statements/classes/parameters.d.ts.map +1 -1
  179. package/dist/statements/classes/parameters.js +73 -13
  180. package/dist/statements/classes/parameters.js.map +1 -1
  181. package/dist/statements/classes/properties.d.ts.map +1 -1
  182. package/dist/statements/classes/properties.js +6 -7
  183. package/dist/statements/classes/properties.js.map +1 -1
  184. package/dist/statements/classes.d.ts +1 -1
  185. package/dist/statements/classes.d.ts.map +1 -1
  186. package/dist/statements/classes.js +1 -1
  187. package/dist/statements/classes.js.map +1 -1
  188. package/dist/statements/control/conditionals.d.ts.map +1 -1
  189. package/dist/statements/control/conditionals.js +193 -23
  190. package/dist/statements/control/conditionals.js.map +1 -1
  191. package/dist/statements/control/loops.d.ts.map +1 -1
  192. package/dist/statements/control/loops.js +25 -5
  193. package/dist/statements/control/loops.js.map +1 -1
  194. package/dist/statements/declarations/classes.d.ts.map +1 -1
  195. package/dist/statements/declarations/classes.js +150 -12
  196. package/dist/statements/declarations/classes.js.map +1 -1
  197. package/dist/statements/declarations/enums.d.ts.map +1 -1
  198. package/dist/statements/declarations/enums.js +2 -1
  199. package/dist/statements/declarations/enums.js.map +1 -1
  200. package/dist/statements/declarations/functions.d.ts.map +1 -1
  201. package/dist/statements/declarations/functions.js +44 -19
  202. package/dist/statements/declarations/functions.js.map +1 -1
  203. package/dist/statements/declarations/interfaces.d.ts.map +1 -1
  204. package/dist/statements/declarations/interfaces.js +71 -10
  205. package/dist/statements/declarations/interfaces.js.map +1 -1
  206. package/dist/statements/declarations/structs.test.js +5 -5
  207. package/dist/statements/declarations/type-aliases.d.ts.map +1 -1
  208. package/dist/statements/declarations/type-aliases.js +24 -5
  209. package/dist/statements/declarations/type-aliases.js.map +1 -1
  210. package/dist/statements/declarations/variables.d.ts.map +1 -1
  211. package/dist/statements/declarations/variables.js +194 -37
  212. package/dist/statements/declarations/variables.js.map +1 -1
  213. package/dist/statements/index.test.js +7 -5
  214. package/dist/statements/index.test.js.map +1 -1
  215. package/dist/type-assertion.test.js +1 -1
  216. package/dist/types/arrays.d.ts +3 -9
  217. package/dist/types/arrays.d.ts.map +1 -1
  218. package/dist/types/arrays.js +5 -19
  219. package/dist/types/arrays.js.map +1 -1
  220. package/dist/types/emitter.d.ts.map +1 -1
  221. package/dist/types/emitter.js +3 -2
  222. package/dist/types/emitter.js.map +1 -1
  223. package/dist/types/index.test.js +3 -3
  224. package/dist/types/parameters.d.ts +1 -1
  225. package/dist/types/parameters.d.ts.map +1 -1
  226. package/dist/types/parameters.js +77 -8
  227. package/dist/types/parameters.js.map +1 -1
  228. package/dist/types/parameters.test.js +1 -1
  229. package/dist/types/parameters.test.js.map +1 -1
  230. package/dist/types/references.d.ts.map +1 -1
  231. package/dist/types/references.js +126 -55
  232. package/dist/types/references.js.map +1 -1
  233. package/dist/types/references.test.js +46 -106
  234. package/dist/types/references.test.js.map +1 -1
  235. package/dist/types/unions.d.ts.map +1 -1
  236. package/dist/types/unions.js +20 -0
  237. package/dist/types/unions.js.map +1 -1
  238. package/dist/types/unions.test.js +9 -9
  239. package/dist/types.d.ts +1 -1
  240. package/dist/types.d.ts.map +1 -1
  241. package/dist/types.js.map +1 -1
  242. package/package.json +3 -3
@@ -0,0 +1,10 @@
1
+ import { applyNamingPolicy, resolveNamingPolicy, } from "@tsonic/frontend";
2
+ import { escapeCSharpIdentifier } from "./emitter-types/index.js";
3
+ export const getCSharpName = (name, bucket, context) => {
4
+ const policy = resolveNamingPolicy(context.options.namingPolicy, bucket);
5
+ return applyNamingPolicy(name, policy);
6
+ };
7
+ export const emitCSharpName = (name, bucket, context) => {
8
+ return escapeCSharpIdentifier(getCSharpName(name, bucket, context));
9
+ };
10
+ //# sourceMappingURL=naming-policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"naming-policy.js","sourceRoot":"","sources":["../src/naming-policy.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,mBAAmB,GAEpB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAElE,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,IAAY,EACZ,MAA0B,EAC1B,OAAuB,EACf,EAAE;IACV,MAAM,MAAM,GAAG,mBAAmB,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IACzE,OAAO,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACzC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,IAAY,EACZ,MAA0B,EAC1B,OAAuB,EACf,EAAE;IACV,OAAO,sBAAsB,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AACtE,CAAC,CAAC"}
@@ -0,0 +1,98 @@
1
+ /**
2
+ * Pattern Lowering Module
3
+ *
4
+ * Transforms destructuring patterns into sequences of C# variable declarations.
5
+ * This module is used by variable declarations, for-of loops, and function parameters.
6
+ *
7
+ * Example transformations:
8
+ *
9
+ * Array pattern:
10
+ * const [a, b, c] = arr;
11
+ * =>
12
+ * var __t0 = arr;
13
+ * var a = __t0[0];
14
+ * var b = __t0[1];
15
+ * var c = __t0[2];
16
+ *
17
+ * Array pattern with rest:
18
+ * const [first, ...rest] = arr;
19
+ * =>
20
+ * var __t0 = arr;
21
+ * var first = __t0[0];
22
+ * var rest = Tsonic.Runtime.ArrayHelpers.Slice(__t0, 1);
23
+ *
24
+ * Object pattern:
25
+ * const { name, age } = person;
26
+ * =>
27
+ * var __t0 = person;
28
+ * var name = __t0.name;
29
+ * var age = __t0.age;
30
+ *
31
+ * Object pattern with rest:
32
+ * const { name, ...rest } = person;
33
+ * =>
34
+ * var __t0 = person;
35
+ * var name = __t0.name;
36
+ * var rest = new __Rest_xxxx { age = __t0.age, email = __t0.email };
37
+ */
38
+ import { IrPattern, IrType } from "@tsonic/frontend";
39
+ import { EmitterContext } from "./emitter-types/index.js";
40
+ /**
41
+ * Result of pattern lowering - a list of C# statements
42
+ */
43
+ export type LoweringResult = {
44
+ /** Variable declarations generated from the pattern */
45
+ readonly statements: readonly string[];
46
+ /** The context after lowering (with any new locals registered) */
47
+ readonly context: EmitterContext;
48
+ };
49
+ /**
50
+ * Lower a pattern to a sequence of C# statements
51
+ *
52
+ * @param pattern - The pattern to lower (identifier, array, or object)
53
+ * @param inputExpr - The C# expression being destructured
54
+ * @param type - The type of the input expression (for type annotations)
55
+ * @param indent - Indentation prefix for generated code
56
+ * @param ctx - The current emitter context
57
+ * @returns The generated statements and updated context
58
+ */
59
+ export declare const lowerPattern: (pattern: IrPattern, inputExpr: string, type: IrType | undefined, indent: string, ctx: EmitterContext) => LoweringResult;
60
+ /**
61
+ * Lower a pattern for a for-of loop variable
62
+ * Similar to lowerPattern but handles the iteration context
63
+ */
64
+ export declare const lowerForOfPattern: (pattern: IrPattern, iteratorVar: string, elementType: IrType | undefined, indent: string, ctx: EmitterContext) => LoweringResult;
65
+ /**
66
+ * Lower a parameter pattern for function definitions
67
+ * Generates statements to go at the beginning of the function body
68
+ */
69
+ export declare const lowerParameterPattern: (pattern: IrPattern, paramName: string, paramType: IrType | undefined, indent: string, ctx: EmitterContext) => LoweringResult;
70
+ /**
71
+ * Result of assignment pattern lowering - an expression and context
72
+ *
73
+ * Assignment destructuring is an expression (returns the RHS value),
74
+ * so we return an expression string instead of statements.
75
+ */
76
+ export type AssignmentLoweringResult = {
77
+ /** The C# expression that performs the assignment and returns the value */
78
+ readonly expression: string;
79
+ /** The context after lowering */
80
+ readonly context: EmitterContext;
81
+ };
82
+ /**
83
+ * Lower an assignment pattern to a C# expression
84
+ *
85
+ * In JavaScript, destructuring assignment is an expression that returns the RHS:
86
+ * const result = ([a, b] = arr); // result === arr
87
+ *
88
+ * We emit this as a parenthesized sequence expression:
89
+ * ((__t = rhs), (a = __t[0]), (b = __t[1]), __t)
90
+ *
91
+ * @param pattern - The pattern being assigned to
92
+ * @param rhsExpr - The C# expression for the right-hand side
93
+ * @param type - The type of the RHS expression
94
+ * @param ctx - The current emitter context
95
+ * @returns The expression and updated context
96
+ */
97
+ export declare const lowerAssignmentPattern: (pattern: IrPattern, rhsExpr: string, type: IrType | undefined, ctx: EmitterContext) => AssignmentLoweringResult;
98
+ //# sourceMappingURL=patterns.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patterns.d.ts","sourceRoot":"","sources":["../src/patterns.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH,OAAO,EACL,SAAS,EAGT,MAAM,EAEP,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAI1D;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,uDAAuD;IACvD,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,kEAAkE;IAClE,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;CAClC,CAAC;AA8QF;;;;;;;;;GASG;AACH,eAAO,MAAM,YAAY,GACvB,SAAS,SAAS,EAClB,WAAW,MAAM,EACjB,MAAM,MAAM,GAAG,SAAS,EACxB,QAAQ,MAAM,EACd,KAAK,cAAc,KAClB,cA6BF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAC5B,SAAS,SAAS,EAClB,aAAa,MAAM,EACnB,aAAa,MAAM,GAAG,SAAS,EAC/B,QAAQ,MAAM,EACd,KAAK,cAAc,KAClB,cASF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,qBAAqB,GAChC,SAAS,SAAS,EAClB,WAAW,MAAM,EACjB,WAAW,MAAM,GAAG,SAAS,EAC7B,QAAQ,MAAM,EACd,KAAK,cAAc,KAClB,cAQF,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,wBAAwB,GAAG;IACrC,2EAA2E;IAC3E,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,iCAAiC;IACjC,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;CAClC,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,sBAAsB,GACjC,SAAS,SAAS,EAClB,SAAS,MAAM,EACf,MAAM,MAAM,GAAG,SAAS,EACxB,KAAK,cAAc,KAClB,wBAoFF,CAAC"}
@@ -0,0 +1,366 @@
1
+ /**
2
+ * Pattern Lowering Module
3
+ *
4
+ * Transforms destructuring patterns into sequences of C# variable declarations.
5
+ * This module is used by variable declarations, for-of loops, and function parameters.
6
+ *
7
+ * Example transformations:
8
+ *
9
+ * Array pattern:
10
+ * const [a, b, c] = arr;
11
+ * =>
12
+ * var __t0 = arr;
13
+ * var a = __t0[0];
14
+ * var b = __t0[1];
15
+ * var c = __t0[2];
16
+ *
17
+ * Array pattern with rest:
18
+ * const [first, ...rest] = arr;
19
+ * =>
20
+ * var __t0 = arr;
21
+ * var first = __t0[0];
22
+ * var rest = Tsonic.Runtime.ArrayHelpers.Slice(__t0, 1);
23
+ *
24
+ * Object pattern:
25
+ * const { name, age } = person;
26
+ * =>
27
+ * var __t0 = person;
28
+ * var name = __t0.name;
29
+ * var age = __t0.age;
30
+ *
31
+ * Object pattern with rest:
32
+ * const { name, ...rest } = person;
33
+ * =>
34
+ * var __t0 = person;
35
+ * var name = __t0.name;
36
+ * var rest = new __Rest_xxxx { age = __t0.age, email = __t0.email };
37
+ */
38
+ import { emitType } from "./types/emitter.js";
39
+ import { escapeCSharpIdentifier } from "./emitter-types/identifiers.js";
40
+ /**
41
+ * Generate a unique temporary variable name
42
+ */
43
+ const generateTemp = (prefix, ctx) => {
44
+ const tempId = ctx.tempVarId ?? 0;
45
+ const name = `__${prefix}${tempId}`;
46
+ const newCtx = { ...ctx, tempVarId: tempId + 1 };
47
+ return [name, newCtx];
48
+ };
49
+ /**
50
+ * Lower an identifier pattern to a simple variable declaration
51
+ */
52
+ const lowerIdentifier = (name, inputExpr, type, indent, ctx) => {
53
+ const escapedName = escapeCSharpIdentifier(name);
54
+ // In static context, we can't use 'var' - need explicit type with modifiers
55
+ if (ctx.isStatic) {
56
+ const typeStr = type ? emitType(type, ctx)[0] : "object";
57
+ const stmt = `${indent}private static readonly ${typeStr} ${escapedName} = ${inputExpr};`;
58
+ return { statements: [stmt], context: ctx };
59
+ }
60
+ // Local context: use var when type not available
61
+ const typeStr = type ? emitType(type, ctx)[0] : "var";
62
+ const stmt = `${indent}${typeStr} ${escapedName} = ${inputExpr};`;
63
+ return { statements: [stmt], context: ctx };
64
+ };
65
+ /**
66
+ * Lower an array pattern to a sequence of indexed accesses
67
+ */
68
+ const lowerArrayPattern = (pattern, inputExpr, elementType, indent, ctx, arrayType) => {
69
+ const statements = [];
70
+ let currentCtx = ctx;
71
+ // Create temporary for the input to avoid re-evaluation
72
+ const [tempName, ctx1] = generateTemp("arr", currentCtx);
73
+ currentCtx = ctx1;
74
+ // In static context, we can't use 'var' - need explicit type
75
+ if (ctx.isStatic && arrayType) {
76
+ const [typeStr, ctx2] = emitType(arrayType, currentCtx);
77
+ currentCtx = ctx2;
78
+ statements.push(`${indent}private static readonly ${typeStr} ${tempName} = ${inputExpr};`);
79
+ }
80
+ else if (ctx.isStatic) {
81
+ // Static without type - use object as fallback
82
+ statements.push(`${indent}private static readonly object ${tempName} = ${inputExpr};`);
83
+ }
84
+ else {
85
+ statements.push(`${indent}var ${tempName} = ${inputExpr};`);
86
+ }
87
+ // Process each element
88
+ let index = 0;
89
+ for (const elem of pattern.elements) {
90
+ if (!elem) {
91
+ // Hole in pattern - skip this index
92
+ index++;
93
+ continue;
94
+ }
95
+ if (elem.isRest) {
96
+ // Rest element: use ArrayHelpers.Slice
97
+ const result = lowerPattern(elem.pattern, `Tsonic.Runtime.ArrayHelpers.Slice(${tempName}, ${index})`, elementType ? { kind: "arrayType", elementType } : undefined, indent, currentCtx);
98
+ statements.push(...result.statements);
99
+ currentCtx = result.context;
100
+ // Rest must be last, so break
101
+ break;
102
+ }
103
+ // Regular element: index access
104
+ const accessExpr = `${tempName}[${index}]`;
105
+ // Handle default value
106
+ let valueExpr = accessExpr;
107
+ if (elem.defaultExpr) {
108
+ // For nullable types: value ?? default
109
+ // For now, use simple null-coalescing (assumes nullable element type)
110
+ const defaultValue = emitDefaultExpr(elem.defaultExpr, currentCtx);
111
+ valueExpr = `${accessExpr} ?? ${defaultValue}`;
112
+ }
113
+ const result = lowerPattern(elem.pattern, valueExpr, elementType, indent, currentCtx);
114
+ statements.push(...result.statements);
115
+ currentCtx = result.context;
116
+ index++;
117
+ }
118
+ return { statements, context: currentCtx };
119
+ };
120
+ /**
121
+ * Lower an object pattern to a sequence of property accesses
122
+ */
123
+ const lowerObjectPattern = (pattern, inputExpr, inputType, indent, ctx) => {
124
+ const statements = [];
125
+ let currentCtx = ctx;
126
+ // Create temporary for the input to avoid re-evaluation
127
+ const [tempName, ctx1] = generateTemp("obj", currentCtx);
128
+ currentCtx = ctx1;
129
+ // In static context, we can't use 'var' - need explicit type with modifiers
130
+ if (ctx.isStatic && inputType) {
131
+ const [typeStr, ctx2] = emitType(inputType, currentCtx);
132
+ currentCtx = ctx2;
133
+ statements.push(`${indent}private static readonly ${typeStr} ${tempName} = ${inputExpr};`);
134
+ }
135
+ else if (ctx.isStatic) {
136
+ // Static without type - use object as fallback
137
+ statements.push(`${indent}private static readonly object ${tempName} = ${inputExpr};`);
138
+ }
139
+ else {
140
+ statements.push(`${indent}var ${tempName} = ${inputExpr};`);
141
+ }
142
+ // Process each property
143
+ for (const prop of pattern.properties) {
144
+ if (prop.kind === "rest") {
145
+ // Rest property: create new synthetic object with remaining props
146
+ if (prop.restShapeMembers && prop.restSynthTypeName) {
147
+ // Generate object initializer for rest
148
+ const initProps = prop.restShapeMembers
149
+ .filter((m) => m.kind === "propertySignature")
150
+ .map((m) => `${m.name} = ${tempName}.${m.name}`)
151
+ .join(", ");
152
+ const restExpr = `new ${prop.restSynthTypeName} { ${initProps} }`;
153
+ const result = lowerPattern(prop.pattern, restExpr, undefined, // Type is the synthetic type
154
+ indent, currentCtx);
155
+ statements.push(...result.statements);
156
+ currentCtx = result.context;
157
+ }
158
+ else {
159
+ throw new Error("Object rest destructuring requires rest shape information from the frontend (restShapeMembers/restSynthTypeName).");
160
+ }
161
+ continue;
162
+ }
163
+ // Regular property
164
+ const propAccessExpr = `${tempName}.${prop.key}`;
165
+ // Handle default value
166
+ let valueExpr = propAccessExpr;
167
+ if (prop.defaultExpr) {
168
+ const defaultValue = emitDefaultExpr(prop.defaultExpr, currentCtx);
169
+ valueExpr = `${propAccessExpr} ?? ${defaultValue}`;
170
+ }
171
+ // Get property type if available
172
+ const propType = getPropertyType(inputType, prop.key);
173
+ const result = lowerPattern(prop.value, valueExpr, propType, indent, currentCtx);
174
+ statements.push(...result.statements);
175
+ currentCtx = result.context;
176
+ }
177
+ return { statements, context: currentCtx };
178
+ };
179
+ /**
180
+ * Get property type from an object/interface type
181
+ */
182
+ const getPropertyType = (type, key) => {
183
+ if (!type)
184
+ return undefined;
185
+ if (type.kind === "objectType") {
186
+ const prop = type.members.find((m) => m.kind === "propertySignature" && m.name === key);
187
+ if (prop && prop.kind === "propertySignature") {
188
+ return prop.type;
189
+ }
190
+ }
191
+ if (type.kind === "referenceType" && type.structuralMembers) {
192
+ const prop = type.structuralMembers.find((m) => m.kind === "propertySignature" && m.name === key);
193
+ if (prop && prop.kind === "propertySignature") {
194
+ return prop.type;
195
+ }
196
+ }
197
+ return undefined;
198
+ };
199
+ /**
200
+ * Emit a default expression (simplified - just literals for now)
201
+ */
202
+ const emitDefaultExpr = (expr, _ctx) => {
203
+ // Simplified default expression emission
204
+ if (expr.kind === "literal") {
205
+ if (typeof expr.value === "string") {
206
+ return `"${expr.value}"`;
207
+ }
208
+ if (typeof expr.value === "number") {
209
+ return String(expr.value);
210
+ }
211
+ if (typeof expr.value === "boolean") {
212
+ return expr.value ? "true" : "false";
213
+ }
214
+ if (expr.value === null) {
215
+ return "null";
216
+ }
217
+ }
218
+ if (expr.kind === "identifier") {
219
+ return escapeCSharpIdentifier(expr.name);
220
+ }
221
+ // For complex expressions, emit a placeholder
222
+ return "default!";
223
+ };
224
+ /**
225
+ * Lower a pattern to a sequence of C# statements
226
+ *
227
+ * @param pattern - The pattern to lower (identifier, array, or object)
228
+ * @param inputExpr - The C# expression being destructured
229
+ * @param type - The type of the input expression (for type annotations)
230
+ * @param indent - Indentation prefix for generated code
231
+ * @param ctx - The current emitter context
232
+ * @returns The generated statements and updated context
233
+ */
234
+ export const lowerPattern = (pattern, inputExpr, type, indent, ctx) => {
235
+ switch (pattern.kind) {
236
+ case "identifierPattern":
237
+ return lowerIdentifier(pattern.name, inputExpr, type, indent, ctx);
238
+ case "arrayPattern": {
239
+ // Get element type from array type, and pass full array type for static context
240
+ const elementType = type?.kind === "arrayType" ? type.elementType : undefined;
241
+ return lowerArrayPattern(pattern, inputExpr, elementType, indent, ctx, type);
242
+ }
243
+ case "objectPattern":
244
+ return lowerObjectPattern(pattern, inputExpr, type, indent, ctx);
245
+ default:
246
+ // Unknown pattern kind
247
+ return {
248
+ statements: [`${indent}// Unsupported pattern kind`],
249
+ context: ctx,
250
+ };
251
+ }
252
+ };
253
+ /**
254
+ * Lower a pattern for a for-of loop variable
255
+ * Similar to lowerPattern but handles the iteration context
256
+ */
257
+ export const lowerForOfPattern = (pattern, iteratorVar, elementType, indent, ctx) => {
258
+ // For simple identifier patterns, no lowering needed
259
+ if (pattern.kind === "identifierPattern") {
260
+ // The for-of loop itself declares the variable
261
+ return { statements: [], context: ctx };
262
+ }
263
+ // For complex patterns, lower to statements inside the loop body
264
+ return lowerPattern(pattern, iteratorVar, elementType, indent, ctx);
265
+ };
266
+ /**
267
+ * Lower a parameter pattern for function definitions
268
+ * Generates statements to go at the beginning of the function body
269
+ */
270
+ export const lowerParameterPattern = (pattern, paramName, paramType, indent, ctx) => {
271
+ // For simple identifier patterns, no lowering needed
272
+ if (pattern.kind === "identifierPattern") {
273
+ return { statements: [], context: ctx };
274
+ }
275
+ // For complex patterns, generate statements to destructure the synthetic param
276
+ return lowerPattern(pattern, paramName, paramType, indent, ctx);
277
+ };
278
+ /**
279
+ * Lower an assignment pattern to a C# expression
280
+ *
281
+ * In JavaScript, destructuring assignment is an expression that returns the RHS:
282
+ * const result = ([a, b] = arr); // result === arr
283
+ *
284
+ * We emit this as a parenthesized sequence expression:
285
+ * ((__t = rhs), (a = __t[0]), (b = __t[1]), __t)
286
+ *
287
+ * @param pattern - The pattern being assigned to
288
+ * @param rhsExpr - The C# expression for the right-hand side
289
+ * @param type - The type of the RHS expression
290
+ * @param ctx - The current emitter context
291
+ * @returns The expression and updated context
292
+ */
293
+ export const lowerAssignmentPattern = (pattern, rhsExpr, type, ctx) => {
294
+ // For identifier pattern, just emit simple assignment
295
+ if (pattern.kind === "identifierPattern") {
296
+ const escapedName = escapeCSharpIdentifier(pattern.name);
297
+ return {
298
+ expression: `${escapedName} = ${rhsExpr}`,
299
+ context: ctx,
300
+ };
301
+ }
302
+ // For complex patterns, generate sequence expression
303
+ const [tempName, ctx1] = generateTemp("t", ctx);
304
+ let currentCtx = ctx1;
305
+ // Collect assignment expressions
306
+ const assignments = [];
307
+ if (pattern.kind === "arrayPattern") {
308
+ const elementType = type?.kind === "arrayType" ? type.elementType : undefined;
309
+ let index = 0;
310
+ for (const elem of pattern.elements) {
311
+ if (!elem) {
312
+ // Hole in pattern - skip
313
+ index++;
314
+ continue;
315
+ }
316
+ if (elem.isRest) {
317
+ // Rest element
318
+ const result = lowerAssignmentPatternElement(elem.pattern, `Tsonic.Runtime.ArrayHelpers.Slice(${tempName}, ${index})`, elementType ? { kind: "arrayType", elementType } : undefined, currentCtx);
319
+ assignments.push(result.expression);
320
+ currentCtx = result.context;
321
+ break;
322
+ }
323
+ // Regular element
324
+ const result = lowerAssignmentPatternElement(elem.pattern, `${tempName}[${index}]`, elementType, currentCtx);
325
+ assignments.push(result.expression);
326
+ currentCtx = result.context;
327
+ index++;
328
+ }
329
+ }
330
+ else if (pattern.kind === "objectPattern") {
331
+ for (const prop of pattern.properties) {
332
+ if (prop.kind === "rest") {
333
+ // Rest property - would need synthetic type
334
+ if (prop.pattern.kind === "identifierPattern") {
335
+ const escapedName = escapeCSharpIdentifier(prop.pattern.name);
336
+ assignments.push(`/* ${escapedName} = rest of ${tempName} - needs synthetic type */`);
337
+ }
338
+ continue;
339
+ }
340
+ // Regular property
341
+ const propType = getPropertyType(type, prop.key);
342
+ const result = lowerAssignmentPatternElement(prop.value, `${tempName}.${prop.key}`, propType, currentCtx);
343
+ assignments.push(result.expression);
344
+ currentCtx = result.context;
345
+ }
346
+ }
347
+ // Build sequence expression: (__t = rhs, a = __t[0], ..., __t)
348
+ const allParts = [`${tempName} = ${rhsExpr}`, ...assignments, tempName];
349
+ const expression = `(${allParts.join(", ")})`;
350
+ return { expression, context: currentCtx };
351
+ };
352
+ /**
353
+ * Helper to lower a single element/property in an assignment pattern
354
+ */
355
+ const lowerAssignmentPatternElement = (pattern, inputExpr, type, ctx) => {
356
+ if (pattern.kind === "identifierPattern") {
357
+ const escapedName = escapeCSharpIdentifier(pattern.name);
358
+ return {
359
+ expression: `${escapedName} = ${inputExpr}`,
360
+ context: ctx,
361
+ };
362
+ }
363
+ // Nested pattern - recurse
364
+ return lowerAssignmentPattern(pattern, inputExpr, type, ctx);
365
+ };
366
+ //# sourceMappingURL=patterns.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patterns.js","sourceRoot":"","sources":["../src/patterns.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Comprehensive Tests for Destructuring Pattern Lowering
3
+ *
4
+ * Tests all forms of destructuring:
5
+ * - Variable declaration destructuring (array and object)
6
+ * - For-of loop destructuring
7
+ * - Parameter destructuring
8
+ * - Assignment destructuring
9
+ * - Nested patterns
10
+ * - Rest elements
11
+ * - Default values
12
+ * - Edge cases
13
+ */
14
+ export {};
15
+ //# sourceMappingURL=patterns.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patterns.test.d.ts","sourceRoot":"","sources":["../src/patterns.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG"}