@effect/platform-bun 4.0.2 → 4.0.4

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 (44) hide show
  1. package/AGENTS.md +24 -0
  2. package/CLAUDE.md +24 -0
  3. package/ai-docs/package.json +2 -2
  4. package/ai-docs/src/52_graphql/10_basics.ts +111 -0
  5. package/ai-docs/src/52_graphql/20_testing.ts +45 -0
  6. package/ai-docs/src/52_graphql/30_batching.ts +116 -0
  7. package/ai-docs/src/52_graphql/40_aliased-batching.ts +122 -0
  8. package/ai-docs/src/52_graphql/50_errors-and-retries.ts +74 -0
  9. package/ai-docs/src/52_graphql/index.md +6 -0
  10. package/dist/BunAddressResolver.d.ts +15 -0
  11. package/dist/BunAddressResolver.d.ts.map +1 -0
  12. package/dist/BunAddressResolver.js +15 -0
  13. package/dist/BunAddressResolver.js.map +1 -0
  14. package/dist/BunDatagramSocket.d.ts +227 -0
  15. package/dist/BunDatagramSocket.d.ts.map +1 -0
  16. package/dist/BunDatagramSocket.js +502 -0
  17. package/dist/BunDatagramSocket.js.map +1 -0
  18. package/dist/BunDns.d.ts +72 -0
  19. package/dist/BunDns.d.ts.map +1 -0
  20. package/dist/BunDns.js +66 -0
  21. package/dist/BunDns.js.map +1 -0
  22. package/dist/BunSocket.d.ts +4 -2
  23. package/dist/BunSocket.d.ts.map +1 -1
  24. package/dist/BunSocket.js +16 -6
  25. package/dist/BunSocket.js.map +1 -1
  26. package/dist/BunTerminal.d.ts +4 -3
  27. package/dist/BunTerminal.d.ts.map +1 -1
  28. package/dist/BunTerminal.js +4 -3
  29. package/dist/BunTerminal.js.map +1 -1
  30. package/dist/BunWorkerRunner.d.ts.map +1 -1
  31. package/dist/BunWorkerRunner.js +0 -1
  32. package/dist/BunWorkerRunner.js.map +1 -1
  33. package/dist/index.d.ts +15 -0
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +15 -0
  36. package/dist/index.js.map +1 -1
  37. package/package.json +7 -5
  38. package/src/BunAddressResolver.ts +15 -0
  39. package/src/BunDatagramSocket.ts +666 -0
  40. package/src/BunDns.ts +82 -0
  41. package/src/BunSocket.ts +25 -6
  42. package/src/BunTerminal.ts +4 -3
  43. package/src/BunWorkerRunner.ts +0 -1
  44. package/src/index.ts +18 -0
