@scriptc/compiler 0.0.0 → 0.0.2

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 (206) hide show
  1. package/LICENSE +202 -0
  2. package/ambient/package.json +3 -0
  3. package/ambient/scriptc-node-fallback.d.ts +3001 -0
  4. package/ambient/scriptc-overrides.d.ts +95 -0
  5. package/ambient/scriptc.d.ts +74 -0
  6. package/dist/backend/cc.d.ts +169 -0
  7. package/dist/backend/cc.js +897 -0
  8. package/dist/backend/cc.js.map +1 -0
  9. package/dist/backend/emission/emit-async.d.ts +145 -0
  10. package/dist/backend/emission/emit-async.js +996 -0
  11. package/dist/backend/emission/emit-async.js.map +1 -0
  12. package/dist/backend/emission/emit-exprs.d.ts +3 -0
  13. package/dist/backend/emission/emit-exprs.js +5949 -0
  14. package/dist/backend/emission/emit-exprs.js.map +1 -0
  15. package/dist/backend/emission/emit-island.d.ts +45 -0
  16. package/dist/backend/emission/emit-island.js +271 -0
  17. package/dist/backend/emission/emit-island.js.map +1 -0
  18. package/dist/backend/emission/emit-shapes.d.ts +142 -0
  19. package/dist/backend/emission/emit-shapes.js +575 -0
  20. package/dist/backend/emission/emit-shapes.js.map +1 -0
  21. package/dist/backend/emission/emit-stmts.d.ts +78 -0
  22. package/dist/backend/emission/emit-stmts.js +960 -0
  23. package/dist/backend/emission/emit-stmts.js.map +1 -0
  24. package/dist/backend/emission/emit-types.d.ts +65 -0
  25. package/dist/backend/emission/emit-types.js +652 -0
  26. package/dist/backend/emission/emit-types.js.map +1 -0
  27. package/dist/backend/emission/emit-walkers.d.ts +154 -0
  28. package/dist/backend/emission/emit-walkers.js +1587 -0
  29. package/dist/backend/emission/emit-walkers.js.map +1 -0
  30. package/dist/backend/emission/emitter.d.ts +452 -0
  31. package/dist/backend/emission/emitter.js +1249 -0
  32. package/dist/backend/emission/emitter.js.map +1 -0
  33. package/dist/backend/emission/may-throw.d.ts +15 -0
  34. package/dist/backend/emission/may-throw.js +250 -0
  35. package/dist/backend/emission/may-throw.js.map +1 -0
  36. package/dist/backend/llvm/blocks.d.ts +21 -0
  37. package/dist/backend/llvm/blocks.js +68 -0
  38. package/dist/backend/llvm/blocks.js.map +1 -0
  39. package/dist/backend/llvm/classes.d.ts +84 -0
  40. package/dist/backend/llvm/classes.js +438 -0
  41. package/dist/backend/llvm/classes.js.map +1 -0
  42. package/dist/backend/llvm/dyn.d.ts +123 -0
  43. package/dist/backend/llvm/dyn.js +2624 -0
  44. package/dist/backend/llvm/dyn.js.map +1 -0
  45. package/dist/backend/llvm/emitter.d.ts +3 -0
  46. package/dist/backend/llvm/emitter.js +10102 -0
  47. package/dist/backend/llvm/emitter.js.map +1 -0
  48. package/dist/backend/llvm/shapes.d.ts +78 -0
  49. package/dist/backend/llvm/shapes.js +754 -0
  50. package/dist/backend/llvm/shapes.js.map +1 -0
  51. package/dist/backend/llvm/unsupported.d.ts +6 -0
  52. package/dist/backend/llvm/unsupported.js +12 -0
  53. package/dist/backend/llvm/unsupported.js.map +1 -0
  54. package/dist/backend/llvm/walkers.d.ts +58 -0
  55. package/dist/backend/llvm/walkers.js +793 -0
  56. package/dist/backend/llvm/walkers.js.map +1 -0
  57. package/dist/backend/mangle.d.ts +124 -0
  58. package/dist/backend/mangle.js +232 -0
  59. package/dist/backend/mangle.js.map +1 -0
  60. package/dist/coverage/report.d.ts +65 -0
  61. package/dist/coverage/report.js +238 -0
  62. package/dist/coverage/report.js.map +1 -0
  63. package/dist/diagnostics/diagnostic.d.ts +140 -0
  64. package/dist/diagnostics/diagnostic.js +458 -0
  65. package/dist/diagnostics/diagnostic.js.map +1 -0
  66. package/dist/diagnostics/render.d.ts +11 -0
  67. package/dist/diagnostics/render.js +58 -0
  68. package/dist/diagnostics/render.js.map +1 -0
  69. package/dist/frontend/cjs-lexer.d.ts +20 -0
  70. package/dist/frontend/cjs-lexer.js +813 -0
  71. package/dist/frontend/cjs-lexer.js.map +1 -0
  72. package/dist/frontend/lowering/http2-constants.d.ts +1 -0
  73. package/dist/frontend/lowering/http2-constants.js +251 -0
  74. package/dist/frontend/lowering/http2-constants.js.map +1 -0
  75. package/dist/frontend/lowering/lib-boundary.d.ts +6 -0
  76. package/dist/frontend/lowering/lib-boundary.js +143 -0
  77. package/dist/frontend/lowering/lib-boundary.js.map +1 -0
  78. package/dist/frontend/lowering/lower-assert.d.ts +18 -0
  79. package/dist/frontend/lowering/lower-assert.js +1269 -0
  80. package/dist/frontend/lowering/lower-assert.js.map +1 -0
  81. package/dist/frontend/lowering/lower-builtins.d.ts +511 -0
  82. package/dist/frontend/lowering/lower-builtins.js +5249 -0
  83. package/dist/frontend/lowering/lower-builtins.js.map +1 -0
  84. package/dist/frontend/lowering/lower-calls.d.ts +581 -0
  85. package/dist/frontend/lowering/lower-calls.js +6286 -0
  86. package/dist/frontend/lowering/lower-calls.js.map +1 -0
  87. package/dist/frontend/lowering/lower-classes.d.ts +727 -0
  88. package/dist/frontend/lowering/lower-classes.js +4701 -0
  89. package/dist/frontend/lowering/lower-classes.js.map +1 -0
  90. package/dist/frontend/lowering/lower-comptime.d.ts +53 -0
  91. package/dist/frontend/lowering/lower-comptime.js +244 -0
  92. package/dist/frontend/lowering/lower-comptime.js.map +1 -0
  93. package/dist/frontend/lowering/lower-containers.d.ts +486 -0
  94. package/dist/frontend/lowering/lower-containers.js +6345 -0
  95. package/dist/frontend/lowering/lower-containers.js.map +1 -0
  96. package/dist/frontend/lowering/lower-dgram.d.ts +20 -0
  97. package/dist/frontend/lowering/lower-dgram.js +319 -0
  98. package/dist/frontend/lowering/lower-dgram.js.map +1 -0
  99. package/dist/frontend/lowering/lower-emitter.d.ts +10 -0
  100. package/dist/frontend/lowering/lower-emitter.js +688 -0
  101. package/dist/frontend/lowering/lower-emitter.js.map +1 -0
  102. package/dist/frontend/lowering/lower-enums.d.ts +22 -0
  103. package/dist/frontend/lowering/lower-enums.js +235 -0
  104. package/dist/frontend/lowering/lower-enums.js.map +1 -0
  105. package/dist/frontend/lowering/lower-expando.d.ts +35 -0
  106. package/dist/frontend/lowering/lower-expando.js +276 -0
  107. package/dist/frontend/lowering/lower-expando.js.map +1 -0
  108. package/dist/frontend/lowering/lower-exprs.d.ts +524 -0
  109. package/dist/frontend/lowering/lower-exprs.js +8111 -0
  110. package/dist/frontend/lowering/lower-exprs.js.map +1 -0
  111. package/dist/frontend/lowering/lower-generators.d.ts +50 -0
  112. package/dist/frontend/lowering/lower-generators.js +421 -0
  113. package/dist/frontend/lowering/lower-generators.js.map +1 -0
  114. package/dist/frontend/lowering/lower-inspect.d.ts +20 -0
  115. package/dist/frontend/lowering/lower-inspect.js +1074 -0
  116. package/dist/frontend/lowering/lower-inspect.js.map +1 -0
  117. package/dist/frontend/lowering/lower-island.d.ts +108 -0
  118. package/dist/frontend/lowering/lower-island.js +650 -0
  119. package/dist/frontend/lowering/lower-island.js.map +1 -0
  120. package/dist/frontend/lowering/lower-mixins.d.ts +96 -0
  121. package/dist/frontend/lowering/lower-mixins.js +534 -0
  122. package/dist/frontend/lowering/lower-mixins.js.map +1 -0
  123. package/dist/frontend/lowering/lower-modules.d.ts +135 -0
  124. package/dist/frontend/lowering/lower-modules.js +1613 -0
  125. package/dist/frontend/lowering/lower-modules.js.map +1 -0
  126. package/dist/frontend/lowering/lower-namespaces.d.ts +168 -0
  127. package/dist/frontend/lowering/lower-namespaces.js +706 -0
  128. package/dist/frontend/lowering/lower-namespaces.js.map +1 -0
  129. package/dist/frontend/lowering/lower-server.d.ts +90 -0
  130. package/dist/frontend/lowering/lower-server.js +3471 -0
  131. package/dist/frontend/lowering/lower-server.js.map +1 -0
  132. package/dist/frontend/lowering/lower-stmts.d.ts +361 -0
  133. package/dist/frontend/lowering/lower-stmts.js +5341 -0
  134. package/dist/frontend/lowering/lower-stmts.js.map +1 -0
  135. package/dist/frontend/lowering/lower-stream.d.ts +88 -0
  136. package/dist/frontend/lowering/lower-stream.js +1533 -0
  137. package/dist/frontend/lowering/lower-stream.js.map +1 -0
  138. package/dist/frontend/lowering/lower-test.d.ts +27 -0
  139. package/dist/frontend/lowering/lower-test.js +353 -0
  140. package/dist/frontend/lowering/lower-test.js.map +1 -0
  141. package/dist/frontend/lowering/lowerer.d.ts +1748 -0
  142. package/dist/frontend/lowering/lowerer.js +6257 -0
  143. package/dist/frontend/lowering/lowerer.js.map +1 -0
  144. package/dist/frontend/lowering/surfaces.d.ts +272 -0
  145. package/dist/frontend/lowering/surfaces.js +1096 -0
  146. package/dist/frontend/lowering/surfaces.js.map +1 -0
  147. package/dist/frontend/npm-static.d.ts +55 -0
  148. package/dist/frontend/npm-static.js +300 -0
  149. package/dist/frontend/npm-static.js.map +1 -0
  150. package/dist/frontend/npm.d.ts +330 -0
  151. package/dist/frontend/npm.js +1259 -0
  152. package/dist/frontend/npm.js.map +1 -0
  153. package/dist/frontend/program.d.ts +186 -0
  154. package/dist/frontend/program.js +2255 -0
  155. package/dist/frontend/program.js.map +1 -0
  156. package/dist/frontend/provenance-registry.d.ts +48 -0
  157. package/dist/frontend/provenance-registry.js +87 -0
  158. package/dist/frontend/provenance-registry.js.map +1 -0
  159. package/dist/frontend/provenance.d.ts +6 -0
  160. package/dist/frontend/provenance.js +459 -0
  161. package/dist/frontend/provenance.js.map +1 -0
  162. package/dist/frontend/resolve.d.ts +56 -0
  163. package/dist/frontend/resolve.js +682 -0
  164. package/dist/frontend/resolve.js.map +1 -0
  165. package/dist/frontend/shared.d.ts +67 -0
  166. package/dist/frontend/shared.js +241 -0
  167. package/dist/frontend/shared.js.map +1 -0
  168. package/dist/frontend/ts7/adapter.d.ts +7 -0
  169. package/dist/frontend/ts7/adapter.js +54 -0
  170. package/dist/frontend/ts7/adapter.js.map +1 -0
  171. package/dist/frontend/ts7/ast.d.ts +50 -0
  172. package/dist/frontend/ts7/ast.js +211 -0
  173. package/dist/frontend/ts7/ast.js.map +1 -0
  174. package/dist/frontend/ts7/census-check.d.ts +1 -0
  175. package/dist/frontend/ts7/census-check.js +12 -0
  176. package/dist/frontend/ts7/census-check.js.map +1 -0
  177. package/dist/frontend/ts7/checker.d.ts +140 -0
  178. package/dist/frontend/ts7/checker.js +544 -0
  179. package/dist/frontend/ts7/checker.js.map +1 -0
  180. package/dist/frontend/ts7/enums.d.ts +18 -0
  181. package/dist/frontend/ts7/enums.js +43 -0
  182. package/dist/frontend/ts7/enums.js.map +1 -0
  183. package/dist/frontend/ts7/program.d.ts +99 -0
  184. package/dist/frontend/ts7/program.js +278 -0
  185. package/dist/frontend/ts7/program.js.map +1 -0
  186. package/dist/frontend/ts7/world-check.d.ts +3 -0
  187. package/dist/frontend/ts7/world-check.js +34 -0
  188. package/dist/frontend/ts7/world-check.js.map +1 -0
  189. package/dist/frontend/types.d.ts +205 -0
  190. package/dist/frontend/types.js +2485 -0
  191. package/dist/frontend/types.js.map +1 -0
  192. package/dist/index.d.ts +85 -0
  193. package/dist/index.js +429 -0
  194. package/dist/index.js.map +1 -0
  195. package/dist/ir/nodes.d.ts +4334 -0
  196. package/dist/ir/nodes.js +1906 -0
  197. package/dist/ir/nodes.js.map +1 -0
  198. package/dist/ir/serialize.d.ts +4 -0
  199. package/dist/ir/serialize.js +34 -0
  200. package/dist/ir/serialize.js.map +1 -0
  201. package/dist/ir/validate.d.ts +36 -0
  202. package/dist/ir/validate.js +4885 -0
  203. package/dist/ir/validate.js.map +1 -0
  204. package/package.json +30 -6
  205. package/README.md +0 -3
  206. package/index.js +0 -2
