@livestore/utils 0.3.0-dev.8 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (150) hide show
  1. package/dist/.tsbuildinfo.json +1 -1
  2. package/dist/Deferred.d.ts.map +1 -1
  3. package/dist/base64.d.ts.map +1 -1
  4. package/dist/bun/mod.d.ts +5 -0
  5. package/dist/bun/mod.d.ts.map +1 -0
  6. package/dist/bun/mod.js +10 -0
  7. package/dist/bun/mod.js.map +1 -0
  8. package/dist/cuid/cuid.browser.d.ts.map +1 -1
  9. package/dist/cuid/cuid.node.d.ts.map +1 -1
  10. package/dist/effect/BucketQueue.d.ts +15 -2
  11. package/dist/effect/BucketQueue.d.ts.map +1 -1
  12. package/dist/effect/BucketQueue.js +24 -6
  13. package/dist/effect/BucketQueue.js.map +1 -1
  14. package/dist/effect/Effect.d.ts +4 -2
  15. package/dist/effect/Effect.d.ts.map +1 -1
  16. package/dist/effect/Effect.js +21 -18
  17. package/dist/effect/Effect.js.map +1 -1
  18. package/dist/effect/Logger.d.ts +2 -0
  19. package/dist/effect/Logger.d.ts.map +1 -1
  20. package/dist/effect/Logger.js +16 -1
  21. package/dist/effect/Logger.js.map +1 -1
  22. package/dist/effect/Scheduler.d.ts.map +1 -1
  23. package/dist/effect/Schema/debug-diff.d.ts.map +1 -1
  24. package/dist/effect/Schema/index.d.ts +3 -0
  25. package/dist/effect/Schema/index.d.ts.map +1 -1
  26. package/dist/effect/Schema/index.js +19 -0
  27. package/dist/effect/Schema/index.js.map +1 -1
  28. package/dist/effect/Schema/msgpack.d.ts +1 -1
  29. package/dist/effect/Schema/msgpack.d.ts.map +1 -1
  30. package/dist/effect/ServiceContext.d.ts.map +1 -1
  31. package/dist/effect/Stream.d.ts.map +1 -1
  32. package/dist/effect/Subscribable.d.ts +76 -0
  33. package/dist/effect/Subscribable.d.ts.map +1 -0
  34. package/dist/effect/Subscribable.js +80 -0
  35. package/dist/effect/Subscribable.js.map +1 -0
  36. package/dist/effect/TaskTracing.d.ts.map +1 -1
  37. package/dist/effect/{WebChannel.d.ts → WebChannel/WebChannel.d.ts} +39 -17
  38. package/dist/effect/WebChannel/WebChannel.d.ts.map +1 -0
  39. package/dist/effect/WebChannel/WebChannel.js +300 -0
  40. package/dist/effect/WebChannel/WebChannel.js.map +1 -0
  41. package/dist/effect/WebChannel/WebChannel.test.d.ts +2 -0
  42. package/dist/effect/WebChannel/WebChannel.test.d.ts.map +1 -0
  43. package/dist/effect/WebChannel/WebChannel.test.js +62 -0
  44. package/dist/effect/WebChannel/WebChannel.test.js.map +1 -0
  45. package/dist/effect/WebChannel/broadcastChannelWithAck.d.ts +5 -6
  46. package/dist/effect/WebChannel/broadcastChannelWithAck.d.ts.map +1 -1
  47. package/dist/effect/WebChannel/broadcastChannelWithAck.js +12 -9
  48. package/dist/effect/WebChannel/broadcastChannelWithAck.js.map +1 -1
  49. package/dist/effect/WebChannel/common.d.ts +29 -1
  50. package/dist/effect/WebChannel/common.d.ts.map +1 -1
  51. package/dist/effect/WebChannel/common.js +26 -1
  52. package/dist/effect/WebChannel/common.js.map +1 -1
  53. package/dist/effect/WebChannel/mod.d.ts +4 -0
  54. package/dist/effect/WebChannel/mod.d.ts.map +1 -0
  55. package/dist/effect/WebChannel/mod.js +4 -0
  56. package/dist/effect/WebChannel/mod.js.map +1 -0
  57. package/dist/effect/WebLock.d.ts.map +1 -1
  58. package/dist/effect/WebSocket.d.ts +3 -2
  59. package/dist/effect/WebSocket.d.ts.map +1 -1
  60. package/dist/effect/WebSocket.js +45 -19
  61. package/dist/effect/WebSocket.js.map +1 -1
  62. package/dist/effect/WebSocket.test.d.ts +2 -0
  63. package/dist/effect/WebSocket.test.d.ts.map +1 -0
  64. package/dist/effect/WebSocket.test.js +11 -0
  65. package/dist/effect/WebSocket.test.js.map +1 -0
  66. package/dist/effect/index.d.ts +6 -3
  67. package/dist/effect/index.d.ts.map +1 -1
  68. package/dist/effect/index.js +9 -5
  69. package/dist/effect/index.js.map +1 -1
  70. package/dist/env.d.ts +4 -1
  71. package/dist/env.d.ts.map +1 -1
  72. package/dist/env.js +7 -12
  73. package/dist/env.js.map +1 -1
  74. package/dist/fast-deep-equal.d.ts.map +1 -1
  75. package/dist/guards.d.ts.map +1 -1
  76. package/dist/index.d.ts +6 -5
  77. package/dist/index.d.ts.map +1 -1
  78. package/dist/index.js +0 -8
  79. package/dist/index.js.map +1 -1
  80. package/dist/misc.d.ts +3 -0
  81. package/dist/misc.d.ts.map +1 -1
  82. package/dist/misc.js +23 -0
  83. package/dist/misc.js.map +1 -1
  84. package/dist/node/ChildProcessRunner/ChildProcessRunner.d.ts +0 -1
  85. package/dist/node/ChildProcessRunner/ChildProcessRunner.d.ts.map +1 -1
  86. package/dist/node/ChildProcessRunner/ChildProcessRunner.js +21 -11
  87. package/dist/node/ChildProcessRunner/ChildProcessRunner.js.map +1 -1
  88. package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/ChildProcessRunner.test.d.ts +2 -0
  89. package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/ChildProcessRunner.test.d.ts.map +1 -0
  90. package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/ChildProcessRunner.test.js +39 -0
  91. package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/ChildProcessRunner.test.js.map +1 -0
  92. package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/schema.d.ts +75 -0
  93. package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/schema.d.ts.map +1 -0
  94. package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/schema.js +62 -0
  95. package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/schema.js.map +1 -0
  96. package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/serializedWorker.d.ts +2 -0
  97. package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/serializedWorker.d.ts.map +1 -0
  98. package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/serializedWorker.js +42 -0
  99. package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/serializedWorker.js.map +1 -0
  100. package/dist/node/ChildProcessRunner/ChildProcessWorker.d.ts +1 -4
  101. package/dist/node/ChildProcessRunner/ChildProcessWorker.d.ts.map +1 -1
  102. package/dist/node/ChildProcessRunner/ChildProcessWorker.js +1 -4
  103. package/dist/node/ChildProcessRunner/ChildProcessWorker.js.map +1 -1
  104. package/dist/node/mod.d.ts +3 -16
  105. package/dist/node/mod.d.ts.map +1 -1
  106. package/dist/node/mod.js +24 -75
  107. package/dist/node/mod.js.map +1 -1
  108. package/dist/object/index.d.ts.map +1 -1
  109. package/dist/object/omit.d.ts.map +1 -1
  110. package/dist/object/pick.d.ts.map +1 -1
  111. package/dist/promise.d.ts.map +1 -1
  112. package/dist/set.d.ts.map +1 -1
  113. package/dist/string.d.ts.map +1 -1
  114. package/dist/time.d.ts.map +1 -1
  115. package/package.json +51 -43
  116. package/src/bun/mod.ts +13 -0
  117. package/src/effect/BucketQueue.ts +33 -6
  118. package/src/effect/Effect.ts +33 -20
  119. package/src/effect/Logger.ts +23 -1
  120. package/src/effect/Schema/index.ts +27 -0
  121. package/src/effect/Subscribable.ts +155 -0
  122. package/src/effect/WebChannel/WebChannel.test.ts +106 -0
  123. package/src/effect/WebChannel/WebChannel.ts +502 -0
  124. package/src/effect/WebChannel/broadcastChannelWithAck.ts +86 -83
  125. package/src/effect/WebChannel/common.ts +61 -2
  126. package/src/effect/WebChannel/mod.ts +3 -0
  127. package/src/effect/WebSocket.test.ts +15 -0
  128. package/src/effect/WebSocket.ts +75 -36
  129. package/src/effect/index.ts +33 -2
  130. package/src/env.ts +9 -13
  131. package/src/index.ts +6 -12
  132. package/src/misc.ts +31 -0
  133. package/src/node/ChildProcessRunner/ChildProcessRunner.ts +40 -29
  134. package/src/node/ChildProcessRunner/ChildProcessRunnerTest/ChildProcessRunner.test.ts +52 -0
  135. package/src/node/ChildProcessRunner/ChildProcessRunnerTest/schema.ts +65 -0
  136. package/src/node/ChildProcessRunner/ChildProcessRunnerTest/serializedWorker.ts +53 -0
  137. package/src/node/ChildProcessRunner/ChildProcessWorker.ts +3 -6
  138. package/src/node/mod.ts +30 -103
  139. package/dist/effect/WebChannel.d.ts.map +0 -1
  140. package/dist/effect/WebChannel.js +0 -175
  141. package/dist/effect/WebChannel.js.map +0 -1
  142. package/dist/nanoid/index.browser.d.ts +0 -2
  143. package/dist/nanoid/index.browser.d.ts.map +0 -1
  144. package/dist/nanoid/index.browser.js +0 -3
  145. package/dist/nanoid/index.browser.js.map +0 -1
  146. package/src/effect/WebChannel.ts +0 -305
  147. package/src/nanoid/index.browser.ts +0 -2
  148. package/tmp/effect-deferred-repro.ts +0 -29
  149. package/tmp/effect-semaphore-repro.ts +0 -93
  150. package/tsconfig.json +0 -10