@@ -0,0 +1,502 @@
1
+ /**
2
+ * Bun UDP adapter for `effect/socket/DatagramSocket`, built on the native
3
+ * `Bun.udpSocket`. Requires Bun 1.4 or later: earlier versions throw `EAGAIN`
4
+ * from `send` instead of returning `false`, and never fire `drain`.
5
+ *
6
+ * `make` opens a new Bun socket for each reader acquisition, `fromUdpSocket`
7
+ * adopts a socket the caller creates, and `layer` provides the
8
+ * `DatagramSocket` service.
9
+ *
10
+ * The reader owns the native socket, so a send-only client must still acquire
11
+ * a reader, or its writes wait forever. Bun sends synchronously: a send error
12
+ * fails the write that caused it, and when the kernel buffer is full the write
13
+ * waits for `drain` and sends what is left.
14
+ *
15
+ * `writeAll` sends the batch with one `sendMany` call and fails with its first
16
+ * error. Which datagrams went out is unspecified, nothing is resent, and the
17
+ * error has no `address`, because Bun reports one error for the whole call.
18
+ *
19
+ * ICMP reports, such as a refused port, arrive after the write has completed,
20
+ * so they go to the `onError` option as a `DatagramSocketReadError` with no
21
+ * address.
22
+ *
23
+ * On macOS and Windows a poll error closes the socket without any event. The
24
+ * adapter notices on the next write, which fails with
25
+ * `DatagramSocketClosedError`, as do the reader and any write waiting for
26
+ * `drain`. Until then those waiting writes and `pull` keep waiting. The same
27
+ * applies when the caller closes a socket adopted with `fromUdpSocket`.
28
+ *
29
+ * **Example** (Echo server)
30
+ *
31
+ * ```ts
32
+ * import { BunDatagramSocket } from "@effect/platform-bun"
33
+ * import { Effect } from "effect"
34
+ *
35
+ * const echo = Effect.gen(function*() {
36
+ * const socket = yield* BunDatagramSocket.make({ bind: { port: 9000 } })
37
+ * const reader = yield* socket.reader
38
+ * const writer = yield* socket.writer
39
+ * while (true) {
40
+ * for (const received of yield* reader.pull) {
41
+ * yield* writer.write({ payload: received.payload, address: received })
42
+ * }
43
+ * }
44
+ * }).pipe(Effect.scoped)
45
+ * ```
46
+ *
47
+ * **Example** (Send-only client with a connected socket)
48
+ *
49
+ * ```ts
50
+ * import { BunDatagramSocket } from "@effect/platform-bun"
51
+ * import { Effect } from "effect"
52
+ *
53
+ * const send = (payload: string) =>
54
+ * Effect.gen(function*() {
55
+ * const socket = yield* BunDatagramSocket.make({
56
+ * connect: { address: "localhost", port: 9000 }
57
+ * })
58
+ * // Required even for send-only clients.
59
+ * yield* socket.reader
60
+ * const writer = yield* socket.writer
61
+ * yield* writer.write({ payload })
62
+ * }).pipe(Effect.scoped)
63
+ * ```
64
+ *
65
+ * **Example** (Adopting a socket)
66
+ *
67
+ * ```ts
68
+ * import { BunDatagramSocket } from "@effect/platform-bun"
69
+ * import { Effect } from "effect"
70
+ *
71
+ * const receive = Effect.gen(function*() {
72
+ * // `fromUdpSocket` replaces the socket's handlers with its own
73
+ * const socket = yield* BunDatagramSocket.fromUdpSocket(
74
+ * Effect.promise(() => Bun.udpSocket({ hostname: "127.0.0.1", port: 9000 }))
75
+ * )
76
+ * const reader = yield* socket.reader
77
+ * return yield* reader.pull
78
+ * }).pipe(Effect.scoped)
79
+ * ```
80
+ *
81
+ * @stability experimental
82
+ * @since 4.0.0
83
+ */
84
+ import * as Effect from "effect/Effect";
85
+ import * as Layer from "effect/Layer";
86
+ import * as NetAddress from "effect/net/NetAddress";
87
+ import * as Predicate from "effect/Predicate";
88
+ import * as DatagramSocket from "effect/socket/DatagramSocket";
89
+ import * as Dns from "node:dns";
90
+ import * as Net from "node:net";
91
+ import * as Os from "node:os";
92
+ /**
93
+ * Creates a `DatagramSocket` that opens and binds a new Bun UDP socket for
94
+ * each reader acquisition.
95
+ *
96
+ * **Details**
97
+ *
98
+ * Creating the socket never fails. Binding, applying options and resolving
99
+ * names happen on reader acquisition and fail it with a `DatagramSocketError`.
100
+ * Hostnames in `bind`, `peer` and `connect` are resolved once per acquisition;
101
+ * sends never wait for DNS.
102
+ *
103
+ * Invalid `receiveBuffer.capacity` values cause a defect; use a positive
104
+ * safe integer.
105
+ *
106
+ * @stability experimental
107
+ * @category constructors
108
+ * @since 4.0.0
109
+ */
110
+ export const make = (options = {}) => DatagramSocket.makeFromBackingSocket(events => open(options, events), options);
111
+ /**
112
+ * Adopts a Bun UDP socket.
113
+ *
114
+ * **Details**
115
+ *
116
+ * `acquire` runs once per reader acquisition, inside the reader's scope, and
117
+ * the adapter closes the socket when that scope ends. Whether the socket is
118
+ * connected is checked once at open.
119
+ *
120
+ * The adapter installs its own `data`, `drain` and `error` handlers with
121
+ * `socket.reload`, which replaces the ones the caller passed to
122
+ * `Bun.udpSocket`. Packets that arrive before `acquire` completes still go to
123
+ * the caller's handlers.
124
+ *
125
+ * @stability experimental
126
+ * @category constructors
127
+ * @since 4.0.0
128
+ */
129
+ export const fromUdpSocket = (acquire, options = {}) => DatagramSocket.makeFromBackingSocket(events => Effect.flatMap(acquire, socket => adopt(socket, options, events)), options);
130
+ /**
131
+ * Provides a `DatagramSocket` built with `make`.
132
+ *
133
+ * @stability experimental
134
+ * @category layers
135
+ * @since 4.0.0
136
+ */
137
+ export const layer = (options = {}) => Layer.effect(DatagramSocket.DatagramSocket, make(options));
138
+ const noScopeIds = /*#__PURE__*/new Map();
139
+ // Windows reports numeric zones, which parse and format without a map
140
+ const scopeIdsFor = family => {
141
+ if (family === "ipv4" || process.platform === "win32") return noScopeIds;
142
+ try {
143
+ return NetAddress.scopeIdsFromInterfaces(Object.entries(Os.networkInterfaces()));
144
+ } catch {
145
+ return noScopeIds;
146
+ }
147
+ };
148
+ const familyOf = address => {
149
+ if (typeof address !== "string") return NetAddress.isIpv4Address(address) ? "ipv4" : "ipv6";
150
+ const version = Net.isIP(address);
151
+ return version === 4 ? "ipv4" : version === 6 ? "ipv6" : undefined;
152
+ };
153
+ // An endpoint may be a whole `InetAddress`, whose IPv6 scope must survive
154
+ const formatHost = (endpoint, scopeIds) => NetAddress.isInetAddress(endpoint) ? NetAddress.formatNativeHost(endpoint, scopeIds) : endpoint.address === undefined || typeof endpoint.address === "string" ? endpoint.address : NetAddress.formatIp(endpoint.address);
155
+ // Resolves a hostname with one `lookup`, preferring IPv4 unless `family` is
156
+ // fixed. IP literals and `IpAddress` values need no lookup.
157
+ const resolve = (address, family) => {
158
+ if (typeof address !== "string") return Effect.undefined;
159
+ const literal = familyOf(address);
160
+ if (literal !== undefined) return Effect.succeed({
161
+ host: address,
162
+ family: literal
163
+ });
164
+ return Effect.callback(resume => {
165
+ const fail = error => resume(Effect.fail(openError(error, "AddressNotAvailable")));
166
+ try {
167
+ Dns.lookup(address, {
168
+ all: true,
169
+ family: family === "ipv4" ? 4 : family === "ipv6" ? 6 : 0
170
+ }, (error, results) => {
171
+ if (error) return fail(error);
172
+ const result = results.find(result => result.family === 4) ?? results[0];
173
+ if (result === undefined) return fail(new Error(`${address} has no addresses`));
174
+ resume(Effect.succeed({
175
+ host: result.address,
176
+ family: result.family === 6 ? "ipv6" : "ipv4"
177
+ }));
178
+ });
179
+ } catch (error) {
180
+ fail(error);
181
+ }
182
+ });
183
+ };
184
+ // Picks the family as documented on `Options` and turns `bind` and the remote
185
+ // endpoint into IP literals
186
+ const resolveOpen = /*#__PURE__*/Effect.fnUntraced(function* (options) {
187
+ const bind = options.bind;
188
+ const remote = options.connect ?? options.peer;
189
+ const fixed = options.family ?? (bind?.address === undefined ? undefined : familyOf(bind.address));
190
+ const resolvedRemote = yield* resolve(remote?.address, fixed);
191
+ const remoteFamily = resolvedRemote?.family ?? (remote === undefined ? undefined : familyOf(remote.address));
192
+ const resolvedBind = yield* resolve(bind?.address, fixed ?? remoteFamily);
193
+ const family = fixed ?? remoteFamily ?? resolvedBind?.family ?? "ipv4";
194
+ const scopeIds = scopeIdsFor(family);
195
+ return {
196
+ scopeIds,
197
+ host: resolvedBind?.host ?? (bind === undefined ? undefined : formatHost(bind, scopeIds)) ?? (family === "ipv6" ? "::" : "0.0.0.0"),
198
+ remote: remote === undefined ? undefined : {
199
+ host: resolvedRemote?.host ?? formatHost(remote, scopeIds),
200
+ port: remote.port
201
+ }
202
+ };
203
+ });
204
+ const errorCode = error => Predicate.hasProperty(error, "code") ? error.code : undefined;
205
+ const openError = (error, kind) => {
206
+ if (kind === undefined) {
207
+ const code = errorCode(error);
208
+ kind = code === "EADDRINUSE" ? "AddressInUse" : code === "EADDRNOTAVAIL" ? "AddressNotAvailable" : code === "EACCES" || code === "EPERM" ? "PermissionDenied" : "Unknown";
209
+ }
210
+ return new DatagramSocket.DatagramSocketError({
211
+ reason: new DatagramSocket.DatagramSocketOpenError({
212
+ kind,
213
+ cause: error
214
+ })
215
+ });
216
+ };
217
+ const ioKind = error => {
218
+ switch (errorCode(error)) {
219
+ case "EMSGSIZE":
220
+ return "MessageTooLarge";
221
+ case "EHOSTUNREACH":
222
+ case "ENETUNREACH":
223
+ case "EHOSTDOWN":
224
+ case "ENETDOWN":
225
+ return "Unreachable";
226
+ case "ECONNREFUSED":
227
+ return "ConnectionRefused";
228
+ case "EACCES":
229
+ case "EPERM":
230
+ return "PermissionDenied";
231
+ default:
232
+ return "Unknown";
233
+ }
234
+ };
235
+ const closedError = () => new DatagramSocket.DatagramSocketError({
236
+ reason: new DatagramSocket.DatagramSocketClosedError()
237
+ });
238
+ const writeError = error => new DatagramSocket.DatagramSocketError({
239
+ reason: new DatagramSocket.DatagramSocketWriteError({
240
+ kind: ioKind(error),
241
+ cause: error
242
+ })
243
+ });
244
+ const readError = error => new DatagramSocket.DatagramSocketError({
245
+ reason: new DatagramSocket.DatagramSocketReadError({
246
+ kind: ioKind(error),
247
+ cause: error
248
+ })
249
+ });
250
+ // Bun throws a plain `Error` with this message when sending on a closed socket
251
+ const isClosedError = error => Predicate.hasProperty(error, "message") && error.message === "Socket is closed";
252
+ // uSockets `LIBUS_SOCKET_*` flags, not part of Bun's public API. Bun's own
253
+ // `node:dgram` passes them the same way.
254
+ // https://github.com/oven-sh/bun/blob/main/packages/bun-usockets/src/libusockets.h
255
+ const LIBUS_SOCKET_REUSE_PORT = 4;
256
+ const LIBUS_SOCKET_IPV6_ONLY = 8;
257
+ const LIBUS_SOCKET_REUSE_ADDR = 16;
258
+ const open = /*#__PURE__*/Effect.fnUntraced(function* (options, events) {
259
+ const {
260
+ host,
261
+ remote,
262
+ scopeIds
263
+ } = yield* resolveOpen(options);
264
+ const backing = new BunBackingSocket(events);
265
+ const flags = (options.reusePort ? LIBUS_SOCKET_REUSE_PORT : 0) | (options.ipv6Only ? LIBUS_SOCKET_IPV6_ONLY : 0) | (options.reuseAddress ? LIBUS_SOCKET_REUSE_ADDR : 0);
266
+ const connect = options.connect === undefined ? undefined : {
267
+ hostname: remote.host,
268
+ port: remote.port
269
+ };
270
+ const socket = yield* Effect.tryPromise({
271
+ try: () => Bun.udpSocket({
272
+ hostname: host,
273
+ port: options.bind?.port ?? 0,
274
+ socket: backing.handlers,
275
+ ...(flags === 0 ? undefined : {
276
+ flags
277
+ }),
278
+ ...(connect === undefined ? undefined : {
279
+ connect
280
+ })
281
+ }),
282
+ catch: error => openError(error)
283
+ });
284
+ // closes the new socket if `attach` or an option fails
285
+ backing.socket = socket;
286
+ yield* Effect.try({
287
+ try: () => {
288
+ backing.attach(socket, scopeIds, remote, connect !== undefined);
289
+ if (options.broadcast !== undefined) socket.setBroadcast(options.broadcast);
290
+ if (options.ttl !== undefined) socket.setTTL(options.ttl);
291
+ const multicast = options.multicast;
292
+ if (multicast?.ttl !== undefined) socket.setMulticastTTL(multicast.ttl);
293
+ if (multicast?.loopback !== undefined) socket.setMulticastLoopback(multicast.loopback);
294
+ if (multicast?.interface !== undefined) {
295
+ socket.setMulticastInterface(NetAddress.formatMulticastInterface(multicast.interface, scopeIds));
296
+ }
297
+ },
298
+ catch: error => openError(error)
299
+ }).pipe(Effect.onError(() => Effect.sync(() => backing.close())));
300
+ return backing;
301
+ });
302
+ const adopt = (socket, options, events) => {
303
+ const backing = new BunBackingSocket(events);
304
+ backing.socket = socket;
305
+ return Effect.gen(function* () {
306
+ if (socket.closed) return yield* Effect.fail(openError(new Error("The adopted Bun UDP socket is closed")));
307
+ const family = yield* Effect.try({
308
+ try: () => {
309
+ // Bun reads `{ socket }`, although the types declare the handler itself
310
+ socket.reload({
311
+ socket: backing.handlers
312
+ });
313
+ return socket.address.family === "IPv6" ? "ipv6" : "ipv4";
314
+ },
315
+ catch: error => openError(error)
316
+ });
317
+ const scopeIds = scopeIdsFor(family);
318
+ // an unconnected socket has the property, set to `undefined`
319
+ const remote = "remoteAddress" in socket ? socket.remoteAddress : undefined;
320
+ if (remote !== undefined) {
321
+ return backing.attach(socket, scopeIds, {
322
+ host: remote.address,
323
+ port: remote.port
324
+ }, true);
325
+ }
326
+ const peer = options.peer;
327
+ const resolved = yield* resolve(peer?.address, family);
328
+ return backing.attach(socket, scopeIds, peer === undefined ? undefined : {
329
+ host: resolved?.host ?? formatHost(peer, scopeIds),
330
+ port: peer.port
331
+ }, false);
332
+ }).pipe(Effect.onError(() => Effect.sync(() => backing.close())));
333
+ };
334
+ class BunBackingSocket {
335
+ events;
336
+ // installed when the socket is created, so packets can arrive before `attach`
337
+ handlers;
338
+ socket = undefined;
339
+ address = {
340
+ host: "",
341
+ port: 0
342
+ };
343
+ scopeIds = noScopeIds;
344
+ peer = undefined;
345
+ connected = false;
346
+ // entries per datagram in `sendMany`'s flat list
347
+ stride = 3;
348
+ // waiting sends, oldest first; later sends queue behind them to keep order
349
+ waiting = [];
350
+ closing = false;
351
+ constructor(events) {
352
+ this.events = events;
353
+ this.handlers = {
354
+ data: (_socket, payload, port, host) => events.onPacket(payload, host, port),
355
+ // also fires once right after creation, when nothing is waiting
356
+ drain: () => this.flush(),
357
+ // Bun crashes the process without an `error` handler. It passes the
358
+ // error alone, despite the declared `(socket, error)`.
359
+ error: (first, second) => this.onNativeError(second === undefined ? first : second)
360
+ };
361
+ }
362
+ attach(socket, scopeIds, peer, connected) {
363
+ this.socket = socket;
364
+ this.address = {
365
+ host: socket.address.address,
366
+ port: socket.address.port
367
+ };
368
+ this.scopeIds = scopeIds;
369
+ this.peer = peer;
370
+ this.connected = connected;
371
+ this.stride = connected ? 1 : 3;
372
+ return this;
373
+ }
374
+ send(payload, destination, done) {
375
+ const entries = destination === undefined ? [payload] : [payload, destination.port, destination.host];
376
+ if (this.waiting.length !== 0) return this.wait(entries, done);
377
+ let sent;
378
+ try {
379
+ sent = destination === undefined ? this.socket.send(payload) : this.socket.send(payload, destination.port, destination.host);
380
+ } catch (error) {
381
+ return done(this.sendError(error));
382
+ }
383
+ if (sent) return done();
384
+ this.wait(entries, done);
385
+ }
386
+ sendMany(payloads, destinations, done) {
387
+ let entries = payloads;
388
+ if (!this.connected) {
389
+ const flat = new Array(payloads.length * 3);
390
+ for (let i = 0; i < payloads.length; i++) {
391
+ flat[i * 3] = payloads[i];
392
+ flat[i * 3 + 1] = destinations[i].port;
393
+ flat[i * 3 + 2] = destinations[i].host;
394
+ }
395
+ entries = flat;
396
+ }
397
+ if (this.waiting.length !== 0) return this.wait(entries, done);
398
+ let sent;
399
+ try {
400
+ sent = this.socket.sendMany(entries);
401
+ } catch (error) {
402
+ // Bun throws for the whole call, so no index is known
403
+ return done(this.sendError(error));
404
+ }
405
+ if (sent === payloads.length) return done();
406
+ this.wait(entries.slice(sent * this.stride), done);
407
+ }
408
+ joinMulticast({
409
+ group,
410
+ interface: ingress,
411
+ source
412
+ }) {
413
+ return Effect.try({
414
+ try: () => {
415
+ const socket = this.socket;
416
+ const groupHost = NetAddress.formatIp(group);
417
+ const interfaceHost = ingress === undefined ? undefined : NetAddress.formatMulticastInterface(ingress, this.scopeIds);
418
+ if (source === undefined) {
419
+ if (!socket.addMembership(groupHost, interfaceHost)) throw new Error(`Could not join ${groupHost}`);
420
+ return () => Effect.sync(() => socket.dropMembership(groupHost, interfaceHost));
421
+ }
422
+ const sourceHost = NetAddress.formatIp(source);
423
+ if (!socket.addSourceSpecificMembership(sourceHost, groupHost, interfaceHost)) {
424
+ throw new Error(`Could not join ${groupHost} from ${sourceHost}`);
425
+ }
426
+ return () => Effect.sync(() => socket.dropSourceSpecificMembership(sourceHost, groupHost, interfaceHost));
427
+ },
428
+ catch: error => openError(error)
429
+ });
430
+ }
431
+ close() {
432
+ if (this.closing) return;
433
+ this.closing = true;
434
+ this.failWaiting();
435
+ try {
436
+ this.socket?.close();
437
+ } catch {
438
+ // already closed
439
+ }
440
+ }
441
+ wait(entries, done) {
442
+ // a closed socket fires no event and never drains
443
+ if (this.socket?.closed) {
444
+ this.closedUnderneath();
445
+ return done(closedError());
446
+ }
447
+ this.waiting.push({
448
+ entries,
449
+ done
450
+ });
451
+ }
452
+ // on `drain`, send what the kernel refused, in order, until it refuses again
453
+ flush() {
454
+ const socket = this.socket;
455
+ if (socket === undefined) return;
456
+ // re-read `waiting`: a completion can close the socket and replace it
457
+ while (!this.closing && this.waiting.length !== 0) {
458
+ const next = this.waiting[0];
459
+ let sent;
460
+ try {
461
+ sent = socket.sendMany(next.entries);
462
+ } catch (error) {
463
+ this.waiting.shift();
464
+ next.done(this.sendError(error));
465
+ continue;
466
+ }
467
+ const rest = sent * this.stride;
468
+ if (rest < next.entries.length) {
469
+ next.entries = next.entries.slice(rest);
470
+ return;
471
+ }
472
+ this.waiting.shift();
473
+ next.done();
474
+ }
475
+ }
476
+ sendError(error) {
477
+ // on macOS and Windows a poll error closes the socket silently
478
+ if (this.socket?.closed || isClosedError(error)) {
479
+ this.closedUnderneath();
480
+ return closedError();
481
+ }
482
+ return writeError(error);
483
+ }
484
+ onNativeError(error) {
485
+ if (this.closing) return;
486
+ if (this.socket?.closed) return this.closedUnderneath();
487
+ // an ICMP report, with no write left to fail
488
+ this.events.onError(readError(error));
489
+ }
490
+ closedUnderneath() {
491
+ if (this.closing) return;
492
+ this.closing = true;
493
+ this.failWaiting();
494
+ this.events.onClose();
495
+ }
496
+ failWaiting() {
497
+ const waiting = this.waiting;
498
+ this.waiting = [];
499
+ for (let i = 0; i < waiting.length; i++) waiting[i].done(closedError());
500
+ }
501
+ }
502
+ //# sourceMappingURL=BunDatagramSocket.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BunDatagramSocket.js","names":[],"sources":["../src/BunDatagramSocket.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Bun implementation of Effect's `Dns` service.
3
+ *
4
+ * Address lookups use `Bun.dns.lookup` with the `system` backend, which calls
5
+ * the operating system resolver (`getaddrinfo`) and therefore also reads the
6
+ * hosts file. Bun's `node:dns` lookup uses c-ares instead, which bypasses the
7
+ * system's name service configuration. Record queries and reverse lookups use
8
+ * `NodeDns.resolver` without the UTF-8 correction of `NodeDns.make`,
9
+ * because Bun already decodes TXT and CAA character strings as UTF-8.
10
+ *
11
+ * **Gotchas**
12
+ *
13
+ * Bun returns each character string of a TXT record as a separate record, so
14
+ * a record made of several strings arrives as several TXT records whose chunks
15
+ * cannot be reassembled (https://github.com/oven-sh/bun/issues/44692).
16
+ *
17
+ * Bun's resolver cannot query TLSA records, so TLSA queries fail with
18
+ * `Unsupported`.
19
+ *
20
+ * @stability experimental
21
+ * @since 4.0.0
22
+ */
23
+ import * as NodeDns from "@effect/platform-node-shared/NodeDns";
24
+ import * as Config from "effect/Config";
25
+ import * as Effect from "effect/Effect";
26
+ import * as Layer from "effect/Layer";
27
+ import * as Dns from "effect/net/Dns";
28
+ import type * as NetAddress from "effect/net/NetAddress";
29
+ export type {
30
+ /**
31
+ * Options for the Bun `Dns` service: name servers, timeout, and tries for
32
+ * record queries and reverse lookups.
33
+ *
34
+ * @stability experimental
35
+ * @category re-exports
36
+ * @since 4.0.0
37
+ */
38
+ Options } from "@effect/platform-node-shared/NodeDns";
39
+ /**
40
+ * Creates a Bun `Dns` service whose resolver lives as long as the scope.
41
+ *
42
+ * @stability experimental
43
+ * @category constructors
44
+ * @since 4.0.0
45
+ */
46
+ export declare const make: (options?: NodeDns.Options | undefined) => Effect.Effect<{
47
+ lookup<F extends NetAddress.IpFamily>(host: import("effect/net/Host").DomainNameInput, options: {
48
+ readonly family: F;
49
+ }): Effect.Effect<import("effect/Array").NonEmptyReadonlyArray<NetAddress.FamilyAddress<F>>, Dns.DnsError>;
50
+ lookup(host: import("effect/net/Host").DomainNameInput, options?: Dns.LookupOptions): Effect.Effect<import("effect/Array").NonEmptyReadonlyArray<NetAddress.IpAddress>, Dns.DnsError>;
51
+ resolve<T extends Dns.RecordType>(name: import("effect/net/Host").DomainNameInput, type: T): Effect.Effect<import("effect/Array").NonEmptyReadonlyArray<Dns.RecordFor<T>>, Dns.DnsError>;
52
+ reverse(address: NetAddress.IpAddressInput): Effect.Effect<import("effect/Array").NonEmptyReadonlyArray<import("effect/net/Host").DomainName>, Dns.DnsError>;
53
+ }, NetAddress.NetAddressError, import("effect/Scope").Scope>;
54
+ /**
55
+ * Layer that provides the Bun `Dns` service using the system resolver
56
+ * configuration.
57
+ *
58
+ * @stability experimental
59
+ * @category layers
60
+ * @since 4.0.0
61
+ */
62
+ export declare const layer: Layer.Layer<Dns.Dns>;
63
+ /**
64
+ * Creates a layer that provides the Bun `Dns` service with options read
65
+ * from configuration.
66
+ *
67
+ * @stability experimental
68
+ * @category layers
69
+ * @since 4.0.0
70
+ */
71
+ export declare const layerConfig: (options: Config.Wrap<NodeDns.Options>) => Layer.Layer<Dns.Dns, Config.ConfigError | NetAddress.NetAddressError>;
72
+ //# sourceMappingURL=BunDns.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BunDns.d.ts","sourceRoot":"","sources":["../src/BunDns.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,KAAK,OAAO,MAAM,sCAAsC,CAAA;AAC/D,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAA;AACrC,OAAO,KAAK,KAAK,UAAU,MAAM,uBAAuB,CAAA;AAExD,YAAY;AACV;;;;;;;GAOG;AACH,OAAO,EACR,MAAM,sCAAsC,CAAA;AAE7C;;;;;;GAMG;AACH,eAAO,MAAM,IAAI;;;;;;;4DAUf,CAAA;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAA+C,CAAA;AAEtF;;;;;;;GAOG;AACH,eAAO,MAAM,WAAW,YACb,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KACpC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,WAAW,GAAG,UAAU,CAAC,eAAe,CACF,CAAA"}
package/dist/BunDns.js ADDED
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Bun implementation of Effect's `Dns` service.
3
+ *
4
+ * Address lookups use `Bun.dns.lookup` with the `system` backend, which calls
5
+ * the operating system resolver (`getaddrinfo`) and therefore also reads the
6
+ * hosts file. Bun's `node:dns` lookup uses c-ares instead, which bypasses the
7
+ * system's name service configuration. Record queries and reverse lookups use
8
+ * `NodeDns.resolver` without the UTF-8 correction of `NodeDns.make`,
9
+ * because Bun already decodes TXT and CAA character strings as UTF-8.
10
+ *
11
+ * **Gotchas**
12
+ *
13
+ * Bun returns each character string of a TXT record as a separate record, so
14
+ * a record made of several strings arrives as several TXT records whose chunks
15
+ * cannot be reassembled (https://github.com/oven-sh/bun/issues/44692).
16
+ *
17
+ * Bun's resolver cannot query TLSA records, so TLSA queries fail with
18
+ * `Unsupported`.
19
+ *
20
+ * @stability experimental
21
+ * @since 4.0.0
22
+ */
23
+ import * as NodeDns from "@effect/platform-node-shared/NodeDns";
24
+ import * as Config from "effect/Config";
25
+ import * as Effect from "effect/Effect";
26
+ import * as Layer from "effect/Layer";
27
+ import * as Dns from "effect/net/Dns";
28
+ /**
29
+ * Creates a Bun `Dns` service whose resolver lives as long as the scope.
30
+ *
31
+ * @stability experimental
32
+ * @category constructors
33
+ * @since 4.0.0
34
+ */
35
+ export const make = /*#__PURE__*/Effect.fnUntraced(function* (options) {
36
+ const resolve = yield* NodeDns.resolver(options);
37
+ return Dns.make({
38
+ lookup: (host, family) => Effect.tryPromise({
39
+ try: () => Bun.dns.lookup(host, {
40
+ family: NodeDns.toFamily(family),
41
+ backend: "system"
42
+ }),
43
+ catch: cause => NodeDns.dnsErrorFromCause(cause, "lookup", host)
44
+ }).pipe(Effect.map(NodeDns.addressesFromLookup)),
45
+ resolve
46
+ });
47
+ });
48
+ /**
49
+ * Layer that provides the Bun `Dns` service using the system resolver
50
+ * configuration.
51
+ *
52
+ * @stability experimental
53
+ * @category layers
54
+ * @since 4.0.0
55
+ */
56
+ export const layer = /*#__PURE__*/Layer.effect(Dns.Dns, /*#__PURE__*/Effect.orDie(/*#__PURE__*/make()));
57
+ /**
58
+ * Creates a layer that provides the Bun `Dns` service with options read
59
+ * from configuration.
60
+ *
61
+ * @stability experimental
62
+ * @category layers
63
+ * @since 4.0.0
64
+ */
65
+ export const layerConfig = options => Layer.effect(Dns.Dns, Effect.flatMap(Config.unwrap(options), make));
66
+ //# sourceMappingURL=BunDns.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BunDns.js","names":[],"sources":["../src/BunDns.ts"],"sourcesContent":[null],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;AAsBA,OAAO,KAAK,OAAO,MAAM,sCAAsC;AAC/D,OAAO,KAAK,MAAM,MAAM,eAAe;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe;AACvC,OAAO,KAAK,KAAK,MAAM,cAAc;AACrC,OAAO,KAAK,GAAG,MAAM,gBAAgB;AAerC;;;;;;;AAOA,OAAO,MAAM,IAAI,gBAAG,MAAM,CAAC,UAAU,CAAC,WAAU,OAAyB;EACvE,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;EAChD,OAAO,GAAG,CAAC,IAAI,CAAC;IACd,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KACnB,MAAM,CAAC,UAAU,CAAC;MAChB,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE;MAAQ,CAAE,CAAC;MACxF,KAAK,EAAG,KAAK,IAAK,OAAO,CAAC,iBAAiB,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI;KAClE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAClD;GACD,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;;;;AAQA,OAAO,MAAM,KAAK,gBAAyB,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,eAAE,MAAM,CAAC,KAAK,cAAC,IAAI,EAAE,CAAC,CAAC;AAEtF;;;;;;;;AAQA,OAAO,MAAM,WAAW,GACtB,OAAqC,IAErC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC","ignoreList":[]}