@@ -0,0 +1,20 @@
1
+ import * as ts from "../ts7/adapter.js";
2
+ import type { Lowerer } from "./lowerer.js";
3
+ import { IrExpr, SrcLoc } from "../../ir/nodes.js";
4
+ /** The lowered value members of the dgram/dns modules — the surfaces.ts
5
+ * tables' spoke-side twins (call shapes are all special-cased here). */
6
+ export declare const DGRAM_MODULE_FNS: ReadonlySet<string>;
7
+ export declare const DNS_MODULE_FNS: ReadonlySet<string>;
8
+ /** Module-function calls on dgram/dns import bindings (named imports AND
9
+ * namespace members — both funnel here): createSocket("udp4" | { type,
10
+ * reuseAddr? }), dns.lookup(hostname, { family: 4 }, cb). Null for other
11
+ * modules (the caller falls through); every dgram/dns member lands here —
12
+ * unlowered ones fence with their module-qualified name. */
13
+ export declare function lowerDgramDnsModuleCall(L: Lowerer, expr: ts.CallExpression, bi: {
14
+ module: string;
15
+ member: string;
16
+ }, loc: SrcLoc): IrExpr | null;
17
+ /** Method calls on dgram.Socket receivers — one entry in lower-calls.ts's
18
+ * intrinsic chain (after lowerServerMethodCall). Null for other
19
+ * receivers. */
20
+ export declare function lowerDgramMethodCall(L: Lowerer, call: ts.CallExpression, access: ts.PropertyAccessExpression): IrExpr | null;
@@ -0,0 +1,319 @@
1
+ /* The dgram/dns-surface lowering (node:dgram + node:dns — a spoke module
2
+ * like lower-server.ts): module-function calls (dgram createSocket, dns
3
+ * lookup), method calls on dgramSocket receivers (bind/connect/send/
4
+ * address/close/unref/ref and the message/listening/close/connect/error
5
+ * events), and the AddressInfo record materialization behind address().
6
+ * Everything the lib declares beyond these shapes fences member-qualified
7
+ * — never a generic rejection, never silence. Multicast has no lowering
8
+ * (portless's mDNS publishes through dns-sd/avahi child processes, not
9
+ * dgram multicast); its members fence with a named hint. */
10
+ import * as ts from "../ts7/adapter.js";
11
+ import { locOf } from "../program.js";
12
+ import { BOOL, DGRAMSOCK_T, F64, STRING, VOID } from "../../ir/nodes.js";
13
+ import { DNS_LOOKUP_DOCUMENTED_OPTIONS, fenceOrDropOptionKey } from "./surfaces.js";
14
+ const DGRAM_SURFACE_HINT = "bind, connect, send, address, close, unref/ref, and on/once of " +
15
+ "message/listening/close/connect/error are the supported dgram.Socket members";
16
+ /** The lowered value members of the dgram/dns modules — the surfaces.ts
17
+ * tables' spoke-side twins (call shapes are all special-cased here). */
18
+ export const DGRAM_MODULE_FNS = new Set(["createSocket"]);
19
+ export const DNS_MODULE_FNS = new Set(["lookup"]);
20
+ /** VOID-result socket calls are usable as statements and as concise arrow
21
+ * bodies; anything consuming the result (Node returns `this` where this
22
+ * surface returns void) is fenced — the lower-server stance. */
23
+ function requireStatementPosition(L, call, what) {
24
+ if (ts.isExpressionStatement(call.parent) || ts.isArrowFunction(call.parent))
25
+ return;
26
+ L.unsupported("SC1090", call, `using the result of ${what} (the result is void here — call it as its own statement)`);
27
+ }
28
+ /** Lowers a listener/callback argument, pinning the closure shape: void
29
+ * return, at most `maxParams` parameters, each parameter's IR kind
30
+ * satisfying `paramOk` (indexed). The lower-server helper's shape,
31
+ * re-stated here so the spoke stays self-contained. */
32
+ function lowerCallbackArg(L, node, what, maxParams, paramOk, paramHint) {
33
+ const cb = L.lowerExpr(node);
34
+ if (cb.type.kind !== "func" || cb.type.params.length > maxParams) {
35
+ L.unsupported("SC1090", node, `${what} with more than ${maxParams} parameter${maxParams === 1 ? "" : "s"} (${paramHint})`);
36
+ }
37
+ if (cb.type.ret.kind !== "void") {
38
+ L.unsupported("SC1090", node, "listeners returning a value (make the callback body a block, or return nothing)");
39
+ }
40
+ for (let i = 0; i < cb.type.params.length; i++) {
41
+ if (!paramOk(cb.type.params[i], i)) {
42
+ L.unsupported("SC1090", node, `${what} whose parameter is not supported (${paramHint})`);
43
+ }
44
+ }
45
+ return { cb, nparams: cb.type.params.length };
46
+ }
47
+ const boolLit = (value, loc) => ({ kind: "boolLit", value, type: BOOL, loc });
48
+ /** True iff `t` is the `Error | null` union — dns.lookup's first callback
49
+ * parameter (NodeJS.ErrnoException maps to %Error in types.ts). */
50
+ function isErrorOrNullUnion(L, t) {
51
+ if (t.kind !== "union")
52
+ return false;
53
+ const def = L.unions.get(t.unionId);
54
+ if (!def || def.arms.length !== 2)
55
+ return false;
56
+ const hasNull = def.arms.some((a) => a.kind === "nullT");
57
+ const hasError = def.arms.some((a) => a.kind === "object" && a.className === "%Error");
58
+ return hasNull && hasError;
59
+ }
60
+ /** True iff `t` is a record of exactly the given (name-sorted) string/f64
61
+ * fields — the AddressInfo/RemoteInfo shape check. */
62
+ function isRecordOfFields(L, t, fields) {
63
+ if (t.kind !== "record")
64
+ return false;
65
+ const shape = L.shapes.get(t.shapeId);
66
+ if (!shape || shape.tuple || shape.indexValue || shape.fields.length !== fields.length)
67
+ return false;
68
+ return shape.fields.every((f, i) => f.name === fields[i][0] && f.type.kind === fields[i][1]);
69
+ }
70
+ const ADDRINFO_FIELDS = [
71
+ ["address", "string"], ["family", "string"], ["port", "f64"],
72
+ ];
73
+ const RINFO_FIELDS = [
74
+ ["address", "string"], ["family", "string"], ["port", "f64"], ["size", "f64"],
75
+ ];
76
+ /** Module-function calls on dgram/dns import bindings (named imports AND
77
+ * namespace members — both funnel here): createSocket("udp4" | { type,
78
+ * reuseAddr? }), dns.lookup(hostname, { family: 4 }, cb). Null for other
79
+ * modules (the caller falls through); every dgram/dns member lands here —
80
+ * unlowered ones fence with their module-qualified name. */
81
+ export function lowerDgramDnsModuleCall(L, expr, bi, loc) {
82
+ if (bi.module === "dns")
83
+ return lowerDnsModuleCall(L, expr, bi, loc);
84
+ if (bi.module !== "dgram")
85
+ return null;
86
+ const args = expr.arguments;
87
+ if (bi.member === "createSocket") {
88
+ if (args.length !== 1) {
89
+ L.noLowering(`createSocket with ${args.length} arguments`, expr, 'the supported forms are createSocket("udp4") and createSocket({ type: "udp4", reuseAddr? })');
90
+ }
91
+ const arg = args[0];
92
+ // createSocket("udp4") — the bare string form.
93
+ const argT = L.typeOf(arg);
94
+ if (argT.isStringLiteralType()) {
95
+ if (argT.value !== "udp4") {
96
+ L.noLowering(`createSocket("${argT.value}")`, arg, '"udp4" is the supported socket type');
97
+ }
98
+ L.lowerExpr(arg); // side-effect order (a call producing the literal type)
99
+ return {
100
+ kind: "libCall", fn: "dgram.createSocket",
101
+ args: [boolLit(false, loc)], type: DGRAMSOCK_T, loc,
102
+ };
103
+ }
104
+ // createSocket({ type: "udp4", reuseAddr?: <bool> }) — an OBJECT
105
+ // LITERAL with literal keys; type must be the "udp4" literal.
106
+ if (!ts.isObjectLiteralExpression(arg)) {
107
+ L.noLowering("createSocket with a non-literal options argument", arg, 'pass the options as an object literal: createSocket({ type: "udp4" })');
108
+ }
109
+ let sawType = false;
110
+ let reuseAddr = null;
111
+ for (const prop of arg.properties) {
112
+ if (!ts.isPropertyAssignment(prop) || !ts.isIdentifier(prop.name)) {
113
+ L.noLowering("createSocket options with computed keys, spreads, or shorthand entries", prop, "each option must be a plain `name: value` entry with a literal key");
114
+ }
115
+ const name = prop.name.text;
116
+ if (name === "type") {
117
+ const t = L.typeOf(prop.initializer);
118
+ if (!t.isStringLiteralType() || t.value !== "udp4") {
119
+ L.noLowering('createSocket with a type other than the "udp4" literal', prop.initializer, '"udp4" is the supported socket type');
120
+ }
121
+ sawType = true;
122
+ }
123
+ else if (name === "reuseAddr") {
124
+ reuseAddr = L.lowerExprExpecting(prop.initializer, BOOL);
125
+ }
126
+ else {
127
+ L.noLowering(`createSocket option '${name}'`, prop, "type and reuseAddr are the supported options");
128
+ }
129
+ }
130
+ if (!sawType) {
131
+ L.noLowering("createSocket options without a type", arg, 'the supported form is createSocket({ type: "udp4", reuseAddr? })');
132
+ }
133
+ return {
134
+ kind: "libCall", fn: "dgram.createSocket",
135
+ args: [reuseAddr ?? boolLit(false, loc)], type: DGRAMSOCK_T, loc,
136
+ };
137
+ }
138
+ L.noLowering(`dgram.${bi.member}`, expr, "createSocket is the lowered dgram module function", ts.isIdentifier(expr.expression) ? L.resolveValueSymbol(expr.expression) : undefined);
139
+ }
140
+ /** dns.lookup(hostname, { family: 4 }, (err, address[, family]) => ...) —
141
+ * the ONE lowered dns member. getaddrinfo runs at call time; the callback
142
+ * defers to the next loop turn (SEMANTICS.md documents the split). */
143
+ function lowerDnsModuleCall(L, expr, bi, loc) {
144
+ if (bi.member !== "lookup") {
145
+ L.noLowering(`dns.${bi.member}`, expr, "lookup is the lowered dns module function", ts.isIdentifier(expr.expression) ? L.resolveValueSymbol(expr.expression) : undefined);
146
+ }
147
+ requireStatementPosition(L, expr, "dns.lookup(...)");
148
+ const args = expr.arguments;
149
+ if (args.length !== 3) {
150
+ L.noLowering(`lookup with ${args.length} arguments`, expr, "the supported form is lookup(hostname, { family: 4 }, callback)");
151
+ }
152
+ const hostname = L.lowerExprExpecting(args[0], STRING);
153
+ // The options: an object literal whose one meaningful entry is the
154
+ // IPv4 pin — `{ family: 4 }`. Node's family-less and family-6 lookups
155
+ // have no lowering (the runtime resolves over getaddrinfo/AF_INET).
156
+ const opts = args[1];
157
+ if (!ts.isObjectLiteralExpression(opts)) {
158
+ L.noLowering("lookup with a non-literal options argument", opts, "pass the options as an object literal: lookup(hostname, { family: 4 }, cb)");
159
+ }
160
+ let family = null;
161
+ for (const prop of opts.properties) {
162
+ if (!ts.isPropertyAssignment(prop) || !ts.isIdentifier(prop.name)) {
163
+ L.noLowering("lookup options with computed keys, spreads, or shorthand entries", prop, "each option must be a plain `name: value` entry with a literal key");
164
+ }
165
+ if (prop.name.text !== "family") {
166
+ // The options-record stance: hints/all/order/verbatim are
167
+ // documented dns.lookup knobs with no lowering — they fence by
168
+ // name; undocumented keys drop like Node drops them.
169
+ fenceOrDropOptionKey(L, prop, prop.name.text, "lookup", DNS_LOOKUP_DOCUMENTED_OPTIONS, "family: 4 is the supported option", {
170
+ all: "the all-addresses callback shape has no lowering — the lowered callback is (err, address, family) over one IPv4 answer",
171
+ });
172
+ continue; // an undocumented key, dropped like Node drops it
173
+ }
174
+ const t = L.typeOf(prop.initializer);
175
+ if (!t.isNumberLiteralType() || t.value !== 4) {
176
+ L.noLowering("lookup with a family other than the literal 4", prop.initializer, "IPv4 lookups ({ family: 4 }) are the supported form");
177
+ }
178
+ family = L.lowerExprExpecting(prop.initializer, F64);
179
+ }
180
+ if (!family) {
181
+ L.noLowering("lookup options without a family", opts, "the supported form is lookup(hostname, { family: 4 }, cb)");
182
+ }
183
+ const { cb } = lowerCallbackArg(L, args[2], "lookup callbacks", 3, (p, i) => i === 0 ? isErrorOrNullUnion(L, p)
184
+ : i === 1 ? p.kind === "string"
185
+ : p.kind === "f64", "use (err, address) — err is Error | null, address a string");
186
+ return { kind: "libCall", fn: "dns.lookup", args: [hostname, family, cb], type: VOID, loc };
187
+ }
188
+ /** Method calls on dgram.Socket receivers — one entry in lower-calls.ts's
189
+ * intrinsic chain (after lowerServerMethodCall). Null for other
190
+ * receivers. */
191
+ export function lowerDgramMethodCall(L, call, access) {
192
+ if (call.questionDotToken || access.questionDotToken)
193
+ return null;
194
+ if (L.mapTypeOf(L.typeOf(access.expression))?.kind !== "dgramSocket")
195
+ return null;
196
+ if (!L.isStdlibMember(access))
197
+ return null;
198
+ const name = access.name.text;
199
+ const loc = locOf(call);
200
+ const args = call.arguments;
201
+ if (name === "bind" || name === "connect") {
202
+ requireStatementPosition(L, call, `socket.${name}(...)`);
203
+ // bind(port[, address][, cb]) / connect(port[, address][, cb]) — the
204
+ // net.connect optional-middle rule: a 2-arg call's second argument is
205
+ // the address when string-typed, the callback when func-typed.
206
+ if (args.length < 1 || args.length > 3) {
207
+ L.noLowering(`${name} with ${args.length} arguments`, call, `the supported form is ${name}(port[, address][, callback])`);
208
+ }
209
+ const port = L.lowerExprExpecting(args[0], F64);
210
+ let hostNode;
211
+ let cbNode;
212
+ if (args.length === 2) {
213
+ if (L.mapTypeOf(L.typeOf(args[1]))?.kind === "string")
214
+ hostNode = args[1];
215
+ else
216
+ cbNode = args[1];
217
+ }
218
+ else if (args.length === 3) {
219
+ hostNode = args[1];
220
+ cbNode = args[2];
221
+ }
222
+ // Omitted-address completions: bind's is Node's 0.0.0.0 (the runtime
223
+ // reads "" as any); connect's is 127.0.0.1, Node's udp4 default.
224
+ const host = hostNode
225
+ ? L.lowerExprExpecting(hostNode, STRING)
226
+ : { kind: "strLit", value: name === "bind" ? "" : "127.0.0.1", type: STRING, loc };
227
+ const receiver = L.lowerExpr(access.expression);
228
+ if (!cbNode) {
229
+ const fn = name === "bind" ? "dgram.bind" : "dgram.connect";
230
+ return { kind: "libCall", fn, args: [receiver, port, host], type: VOID, loc };
231
+ }
232
+ const { cb } = lowerCallbackArg(L, cbNode, `${name} callbacks`, 0, () => false, "use ()");
233
+ const fn = name === "bind" ? "dgram.bindCb" : "dgram.connectCb";
234
+ return { kind: "libCall", fn, args: [receiver, port, host, cb], type: VOID, loc };
235
+ }
236
+ if (name === "send") {
237
+ requireStatementPosition(L, call, "socket.send(...)");
238
+ // send(msg, port, address) — one datagram to an explicit destination.
239
+ // The connected send and callback forms have no lowering yet.
240
+ if (args.length !== 3) {
241
+ L.noLowering(`send with ${args.length} arguments`, call, "the supported form is send(msg, port, address) — one string or Buffer datagram");
242
+ }
243
+ const receiver = L.lowerExpr(access.expression);
244
+ const data = L.lowerExpr(args[0]);
245
+ const port = L.lowerExprExpecting(args[1], F64);
246
+ const host = L.lowerExprExpecting(args[2], STRING);
247
+ if (data.type.kind === "string") {
248
+ return { kind: "libCall", fn: "dgram.sendStr", args: [receiver, data, port, host], type: VOID, loc };
249
+ }
250
+ if (data.type.kind === "bytes" && data.type.elem === "u8") {
251
+ return { kind: "libCall", fn: "dgram.sendBytes", args: [receiver, data, port, host], type: VOID, loc };
252
+ }
253
+ L.noLowering(`send of '${L.fmt(data.type)}' data`, args[0] ?? call, "send takes one string or one Uint8Array/Buffer datagram (narrow unions first)");
254
+ }
255
+ if (name === "address") {
256
+ if (args.length !== 0) {
257
+ L.noLowering(`address with ${args.length} arguments`, call, "address() takes no arguments");
258
+ }
259
+ // The declared AddressInfo return must map to the {address, family,
260
+ // port} record — the runtime fills exactly those three fields.
261
+ const result = L.mapTypeOf(L.typeOf(call));
262
+ if (!result || !isRecordOfFields(L, result, ADDRINFO_FIELDS)) {
263
+ L.noLowering("address() where the result is not the {address, family, port} record", call, "the AddressInfo shape is the supported result");
264
+ }
265
+ const receiver = L.lowerExpr(access.expression);
266
+ return { kind: "libCall", fn: "dgram.address", args: [receiver], type: result, loc };
267
+ }
268
+ if (name === "close") {
269
+ requireStatementPosition(L, call, "socket.close(...)");
270
+ if (args.length > 1) {
271
+ L.noLowering(`close with ${args.length} arguments`, call, "the supported form is close([callback])");
272
+ }
273
+ const receiver = L.lowerExpr(access.expression);
274
+ if (args.length === 0) {
275
+ return { kind: "libCall", fn: "dgram.close", args: [receiver], type: VOID, loc };
276
+ }
277
+ const { cb } = lowerCallbackArg(L, args[0], "close callbacks", 0, () => false, "use ()");
278
+ return { kind: "libCall", fn: "dgram.closeCb", args: [receiver, cb], type: VOID, loc };
279
+ }
280
+ if (name === "unref" || name === "ref") {
281
+ requireStatementPosition(L, call, `socket.${name}()`);
282
+ if (args.length !== 0) {
283
+ L.noLowering(`${name} with ${args.length} arguments`, call, `${name}() takes no arguments`);
284
+ }
285
+ const receiver = L.lowerExpr(access.expression);
286
+ const fn = name === "unref" ? "dgram.unref" : "dgram.ref";
287
+ return { kind: "libCall", fn, args: [receiver], type: VOID, loc };
288
+ }
289
+ if ((name === "on" || name === "once") && args.length === 2) {
290
+ requireStatementPosition(L, call, `socket.${name}(...)`);
291
+ const once = boolLit(name === "once", loc);
292
+ const evT = L.typeOf(args[0]);
293
+ const event = evT.isStringLiteralType() ? evT.value : null;
294
+ const receiver = L.lowerExpr(access.expression);
295
+ if (event === "message") {
296
+ const { cb } = lowerCallbackArg(L, args[1], "message listeners", 2, (p, i) => i === 0 ? p.kind === "bytes" && p.elem === "u8"
297
+ : isRecordOfFields(L, p, RINFO_FIELDS), "use (msg: Buffer, rinfo) or (msg: Buffer) or ()");
298
+ return { kind: "libCall", fn: "dgram.onMessage", args: [receiver, cb, once], type: VOID, loc };
299
+ }
300
+ if (event === "error") {
301
+ const { cb } = lowerCallbackArg(L, args[1], "error listeners", 1, (p) => p.kind === "object" && p.className === "%Error", "use (err) or ()");
302
+ return { kind: "libCall", fn: "dgram.onError", args: [receiver, cb, once], type: VOID, loc };
303
+ }
304
+ if (event === "listening" || event === "close" || event === "connect") {
305
+ const { cb } = lowerCallbackArg(L, args[1], `${event} listeners`, 0, () => false, "use ()");
306
+ const fn = event === "listening" ? "dgram.onListening"
307
+ : event === "close" ? "dgram.onClose"
308
+ : "dgram.onConnect";
309
+ return { kind: "libCall", fn, args: [receiver, cb, once], type: VOID, loc };
310
+ }
311
+ L.noLowering(`socket.${name}(${event === null ? "non-literal event" : `"${event}"`}, ...)`, args[0], '"message", "listening", "close", "connect", and "error" are the supported socket events (as literals)');
312
+ }
313
+ if (name.startsWith("setMulticast") || name === "addMembership" || name === "dropMembership" ||
314
+ name === "setBroadcast" || name === "setTTL") {
315
+ L.noLowering(`dgram.Socket.${name}`, call, `multicast/TTL options have no lowering (${DGRAM_SURFACE_HINT})`, L.checker.getSymbolAtLocation(access.name));
316
+ }
317
+ L.noLowering(`dgram.Socket.${name}`, call, DGRAM_SURFACE_HINT, L.checker.getSymbolAtLocation(access.name));
318
+ }
319
+ //# sourceMappingURL=lower-dgram.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lower-dgram.js","sourceRoot":"","sources":["../../../src/frontend/lowering/lower-dgram.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import * as ts from "../ts7/adapter.js";
2
+ import type { Lowerer } from "./lowerer.js";
3
+ import type { ClassInfo } from "./lower-classes.js";
4
+ import { IrExpr } from "../../ir/nodes.js";
5
+ /** True when the class descends from (or is) the runtime emitter. */
6
+ export declare function emitterRooted(L: Lowerer, info: ClassInfo | undefined | null): boolean;
7
+ /** `recv.<member>(...)` over an emitter-rooted receiver — the whole
8
+ * EventEmitter method surface. Returns null only for members this spoke
9
+ * does not own (the caller falls through to its own fences). */
10
+ export declare function lowerEmitterMethodCall(L: Lowerer, call: ts.CallExpression, access: ts.PropertyAccessExpression, info: ClassInfo): IrExpr | null;