package/dist/node/mod.js CHANGED
@@ -1,90 +1,39 @@
1
- import * as OtelNodeSdk from '@effect/opentelemetry/NodeSdk';
2
- import { OTLPMetricExporter } from '@opentelemetry/exporter-metrics-otlp-http';
3
- import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
4
- import { PeriodicExportingMetricReader } from '@opentelemetry/sdk-metrics';
5
- import { BatchSpanProcessor } from '@opentelemetry/sdk-trace-base';
6
- import { Config, Effect, Layer } from 'effect';
7
- import { tapCauseLogPretty } from '../effect/Effect.js';
8
- import { OtelTracer } from '../effect/index.js';
1
+ import * as http from 'node:http';
2
+ import { Effect, Layer } from 'effect';
3
+ import { OtelTracer, UnknownError } from '../effect/index.js';
9
4
  import { makeNoopTracer } from '../NoopTracer.js';
10
- // import { tapCauseLogPretty } from '../effect/Effect.js'
11
5
  export * as Cli from '@effect/cli';
12
- export * as PlatformBun from '@effect/platform-bun';
13
6
  export * as PlatformNode from '@effect/platform-node';
14
- export * as SocketServer from '@effect/experimental/SocketServer';
15
- export * as OtelResource from '@effect/opentelemetry/Resource';
16
- export { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
17
- export { OTLPMetricExporter } from '@opentelemetry/exporter-metrics-otlp-http';
18
- export * as OtelNodeSdk from '@effect/opentelemetry/NodeSdk';
7
+ export * as SocketServer from '@effect/platform/SocketServer';
19
8
  export * as ChildProcessRunner from './ChildProcessRunner/ChildProcessRunner.js';
20
9
  export * as ChildProcessWorker from './ChildProcessRunner/ChildProcessWorker.js';
21
10
  // Enable debug logging for OpenTelemetry
22
11
  // otel.diag.setLogger(new otel.DiagConsoleLogger(), otel.DiagLogLevel.ERROR)
23
12
  // export const OtelLiveHttp = (args: any): Layer.Layer<never> => Layer.empty
24
- export const OtelLiveDummy = Layer.suspend(() => {
25
- const OtelTracerLive = Layer.succeed(OtelTracer.OtelTracer, makeNoopTracer());
26
- const TracingLive = Layer.unwrapEffect(Effect.map(OtelTracer.make, Layer.setTracer)).pipe(Layer.provideMerge(OtelTracerLive));
27
- return TracingLive;
28
- });
29
- export const OtelLiveHttp = ({ serviceName, rootSpanName, skipLogUrl, } = {}) => Effect.gen(function* () {
30
- const config = yield* Config.all({
31
- exporterUrlTracing: Config.string('OTEL_EXPORTER_OTLP_TRACES_ENDPOINT'),
32
- exporterUrlMracing: Config.string('OTEL_EXPORTER_OTLP_METRICS_ENDPOINT'),
33
- serviceName: serviceName
34
- ? Config.succeed(serviceName)
35
- : Config.string('OTEL_SERVICE_NAME').pipe(Config.withDefault('overtone-node-utils-default-service')),
36
- rootSpanName: rootSpanName
37
- ? Config.succeed(rootSpanName)
38
- : Config.string('OTEL_ROOT_SPAN_NAME').pipe(Config.withDefault('RootSpan')),
39
- }).pipe(tapCauseLogPretty, Effect.orDie);
40
- const resource = { serviceName: config.serviceName };
41
- // METRICS
42
- const metricExporter = new OTLPMetricExporter({ url: config.exporterUrlMracing });
43
- const metricReader = new PeriodicExportingMetricReader({
44
- exporter: metricExporter,
45
- exportIntervalMillis: 1000,
46
- });
47
- // TRACING
48
- const OtelLive = OtelNodeSdk.layer(() => ({
49
- resource,
50
- metricReader,
51
- spanProcessor: new BatchSpanProcessor(new OTLPTraceExporter({ url: config.exporterUrlTracing, headers: {} })),
52
- }));
53
- const RootSpanLive = Layer.span(config.rootSpanName, {
54
- attributes: { config },
55
- onEnd: skipLogUrl ? undefined : (span) => logTraceUiUrlForSpan()(span.span),
13
+ export const getFreePort = Effect.async((cb, signal) => {
14
+ const server = http.createServer();
15
+ signal.addEventListener('abort', () => {
16
+ server.close();
56
17
  });
57
- return RootSpanLive.pipe(Layer.provideMerge(OtelLive));
58
- }).pipe(Layer.unwrapEffect);
59
- export const logTraceUiUrlForSpan = (printMsg) => (span) => getTracingBackendUrl(span).pipe(Effect.tap((url) => {
60
- if (url === undefined) {
61
- console.warn('No tracing backend url found');
62
- }
63
- else {
64
- if (printMsg) {
65
- console.log(printMsg(url));
18
+ // Listen on port 0 to get an available port
19
+ server.listen(0, () => {
20
+ const address = server.address();
21
+ if (address && typeof address === 'object') {
22
+ const port = address.port;
23
+ server.close(() => cb(Effect.succeed(port)));
66
24
  }
67
25
  else {
68
- console.log(`Trace URL: ${url}`);
26
+ server.close(() => cb(Effect.fail(new UnknownError({ cause: 'Failed to get a free port' }))));
69
27
  }
70
- }
71
- }));
72
- export const getTracingBackendUrl = (span) => Effect.gen(function* () {
73
- const endpoint = yield* Config.string('TRACING_UI_ENDPOINT').pipe(Config.option, Effect.orDie);
74
- if (endpoint._tag === 'None')
75
- return;
76
- const traceId = span.spanContext().traceId;
77
- // Grafana + Tempo
78
- const grafanaEndpoint = endpoint.value;
79
- const searchParams = new URLSearchParams({
80
- orgId: '1',
81
- left: JSON.stringify({
82
- datasource: 'tempo',
83
- queries: [{ query: traceId, queryType: 'traceql', refId: 'A' }],
84
- range: { from: 'now-1h', to: 'now' },
85
- }),
86
28
  });
87
- // TODO make dynamic via env var
88
- return `${grafanaEndpoint}/explore?${searchParams.toString()}`;
29
+ // Error handling in case the server encounters an error
30
+ server.on('error', (err) => {
31
+ server.close(() => cb(Effect.fail(new UnknownError({ cause: err }))));
32
+ });
33
+ });
34
+ export const OtelLiveDummy = Layer.suspend(() => {
35
+ const OtelTracerLive = Layer.succeed(OtelTracer.OtelTracer, makeNoopTracer());
36
+ const TracingLive = Layer.unwrapEffect(Effect.map(OtelTracer.make, Layer.setTracer)).pipe(Layer.provideMerge(OtelTracerLive));
37
+ return TracingLive;
89
38
  });
90
39
  //# sourceMappingURL=mod.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mod.js","sourceRoot":"","sources":["../../src/node/mod.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mod.js","sourceRoot":"","sources":["../../src/node/mod.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AAEjC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAEtC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEjD,OAAO,KAAK,GAAG,MAAM,aAAa,CAAA;AAClC,OAAO,KAAK,YAAY,MAAM,uBAAuB,CAAA;AACrD,OAAO,KAAK,YAAY,MAAM,+BAA+B,CAAA;AAE7D,OAAO,KAAK,kBAAkB,MAAM,4CAA4C,CAAA;AAChF,OAAO,KAAK,kBAAkB,MAAM,4CAA4C,CAAA;AAEhF,yCAAyC;AACzC,6EAA6E;AAE7E,6EAA6E;AAE7E,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAuB,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE;IAC3E,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE,CAAA;IAElC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;QACpC,MAAM,CAAC,KAAK,EAAE,CAAA;IAChB,CAAC,CAAC,CAAA;IAEF,4CAA4C;IAC5C,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE;QACpB,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,CAAA;QAEhC,IAAI,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC3C,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAA;YACzB,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC9C,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,EAAE,KAAK,EAAE,2BAA2B,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;QAC/F,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,wDAAwD;IACxD,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;QACzB,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;IACvE,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,aAAa,GAAuC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;IAClF,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,EAAE,cAAc,EAAE,CAAC,CAAA;IAE7E,MAAM,WAAW,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CACvF,KAAK,CAAC,YAAY,CAAC,cAAc,CAAC,CACU,CAAA;IAE9C,OAAO,WAAW,CAAA;AACpB,CAAC,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/object/index.ts"],"names":[],"mappings":"AAEA,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA;AAEzB,KAAK,aAAa,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;AAE3F,eAAO,MAAM,eAAe,GAAI,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,OAChE,IAAI,YACC,CAAC,GAAG,EAAE,MAAM,IAAI,EAAE,GAAG,EAAE,aAAa,CAAC,IAAI,CAAC,KAAK,KAAK,KAC7D,GAAG,CAAC,IAAI,MAAM,IAAI,GAAG,KAAK,GAG5B,CAAA;AAED,MAAM,MAAM,OAAO,CAAC,CAAC,IAAI;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;CAAE,CAAC,MAAM,CAAC,CAAC,EAAE,CAAA;AAEjE,eAAO,MAAM,aAAa,GAAI,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,KAAG,OAAO,CAAC,CAAC,CAAsC,CAAA;AAErH,eAAO,MAAM,mBAAmB,GAAI,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,IAAI,KAAG,GAAG,CAAC,IAAI,MAAM,IAAI,GAAG,CAAC,GAI9F,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/object/index.ts"],"names":[],"mappings":"AAEA,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA;AAEzB,KAAK,aAAa,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;AAE3F,eAAO,MAAM,eAAe,GAAI,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,EACrE,KAAK,IAAI,EACT,UAAU,CAAC,GAAG,EAAE,MAAM,IAAI,EAAE,GAAG,EAAE,aAAa,CAAC,IAAI,CAAC,KAAK,KAAK,KAC7D,GAAG,CAAC,IAAI,MAAM,IAAI,GAAG,KAAK,GAG5B,CAAA;AAED,MAAM,MAAM,OAAO,CAAC,CAAC,IAAI;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;CAAE,CAAC,MAAM,CAAC,CAAC,EAAE,CAAA;AAEjE,eAAO,MAAM,aAAa,GAAI,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC,KAAG,OAAO,CAAC,CAAC,CAAsC,CAAA;AAErH,eAAO,MAAM,mBAAmB,GAAI,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,IAAI,KAAG,GAAG,CAAC,IAAI,MAAM,IAAI,GAAG,CAAC,GAI9F,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"omit.d.ts","sourceRoot":"","sources":["../../src/object/omit.ts"],"names":[],"mappings":"AAKA,uEAAuE;AACvE,eAAO,MAAM,IAAI,GAAI,GAAG,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,IAAI,SAAS,MAAM,GAAG,OACrE,GAAG,QACF,IAAI,EAAE,KACX,IAAI,CAAC,GAAG,EAAE,IAAI,CAOhB,CAAA"}
1
+ {"version":3,"file":"omit.d.ts","sourceRoot":"","sources":["../../src/object/omit.ts"],"names":[],"mappings":"AAKA,uEAAuE;AACvE,eAAO,MAAM,IAAI,GAAI,GAAG,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,IAAI,SAAS,MAAM,GAAG,EAC1E,KAAK,GAAG,EACR,MAAM,IAAI,EAAE,KACX,IAAI,CAAC,GAAG,EAAE,IAAI,CAOhB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"pick.d.ts","sourceRoot":"","sources":["../../src/object/pick.ts"],"names":[],"mappings":"AAAA,KAAK,gBAAgB,CAAC,CAAC,IAAI,WAAW,CAAC;KAAG,CAAC,IAAI,MAAM,CAAC,IAAI,SAAS,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,CAAC,CAAA;AACxG,KAAK,WAAW,CAAC,CAAC,IAAI;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS;CAAE,CAAA;AAC1D,KAAK,YAAY,CAAC,CAAC,IAAI;KAAG,CAAC,IAAI,MAAM,CAAC,IAAI,SAAS,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,CAAA;AACrF,KAAK,WAAW,CAAC,CAAC,IAAI,gBAAgB,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAA;AAE3D,eAAO,MAAM,IAAI,GAAI,GAAG,EAAE,IAAI,SAAS,MAAM,GAAG,OAAO,GAAG,QAAQ,IAAI,EAAE,KAAG,WAAW,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,GAAE,CAK7G,CAAA;AAED,eAAO,MAAM,aAAa,GAAI,GAAG,EAAE,IAAI,SAAS,MAAM,GAAG,EAAE,KAAK,OACzD,GAAG,QACF,IAAI,EAAE,aACD,KAAK,KACf,WAAW,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAE,CAAC,GAAG,KAUtD,CAAA"}
1
+ {"version":3,"file":"pick.d.ts","sourceRoot":"","sources":["../../src/object/pick.ts"],"names":[],"mappings":"AAAA,KAAK,gBAAgB,CAAC,CAAC,IAAI,WAAW,CAAC;KAAG,CAAC,IAAI,MAAM,CAAC,IAAI,SAAS,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,CAAC,CAAA;AACxG,KAAK,WAAW,CAAC,CAAC,IAAI;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS;CAAE,CAAA;AAC1D,KAAK,YAAY,CAAC,CAAC,IAAI;KAAG,CAAC,IAAI,MAAM,CAAC,IAAI,SAAS,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,CAAA;AACrF,KAAK,WAAW,CAAC,CAAC,IAAI,gBAAgB,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAA;AAE3D,eAAO,MAAM,IAAI,GAAI,GAAG,EAAE,IAAI,SAAS,MAAM,GAAG,EAAE,KAAK,GAAG,EAAE,MAAM,IAAI,EAAE,KAAG,WAAW,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,GAAE,CAK7G,CAAA;AAED,eAAO,MAAM,aAAa,GAAI,GAAG,EAAE,IAAI,SAAS,MAAM,GAAG,EAAE,KAAK,EAC9D,KAAK,GAAG,EACR,MAAM,IAAI,EAAE,EACZ,WAAW,KAAK,KACf,WAAW,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAE,CAAC,GAAG,KAUtD,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"promise.d.ts","sourceRoot":"","sources":["../src/promise.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,eAAO,MAAM,UAAU,GAAI,CAAC,EAAE,GAAG,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,6CACpE,CAAA;AAE3B,eAAO,MAAM,cAAc,GAAU,CAAC,EAAE,GAAG,QACnC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,OAClB,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,KACjD,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAG7B,CAAA;AAED,eAAO,MAAM,gBAAgB,GAAU,CAAC,EAAE,GAAG,OACtC,CAAC,EAAE,YACE,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,UAC/C,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,MAAM,KACxC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAI7B,CAAA;AAED,eAAO,MAAM,cAAc,GAAU,CAAC,EAAE,GAAG,OACpC,CAAC,EAAE,OACH,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,CAAC,aACjC,MAAM,KAChB,OAAO,CAAC,GAAG,EAAE,CAgBf,CAAA"}
1
+ {"version":3,"file":"promise.d.ts","sourceRoot":"","sources":["../src/promise.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,eAAO,MAAM,UAAU,GAAI,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,6CACpE,CAAA;AAE3B,eAAO,MAAM,cAAc,GAAU,CAAC,EAAE,GAAG,EACzC,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EACvB,KAAK,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,KACjD,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAG7B,CAAA;AAED,eAAO,MAAM,gBAAgB,GAAU,CAAC,EAAE,GAAG,EAC3C,KAAK,CAAC,EAAE,EACR,UAAU,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,EACvD,QAAQ,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,MAAM,KACxC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAI7B,CAAA;AAED,eAAO,MAAM,cAAc,GAAU,CAAC,EAAE,GAAG,EACzC,KAAK,CAAC,EAAE,EACR,KAAK,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,CAAC,EAC5C,WAAW,MAAM,KAChB,OAAO,CAAC,GAAG,EAAE,CAgBf,CAAA"}
package/dist/set.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"set.d.ts","sourceRoot":"","sources":["../src/set.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,GAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,WASjD,CAAA"}
1
+ {"version":3,"file":"set.d.ts","sourceRoot":"","sources":["../src/set.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,GAAI,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,WASjD,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"string.d.ts","sourceRoot":"","sources":["../src/string.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,QAAS,MAAM,WAA+C,CAAA;AAC7F,eAAO,MAAM,kBAAkB,QAAS,MAAM,WAA+C,CAAA;AAE7F,qEAAqE;AACrE,eAAO,MAAM,MAAM,QAAS,MAAM,KAAK,MAAM,oBAAe,MAI7C,CAAA"}
1
+ {"version":3,"file":"string.d.ts","sourceRoot":"","sources":["../src/string.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,GAAI,KAAK,MAAM,WAA+C,CAAA;AAC7F,eAAO,MAAM,kBAAkB,GAAI,KAAK,MAAM,WAA+C,CAAA;AAE7F,qEAAqE;AACrE,eAAO,MAAM,MAAM,GAAI,KAAK,MAAM,EAAE,GAAG,MAAM,EAAE,aAAU,KAAG,MAI7C,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"time.d.ts","sourceRoot":"","sources":["../src/time.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,QAAY,CAAA;AAEnC,eAAO,MAAM,IAAI;;;;;;;CAOhB,CAAA;AAED,oEAAoE;AACpE,eAAO,MAAM,cAAc,OAAQ,MAAM,WAYxC,CAAA"}
1
+ {"version":3,"file":"time.d.ts","sourceRoot":"","sources":["../src/time.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,QAAY,CAAA;AAEnC,eAAO,MAAM,IAAI;;;;;;;CAOhB,CAAA;AAED,oEAAoE;AACpE,eAAO,MAAM,cAAc,GAAI,IAAI,MAAM,WAYxC,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@livestore/utils",
3
- "version": "0.3.0-dev.8",
3
+ "version": "0.3.0",
4
4
  "type": "module",
5
5
  "sideEffects": [
6
6
  "./dist/global.js"
@@ -18,7 +18,6 @@
18
18
  },
19
19
  "./nanoid": {
20
20
  "types": "./dist/nanoid/index.d.ts",
21
- "react-native": "./dist/nanoid/index.browser.js",
22
21
  "default": "./dist/nanoid/index.js"
23
22
  },
24
23
  "./effect": {
@@ -29,13 +28,9 @@
29
28
  "types": "./dist/node/mod.d.ts",
30
29
  "default": "./dist/node/mod.js"
31
30
  },
32
- "./node-vitest": {
33
- "types": "./dist/node-vitest/mod.d.ts",
34
- "default": "./dist/node-vitest/mod.js"
35
- },
36
- "./node-vitest-polyfill": {
37
- "types": "./dist/node-vitest/polyfill.d.ts",
38
- "default": "./dist/node-vitest/polyfill.js"
31
+ "./bun": {
32
+ "types": "./dist/bun/mod.d.ts",
33
+ "default": "./dist/bun/mod.js"
39
34
  }
40
35
  },
41
36
  "types": "./dist/index.d.ts",
@@ -53,51 +48,64 @@
53
48
  "./node": [
54
49
  "./dist/node/mod.d.ts"
55
50
  ],
56
- "./node-vitest": [
57
- "./dist/node-vitest/mod.d.ts"
58
- ],
59
- "./node-vitest-polyfill": [
60
- "./dist/node-vitest/polyfill.d.ts"
51
+ "./bun": [
52
+ "./dist/bun/mod.d.ts"
61
53
  ]
62
54
  }
63
55
  },
64
56
  "dependencies": {
57
+ "@standard-schema/spec": "1.0.0",
65
58
  "msgpackr": "1.11.2",
66
- "nanoid": "5.0.9",
67
- "pretty-bytes": "6.1.1",
68
- "@livestore/db-schema": "0.3.0-dev.8"
59
+ "nanoid": "5.1.3",
60
+ "pretty-bytes": "6.1.1"
69
61
  },
70
62
  "devDependencies": {
71
- "@effect/cli": "^0.54.1",
72
- "@effect/experimental": "^0.39.1",
73
- "@effect/opentelemetry": "^0.42.1",
74
- "@effect/platform": "^0.75.1",
75
- "@effect/platform-browser": "^0.54.1",
76
- "@effect/platform-bun": "^0.55.1",
77
- "@effect/platform-node": "^0.71.1",
78
- "@effect/vitest": "^0.17.3",
63
+ "@effect/cli": "^0.61.4",
64
+ "@effect/cluster": "^0.34.1",
65
+ "@effect/experimental": "^0.46.4",
66
+ "@effect/opentelemetry": "^0.48.4",
67
+ "@effect/platform": "^0.82.4",
68
+ "@effect/platform-browser": "^0.62.4",
69
+ "@effect/platform-bun": "^0.65.1",
70
+ "@effect/platform-node": "^0.81.1",
71
+ "@effect/printer": "^0.43.2",
72
+ "@effect/printer-ansi": "^0.43.2",
73
+ "@effect/rpc": "^0.59.5",
74
+ "@effect/sql": "^0.35.4",
75
+ "@effect/typeclass": "^0.34.2",
76
+ "@effect/vitest": "^0.22.2",
79
77
  "@opentelemetry/api": "^1.9.0",
80
- "@opentelemetry/exporter-metrics-otlp-http": "^0.57.0",
81
- "@opentelemetry/exporter-trace-otlp-http": "^0.57.1",
82
- "@opentelemetry/sdk-metrics": "^1.30.0",
83
- "@opentelemetry/sdk-trace-base": "^1.30.1",
84
- "@opentelemetry/sdk-trace-node": "^1.30.0",
85
- "@types/node": "^22.10.5",
86
- "@types/web": "^0.0.200",
87
- "effect": "^3.12.7",
88
- "vitest": "^2.1.4"
78
+ "@opentelemetry/resources": "^2.0.0",
79
+ "@types/bun": "^1.2.4",
80
+ "@types/jsdom": "^21.1.7",
81
+ "@types/node": "^22.15.17",
82
+ "@types/web": "^0.0.203",
83
+ "effect": "^3.15.2",
84
+ "jsdom": "^26.0.0",
85
+ "vitest": "^3.1.2"
89
86
  },
87
+ "files": [
88
+ "package.json",
89
+ "src",
90
+ "dist"
91
+ ],
90
92
  "peerDependencies": {
91
- "@effect/cli": "~0.54.1",
92
- "@effect/experimental": "~0.39.1",
93
- "@effect/opentelemetry": "~0.42.1",
94
- "@effect/platform": "~0.75.1",
95
- "@effect/platform-browser": "~0.54.1",
96
- "@effect/platform-bun": "~0.55.1",
97
- "@effect/platform-node": "~0.71.1",
98
- "@effect/vitest": "~0.17.3",
93
+ "@effect/cli": "~0.61.4",
94
+ "@effect/cluster": "~0.34.1",
95
+ "@effect/experimental": "~0.46.4",
96
+ "@effect/opentelemetry": "~0.48.4",
97
+ "@effect/platform": "~0.82.4",
98
+ "@effect/platform-browser": "~0.62.4",
99
+ "@effect/platform-bun": "~0.65.1",
100
+ "@effect/platform-node": "~0.81.1",
101
+ "@effect/printer": "~0.43.2",
102
+ "@effect/printer-ansi": "~0.43.2",
103
+ "@effect/rpc": "~0.59.5",
104
+ "@effect/sql": "~0.35.4",
105
+ "@effect/typeclass": "~0.34.2",
99
106
  "@opentelemetry/api": "~1.9.0",
100
- "effect": "~3.12.7"
107
+ "@opentelemetry/resources": "~2.0.0",
108
+ "effect": "~3.15.2"
101
109
  },
102
110
  "publishConfig": {
103
111
  "access": "public"
package/src/bun/mod.ts ADDED
@@ -0,0 +1,13 @@
1
+ import { $ } from 'bun'
2
+ import { Effect } from 'effect'
3
+
4
+ export * as PlatformBun from '@effect/platform-bun'
5
+
6
+ // TODO remove in favour of other `cmd` implementation
7
+ export const cmd = (_: string) =>
8
+ Effect.promise(() => {
9
+ console.log(`Running command: ${_}`)
10
+ return $`${{ raw: _ }}`
11
+ })
12
+
13
+ export { $ } from 'bun'
@@ -1,4 +1,4 @@
1
- import { Array, STM, TRef } from 'effect'
1
+ import { Array, Effect, STM, TRef } from 'effect'
2
2
 
3
3
  export type BucketQueue<A> = TRef.TRef<A[]>
4
4
 
@@ -7,16 +7,43 @@ export const make = <A>(): STM.STM<BucketQueue<A>> => TRef.make<A[]>([])
7
7
  export const offerAll = <A>(self: BucketQueue<A>, elements: ReadonlyArray<A>) =>
8
8
  TRef.update(self, (bucket) => Array.appendAll(bucket, elements))
9
9
 
10
+ export const replace = <A>(self: BucketQueue<A>, elements: ReadonlyArray<A>) => TRef.set(self, elements as A[])
11
+
10
12
  export const clear = <A>(self: BucketQueue<A>) => TRef.set(self, [])
11
13
 
12
- export const takeBetween = <A>(self: BucketQueue<A>, min: number, max: number) =>
14
+ export const takeBetween = <A>(
15
+ bucket: BucketQueue<A>,
16
+ min: number,
17
+ max: number,
18
+ ): STM.STM<ReadonlyArray<A>, never, never> =>
13
19
  STM.gen(function* () {
14
- const bucket = yield* TRef.get(self)
15
- if (bucket.length < min) {
20
+ const bucketValue = yield* TRef.get(bucket)
21
+ if (bucketValue.length < min) {
16
22
  return yield* STM.retry
17
23
  } else {
18
- const elements = bucket.splice(0, Math.min(max, bucket.length))
19
- yield* TRef.set(self, bucket)
24
+ const elements = bucketValue.splice(0, Math.min(max, bucketValue.length))
25
+ yield* TRef.set(bucket, bucketValue)
20
26
  return elements
21
27
  }
22
28
  })
29
+
30
+ export const peekAll = <A>(bucket: BucketQueue<A>) => TRef.get(bucket)
31
+
32
+ /** Returns the elements up to the first element that matches the predicate, the rest is left in the queue
33
+ *
34
+ * @example
35
+ * ```ts
36
+ * const [elements, rest] = yield* BucketQueue.takeSplitWhere(bucket, (a) => a > 3)
37
+ * assert.deepStrictEqual(elements, [1, 2, 3])
38
+ * assert.deepStrictEqual(rest, [4, 5, 6])
39
+ * ```
40
+ */
41
+ export const takeSplitWhere = <A>(bucket: BucketQueue<A>, predicate: (a: A) => boolean) =>
42
+ STM.gen(function* () {
43
+ const bucketValue = yield* TRef.get(bucket)
44
+ const [elements, rest] = Array.splitWhere(bucketValue, predicate)
45
+ yield* TRef.set(bucket, rest)
46
+ return elements
47
+ })
48
+
49
+ export const size = <A>(bucket: BucketQueue<A>) => TRef.get(bucket).pipe(Effect.map((_) => _.length))
@@ -1,11 +1,11 @@
1
1
  import * as OtelTracer from '@effect/opentelemetry/Tracer'
2
- import type { Context, Duration, Scope, Stream } from 'effect'
3
- import { Cause, Deferred, Effect, Fiber, FiberRef, HashSet, Logger, pipe } from 'effect'
2
+ import type { Context, Duration, Stream } from 'effect'
3
+ import { Cause, Deferred, Effect, Fiber, FiberRef, HashSet, Logger, pipe, Scope } from 'effect'
4
4
  import type { UnknownException } from 'effect/Cause'
5
5
  import { log } from 'effect/Console'
6
6
  import type { LazyArg } from 'effect/Function'
7
7
 
8
- import { isNonEmptyString, isPromise } from '../index.js'
8
+ import { isPromise } from '../index.js'
9
9
  import { UnknownError } from './Error.js'
10
10
 
11
11
  export * from 'effect/Effect'
@@ -25,6 +25,18 @@ export * from 'effect/Effect'
25
25
  // console.error(message, ...rest)
26
26
  // })
27
27
 
28
+ /** Same as `Effect.scopeWith` but with a `CloseableScope` instead of a `Scope`. */
29
+ export const scopeWithCloseable = <R, E, A>(
30
+ fn: (scope: Scope.CloseableScope) => Effect.Effect<A, E, R | Scope.Scope>,
31
+ ): Effect.Effect<A, E, R | Scope.Scope> =>
32
+ Effect.gen(function* () {
33
+ // const parentScope = yield* Scope.Scope
34
+ // const scope = yield* Scope.fork(parentScope, ExecutionStrategy.sequential)
35
+ const scope = yield* Scope.make()
36
+ yield* Effect.addFinalizer((exit) => Scope.close(scope, exit))
37
+ return yield* fn(scope).pipe(Scope.extend(scope))
38
+ })
39
+
28
40
  export const tryAll = <Res>(
29
41
  fn: () => Res,
30
42
  ): Res extends Effect.Effect<infer A, infer E, never>
@@ -42,17 +54,6 @@ export const tryAll = <Res>(
42
54
  ),
43
55
  ) as any
44
56
 
45
- const getThreadName = () => {
46
- // @ts-expect-error TODO fix types
47
- const globalName = globalThis.name
48
- return isNonEmptyString(globalName)
49
- ? globalName
50
- : // eslint-disable-next-line unicorn/prefer-global-this
51
- typeof window === 'object'
52
- ? 'Main Thread'
53
- : 'unknown-thread'
54
- }
55
-
56
57
  export const acquireReleaseLog = (label: string) =>
57
58
  Effect.acquireRelease(Effect.log(`${label} acquire`), (_, ex) => Effect.log(`${label} release`, ex))
58
59
 
@@ -76,9 +77,8 @@ export const tapCauseLogPretty = <R, E, A>(eff: Effect.Effect<A, E, R>): Effect.
76
77
  Effect.catchTag('NoSuchElementException', (_) => Effect.succeed(undefined)),
77
78
  )
78
79
 
79
- const threadName = getThreadName()
80
80
  const firstErrLine = cause.toString().split('\n')[0]
81
- yield* Effect.logError(`Error on ${threadName}: ${firstErrLine}`, cause).pipe((_) =>
81
+ yield* Effect.logError(firstErrLine, cause).pipe((_) =>
82
82
  span === undefined
83
83
  ? _
84
84
  : Effect.annotateLogs({ spanId: span.spanContext().spanId, traceId: span.spanContext().traceId })(_),
@@ -113,11 +113,11 @@ export const logWarnIfTakesLongerThan =
113
113
  Effect.gen(function* () {
114
114
  const runtime = yield* Effect.runtime<never>()
115
115
 
116
- let timedOut = false
116
+ let tookLongerThanTimer = false
117
117
 
118
118
  const timeoutFiber = Effect.sleep(duration).pipe(
119
119
  Effect.tap(() => {
120
- timedOut = true
120
+ tookLongerThanTimer = true
121
121
  // TODO include span info
122
122
  return Effect.logWarning(`${label}: Took longer than ${duration}ms`)
123
123
  }),
@@ -126,9 +126,22 @@ export const logWarnIfTakesLongerThan =
126
126
  )
127
127
 
128
128
  const start = Date.now()
129
- const res = yield* eff.pipe(Effect.exit)
129
+ const res = yield* eff.pipe(
130
+ Effect.exit,
131
+ Effect.onInterrupt(
132
+ Effect.fn(function* () {
133
+ const end = Date.now()
134
+
135
+ yield* Fiber.interrupt(timeoutFiber)
136
+
137
+ if (tookLongerThanTimer) {
138
+ yield* Effect.logWarning(`${label}: Interrupted after ${end - start}ms`)
139
+ }
140
+ }),
141
+ ),
142
+ )
130
143
 
131
- if (timedOut) {
144
+ if (tookLongerThanTimer) {
132
145
  const end = Date.now()
133
146
  yield* Effect.logWarning(`${label}: Actual duration: ${end - start}ms`)
134
147
  }
@@ -1,4 +1,4 @@
1
- import { Logger } from 'effect'
1
+ import { Cause, HashMap, Logger, LogLevel } from 'effect'
2
2
 
3
3
  export * from 'effect/Logger'
4
4
 
@@ -14,4 +14,26 @@ export const prettyWithThread = (threadName: string) =>
14
14
  Logger.prettyLogger({
15
15
  formatDate: (date) => `${defaultDateFormat(date)} ${threadName}`,
16
16
  }),
17
+ // consoleLogger(threadName),
17
18
  )
19
+
20
+ export const consoleLogger = (threadName: string) =>
21
+ Logger.make(({ message, annotations, date, logLevel, cause }) => {
22
+ const consoleFn =
23
+ logLevel === LogLevel.Debug
24
+ ? console.debug
25
+ : logLevel === LogLevel.Info
26
+ ? console.info
27
+ : logLevel === LogLevel.Warning
28
+ ? console.warn
29
+ : console.error
30
+
31
+ const annotationsObj = Object.fromEntries(HashMap.entries(annotations))
32
+
33
+ const messages = Array.isArray(message) ? message : [message]
34
+ if (Cause.isEmpty(cause) === false) {
35
+ messages.push(Cause.pretty(cause, { renderErrorCause: true }))
36
+ }
37
+
38
+ consoleFn(`[${defaultDateFormat(date)} ${threadName}]`, ...messages, annotationsObj)
39
+ })
@@ -1,8 +1,11 @@
1
1
  import { Transferable } from '@effect/platform'
2
+ import type { SchemaAST } from 'effect'
2
3
  import { Effect, Hash, ParseResult, Schema } from 'effect'
3
4
  import type { ParseError } from 'effect/ParseResult'
4
5
  import type { ParseOptions } from 'effect/SchemaAST'
5
6
 
7
+ import { shouldNeverHappen } from '../../index.js'
8
+
6
9
  export * from 'effect/Schema'
7
10
  export * from './debug-diff.js'
8
11
  export * from './msgpack.js'
@@ -34,6 +37,30 @@ export const encodeWithTransferables =
34
37
  return [encoded, collector.unsafeRead() as Transferable[]]
35
38
  })
36
39
 
40
+ export const decodeSyncDebug: <A, I>(
41
+ schema: Schema.Schema<A, I, never>,
42
+ options?: SchemaAST.ParseOptions,
43
+ ) => (i: I, overrideOptions?: SchemaAST.ParseOptions) => A = (schema, options) => (input, overrideOptions) => {
44
+ const res = Schema.decodeEither(schema, options)(input, overrideOptions)
45
+ if (res._tag === 'Left') {
46
+ return shouldNeverHappen(`decodeSyncDebug failed:`, res.left)
47
+ } else {
48
+ return res.right
49
+ }
50
+ }
51
+
52
+ export const encodeSyncDebug: <A, I>(
53
+ schema: Schema.Schema<A, I, never>,
54
+ options?: SchemaAST.ParseOptions,
55
+ ) => (a: A, overrideOptions?: SchemaAST.ParseOptions) => I = (schema, options) => (input, overrideOptions) => {
56
+ const res = Schema.encodeEither(schema, options)(input, overrideOptions)
57
+ if (res._tag === 'Left') {
58
+ return shouldNeverHappen(`encodeSyncDebug failed:`, res.left)
59
+ } else {
60
+ return res.right
61
+ }
62
+ }
63
+
37
64
  export const swap = <A, I, R>(schema: Schema.Schema<A, I, R>): Schema.Schema<I, A, R> =>
38
65
  Schema.transformOrFail(Schema.typeSchema(schema), Schema.encodedSchema(schema), {
39
66
  decode: ParseResult.encode(schema),