@livestore/utils 0.0.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.
- package/dist/.tsbuildinfo.json +1 -0
- package/dist/Deferred.d.ts +10 -0
- package/dist/Deferred.d.ts.map +1 -0
- package/dist/Deferred.js +18 -0
- package/dist/Deferred.js.map +1 -0
- package/dist/NoopTracer.d.ts +9 -0
- package/dist/NoopTracer.d.ts.map +1 -0
- package/dist/NoopTracer.js +54 -0
- package/dist/NoopTracer.js.map +1 -0
- package/dist/base64.d.ts +12 -0
- package/dist/base64.d.ts.map +1 -0
- package/dist/base64.js +114 -0
- package/dist/base64.js.map +1 -0
- package/dist/binary.d.ts +4 -0
- package/dist/binary.d.ts.map +1 -0
- package/dist/binary.js +23 -0
- package/dist/binary.js.map +1 -0
- package/dist/browser.d.ts +3 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.js +28 -0
- package/dist/browser.js.map +1 -0
- package/dist/effect/Debounce.d.ts +5 -0
- package/dist/effect/Debounce.d.ts.map +1 -0
- package/dist/effect/Debounce.js +33 -0
- package/dist/effect/Debounce.js.map +1 -0
- package/dist/effect/Effect.d.ts +7 -0
- package/dist/effect/Effect.d.ts.map +1 -0
- package/dist/effect/Effect.js +17 -0
- package/dist/effect/Effect.js.map +1 -0
- package/dist/effect/EndableQueue.d.ts +11 -0
- package/dist/effect/EndableQueue.d.ts.map +1 -0
- package/dist/effect/EndableQueue.js +22 -0
- package/dist/effect/EndableQueue.js.map +1 -0
- package/dist/effect/EnvVar.d.ts +16 -0
- package/dist/effect/EnvVar.d.ts.map +1 -0
- package/dist/effect/EnvVar.js +21 -0
- package/dist/effect/EnvVar.js.map +1 -0
- package/dist/effect/Error.d.ts +12 -0
- package/dist/effect/Error.d.ts.map +1 -0
- package/dist/effect/Error.js +13 -0
- package/dist/effect/Error.js.map +1 -0
- package/dist/effect/Gate.d.ts +14 -0
- package/dist/effect/Gate.d.ts.map +1 -0
- package/dist/effect/Gate.js +17 -0
- package/dist/effect/Gate.js.map +1 -0
- package/dist/effect/Layer.d.ts +6 -0
- package/dist/effect/Layer.d.ts.map +1 -0
- package/dist/effect/Layer.js +11 -0
- package/dist/effect/Layer.js.map +1 -0
- package/dist/effect/Otel/Dummy.d.ts +5 -0
- package/dist/effect/Otel/Dummy.d.ts.map +1 -0
- package/dist/effect/Otel/Dummy.js +22 -0
- package/dist/effect/Otel/Dummy.js.map +1 -0
- package/dist/effect/Otel/Meter.d.ts +20 -0
- package/dist/effect/Otel/Meter.d.ts.map +1 -0
- package/dist/effect/Otel/Meter.js +76 -0
- package/dist/effect/Otel/Meter.js.map +1 -0
- package/dist/effect/Otel/OtlpGrpc.d.ts +6 -0
- package/dist/effect/Otel/OtlpGrpc.d.ts.map +1 -0
- package/dist/effect/Otel/OtlpGrpc.js +42 -0
- package/dist/effect/Otel/OtlpGrpc.js.map +1 -0
- package/dist/effect/Otel/OtlpHttp.d.ts +6 -0
- package/dist/effect/Otel/OtlpHttp.d.ts.map +1 -0
- package/dist/effect/Otel/OtlpHttp.js +42 -0
- package/dist/effect/Otel/OtlpHttp.js.map +1 -0
- package/dist/effect/Otel/OtlpWebsocket.d.ts +6 -0
- package/dist/effect/Otel/OtlpWebsocket.d.ts.map +1 -0
- package/dist/effect/Otel/OtlpWebsocket.js +42 -0
- package/dist/effect/Otel/OtlpWebsocket.js.map +1 -0
- package/dist/effect/Otel/Span.d.ts +32 -0
- package/dist/effect/Otel/Span.d.ts.map +1 -0
- package/dist/effect/Otel/Span.js +97 -0
- package/dist/effect/Otel/Span.js.map +1 -0
- package/dist/effect/Otel/Tracer.d.ts +15 -0
- package/dist/effect/Otel/Tracer.d.ts.map +1 -0
- package/dist/effect/Otel/Tracer.js +17 -0
- package/dist/effect/Otel/Tracer.js.map +1 -0
- package/dist/effect/Otel/index.d.ts +8 -0
- package/dist/effect/Otel/index.d.ts.map +1 -0
- package/dist/effect/Otel/index.js +9 -0
- package/dist/effect/Otel/index.js.map +1 -0
- package/dist/effect/Otel/lib-metrics/ExporterMetricsOltpGrpc.d.ts +14 -0
- package/dist/effect/Otel/lib-metrics/ExporterMetricsOltpGrpc.d.ts.map +1 -0
- package/dist/effect/Otel/lib-metrics/ExporterMetricsOltpGrpc.js +15 -0
- package/dist/effect/Otel/lib-metrics/ExporterMetricsOltpGrpc.js.map +1 -0
- package/dist/effect/Otel/lib-metrics/ExporterMetricsOltpHttp.d.ts +14 -0
- package/dist/effect/Otel/lib-metrics/ExporterMetricsOltpHttp.d.ts.map +1 -0
- package/dist/effect/Otel/lib-metrics/ExporterMetricsOltpHttp.js +15 -0
- package/dist/effect/Otel/lib-metrics/ExporterMetricsOltpHttp.js.map +1 -0
- package/dist/effect/Otel/lib-metrics/ExporterMetricsOltpWebsocket.d.ts +19 -0
- package/dist/effect/Otel/lib-metrics/ExporterMetricsOltpWebsocket.d.ts.map +1 -0
- package/dist/effect/Otel/lib-metrics/ExporterMetricsOltpWebsocket.js +17 -0
- package/dist/effect/Otel/lib-metrics/ExporterMetricsOltpWebsocket.js.map +1 -0
- package/dist/effect/Otel/lib-metrics/MetricsProvider.d.ts +10 -0
- package/dist/effect/Otel/lib-metrics/MetricsProvider.d.ts.map +1 -0
- package/dist/effect/Otel/lib-metrics/MetricsProvider.js +4 -0
- package/dist/effect/Otel/lib-metrics/MetricsProvider.js.map +1 -0
- package/dist/effect/Otel/lib-metrics/OTLPMetricsProviderGrpc.d.ts +16 -0
- package/dist/effect/Otel/lib-metrics/OTLPMetricsProviderGrpc.d.ts.map +1 -0
- package/dist/effect/Otel/lib-metrics/OTLPMetricsProviderGrpc.js +39 -0
- package/dist/effect/Otel/lib-metrics/OTLPMetricsProviderGrpc.js.map +1 -0
- package/dist/effect/Otel/lib-metrics/OTLPMetricsProviderHttp.d.ts +16 -0
- package/dist/effect/Otel/lib-metrics/OTLPMetricsProviderHttp.d.ts.map +1 -0
- package/dist/effect/Otel/lib-metrics/OTLPMetricsProviderHttp.js +39 -0
- package/dist/effect/Otel/lib-metrics/OTLPMetricsProviderHttp.js.map +1 -0
- package/dist/effect/Otel/lib-metrics/OTLPMetricsProviderWebsocket.d.ts +16 -0
- package/dist/effect/Otel/lib-metrics/OTLPMetricsProviderWebsocket.d.ts.map +1 -0
- package/dist/effect/Otel/lib-metrics/OTLPMetricsProviderWebsocket.js +39 -0
- package/dist/effect/Otel/lib-metrics/OTLPMetricsProviderWebsocket.js.map +1 -0
- package/dist/effect/Otel/lib-metrics/PeriodicMetricsProvider.d.ts +17 -0
- package/dist/effect/Otel/lib-metrics/PeriodicMetricsProvider.d.ts.map +1 -0
- package/dist/effect/Otel/lib-metrics/PeriodicMetricsProvider.js +27 -0
- package/dist/effect/Otel/lib-metrics/PeriodicMetricsProvider.js.map +1 -0
- package/dist/effect/Otel/lib-tracer/BatchSpanProcessor.d.ts +18 -0
- package/dist/effect/Otel/lib-tracer/BatchSpanProcessor.d.ts.map +1 -0
- package/dist/effect/Otel/lib-tracer/BatchSpanProcessor.js +31 -0
- package/dist/effect/Otel/lib-tracer/BatchSpanProcessor.js.map +1 -0
- package/dist/effect/Otel/lib-tracer/ExporterTraceOtlpGrpc.d.ts +19 -0
- package/dist/effect/Otel/lib-tracer/ExporterTraceOtlpGrpc.d.ts.map +1 -0
- package/dist/effect/Otel/lib-tracer/ExporterTraceOtlpGrpc.js +36 -0
- package/dist/effect/Otel/lib-tracer/ExporterTraceOtlpGrpc.js.map +1 -0
- package/dist/effect/Otel/lib-tracer/ExporterTraceOtlpHttp.d.ts +19 -0
- package/dist/effect/Otel/lib-tracer/ExporterTraceOtlpHttp.d.ts.map +1 -0
- package/dist/effect/Otel/lib-tracer/ExporterTraceOtlpHttp.js +36 -0
- package/dist/effect/Otel/lib-tracer/ExporterTraceOtlpHttp.js.map +1 -0
- package/dist/effect/Otel/lib-tracer/ExporterTraceOtlpWebsocket.d.ts +9 -0
- package/dist/effect/Otel/lib-tracer/ExporterTraceOtlpWebsocket.d.ts.map +1 -0
- package/dist/effect/Otel/lib-tracer/ExporterTraceOtlpWebsocket.js +29 -0
- package/dist/effect/Otel/lib-tracer/ExporterTraceOtlpWebsocket.js.map +1 -0
- package/dist/effect/Otel/lib-tracer/SimpleProcessor.d.ts +19 -0
- package/dist/effect/Otel/lib-tracer/SimpleProcessor.d.ts.map +1 -0
- package/dist/effect/Otel/lib-tracer/SimpleProcessor.js +25 -0
- package/dist/effect/Otel/lib-tracer/SimpleProcessor.js.map +1 -0
- package/dist/effect/Otel/lib-tracer/TracerProvider.d.ts +10 -0
- package/dist/effect/Otel/lib-tracer/TracerProvider.d.ts.map +1 -0
- package/dist/effect/Otel/lib-tracer/TracerProvider.js +7 -0
- package/dist/effect/Otel/lib-tracer/TracerProvider.js.map +1 -0
- package/dist/effect/Otel/lib-tracer/WebProvider.d.ts +18 -0
- package/dist/effect/Otel/lib-tracer/WebProvider.d.ts.map +1 -0
- package/dist/effect/Otel/lib-tracer/WebProvider.js +25 -0
- package/dist/effect/Otel/lib-tracer/WebProvider.js.map +1 -0
- package/dist/effect/ReadonlyArray.d.ts +4 -0
- package/dist/effect/ReadonlyArray.d.ts.map +1 -0
- package/dist/effect/ReadonlyArray.js +11 -0
- package/dist/effect/ReadonlyArray.js.map +1 -0
- package/dist/effect/RequestResolver.d.ts +11 -0
- package/dist/effect/RequestResolver.d.ts.map +1 -0
- package/dist/effect/RequestResolver.js +18 -0
- package/dist/effect/RequestResolver.js.map +1 -0
- package/dist/effect/STM.d.ts +3 -0
- package/dist/effect/STM.d.ts.map +1 -0
- package/dist/effect/STM.js +3 -0
- package/dist/effect/STM.js.map +1 -0
- package/dist/effect/Schedule.d.ts +5 -0
- package/dist/effect/Schedule.d.ts.map +1 -0
- package/dist/effect/Schedule.js +7 -0
- package/dist/effect/Schedule.js.map +1 -0
- package/dist/effect/Scheduler.d.ts +49 -0
- package/dist/effect/Scheduler.d.ts.map +1 -0
- package/dist/effect/Scheduler.js +168 -0
- package/dist/effect/Scheduler.js.map +1 -0
- package/dist/effect/Schema/SchemaHash.d.ts +3 -0
- package/dist/effect/Schema/SchemaHash.d.ts.map +1 -0
- package/dist/effect/Schema/SchemaHash.js +15 -0
- package/dist/effect/Schema/SchemaHash.js.map +1 -0
- package/dist/effect/Schema/SchemaHash.test.d.ts +2 -0
- package/dist/effect/Schema/SchemaHash.test.d.ts.map +1 -0
- package/dist/effect/Schema/SchemaHash.test.js +13 -0
- package/dist/effect/Schema/SchemaHash.test.js.map +1 -0
- package/dist/effect/Schema/SchemaJsonWrapper.d.ts +11 -0
- package/dist/effect/Schema/SchemaJsonWrapper.d.ts.map +1 -0
- package/dist/effect/Schema/SchemaJsonWrapper.js +38 -0
- package/dist/effect/Schema/SchemaJsonWrapper.js.map +1 -0
- package/dist/effect/Schema/SchemaJsonWrapper.test.d.ts +2 -0
- package/dist/effect/Schema/SchemaJsonWrapper.test.d.ts.map +1 -0
- package/dist/effect/Schema/SchemaJsonWrapper.test.js +42 -0
- package/dist/effect/Schema/SchemaJsonWrapper.test.js.map +1 -0
- package/dist/effect/Schema/index.d.ts +15 -0
- package/dist/effect/Schema/index.d.ts.map +1 -0
- package/dist/effect/Schema/index.js +14 -0
- package/dist/effect/Schema/index.js.map +1 -0
- package/dist/effect/ServiceContext.d.ts +39 -0
- package/dist/effect/ServiceContext.d.ts.map +1 -0
- package/dist/effect/ServiceContext.js +61 -0
- package/dist/effect/ServiceContext.js.map +1 -0
- package/dist/effect/SmartQueue.d.ts +38 -0
- package/dist/effect/SmartQueue.d.ts.map +1 -0
- package/dist/effect/SmartQueue.js +123 -0
- package/dist/effect/SmartQueue.js.map +1 -0
- package/dist/effect/Stream/chainSwitch.d.ts +3 -0
- package/dist/effect/Stream/chainSwitch.d.ts.map +1 -0
- package/dist/effect/Stream/chainSwitch.js +48 -0
- package/dist/effect/Stream/chainSwitch.js.map +1 -0
- package/dist/effect/Stream/index.d.ts +37 -0
- package/dist/effect/Stream/index.d.ts.map +1 -0
- package/dist/effect/Stream/index.js +82 -0
- package/dist/effect/Stream/index.js.map +1 -0
- package/dist/effect/SubscriptionRef.d.ts +10 -0
- package/dist/effect/SubscriptionRef.d.ts.map +1 -0
- package/dist/effect/SubscriptionRef.js +8 -0
- package/dist/effect/SubscriptionRef.js.map +1 -0
- package/dist/effect/TimeoutGate.d.ts +13 -0
- package/dist/effect/TimeoutGate.d.ts.map +1 -0
- package/dist/effect/TimeoutGate.js +41 -0
- package/dist/effect/TimeoutGate.js.map +1 -0
- package/dist/effect/WebCrypto.d.ts +18 -0
- package/dist/effect/WebCrypto.d.ts.map +1 -0
- package/dist/effect/WebCrypto.js +56 -0
- package/dist/effect/WebCrypto.js.map +1 -0
- package/dist/effect/WebLock.d.ts +5 -0
- package/dist/effect/WebLock.d.ts.map +1 -0
- package/dist/effect/WebLock.js +20 -0
- package/dist/effect/WebLock.js.map +1 -0
- package/dist/effect/browser.d.ts +19 -0
- package/dist/effect/browser.d.ts.map +1 -0
- package/dist/effect/browser.js +82 -0
- package/dist/effect/browser.js.map +1 -0
- package/dist/effect/fetch.d.ts +89 -0
- package/dist/effect/fetch.d.ts.map +1 -0
- package/dist/effect/fetch.js +142 -0
- package/dist/effect/fetch.js.map +1 -0
- package/dist/effect/index.d.ts +50 -0
- package/dist/effect/index.d.ts.map +1 -0
- package/dist/effect/index.js +58 -0
- package/dist/effect/index.js.map +1 -0
- package/dist/global.d.ts +5 -0
- package/dist/global.d.ts.map +1 -0
- package/dist/global.js +2 -0
- package/dist/global.js.map +1 -0
- package/dist/guards.d.ts +6 -0
- package/dist/guards.d.ts.map +1 -0
- package/dist/guards.js +6 -0
- package/dist/guards.js.map +1 -0
- package/dist/index.d.ts +69 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +162 -0
- package/dist/index.js.map +1 -0
- package/dist/object/index.d.ts +10 -0
- package/dist/object/index.d.ts.map +1 -0
- package/dist/object/index.js +10 -0
- package/dist/object/index.js.map +1 -0
- package/dist/object/omit.d.ts +3 -0
- package/dist/object/omit.d.ts.map +1 -0
- package/dist/object/omit.js +14 -0
- package/dist/object/omit.js.map +1 -0
- package/dist/object/pick.d.ts +14 -0
- package/dist/object/pick.d.ts.map +1 -0
- package/dist/object/pick.js +17 -0
- package/dist/object/pick.js.map +1 -0
- package/dist/promise.d.ts +6 -0
- package/dist/promise.d.ts.map +1 -0
- package/dist/promise.js +27 -0
- package/dist/promise.js.map +1 -0
- package/dist/set.d.ts +2 -0
- package/dist/set.d.ts.map +1 -0
- package/dist/set.js +10 -0
- package/dist/set.js.map +1 -0
- package/dist/single-item.d.ts +8 -0
- package/dist/single-item.d.ts.map +1 -0
- package/dist/single-item.js +9 -0
- package/dist/single-item.js.map +1 -0
- package/dist/string.d.ts +3 -0
- package/dist/string.d.ts.map +1 -0
- package/dist/string.js +3 -0
- package/dist/string.js.map +1 -0
- package/dist/time.d.ts +12 -0
- package/dist/time.d.ts.map +1 -0
- package/dist/time.js +22 -0
- package/dist/time.js.map +1 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/json.d.ts +27 -0
- package/dist/types/json.d.ts.map +1 -0
- package/dist/types/json.js +2 -0
- package/dist/types/json.js.map +1 -0
- package/package.json +58 -0
- package/src/Deferred.ts +24 -0
- package/src/NoopTracer.ts +75 -0
- package/src/base64.ts +118 -0
- package/src/browser.ts +32 -0
- package/src/effect/Effect.ts +27 -0
- package/src/effect/Error.ts +12 -0
- package/src/effect/Otel/Dummy.ts +32 -0
- package/src/effect/Otel/Meter.ts +145 -0
- package/src/effect/Otel/OtlpGrpc.ts +75 -0
- package/src/effect/Otel/OtlpHttp.ts +75 -0
- package/src/effect/Otel/OtlpWebsocket.ts +75 -0
- package/src/effect/Otel/Span.ts +222 -0
- package/src/effect/Otel/Tracer.ts +30 -0
- package/src/effect/Otel/index.ts +8 -0
- package/src/effect/Otel/lib-metrics/ExporterMetricsOltpGrpc.ts +39 -0
- package/src/effect/Otel/lib-metrics/ExporterMetricsOltpHttp.ts +39 -0
- package/src/effect/Otel/lib-metrics/ExporterMetricsOltpWebsocket.ts +47 -0
- package/src/effect/Otel/lib-metrics/MetricsProvider.ts +12 -0
- package/src/effect/Otel/lib-metrics/OTLPMetricsProviderGrpc.ts +77 -0
- package/src/effect/Otel/lib-metrics/OTLPMetricsProviderHttp.ts +77 -0
- package/src/effect/Otel/lib-metrics/OTLPMetricsProviderWebsocket.ts +80 -0
- package/src/effect/Otel/lib-metrics/PeriodicMetricsProvider.ts +55 -0
- package/src/effect/Otel/lib-tracer/BatchSpanProcessor.ts +58 -0
- package/src/effect/Otel/lib-tracer/ExporterTraceOtlpGrpc.ts +64 -0
- package/src/effect/Otel/lib-tracer/ExporterTraceOtlpHttp.ts +64 -0
- package/src/effect/Otel/lib-tracer/ExporterTraceOtlpWebsocket.ts +38 -0
- package/src/effect/Otel/lib-tracer/README.md +1 -0
- package/src/effect/Otel/lib-tracer/SimpleProcessor.ts +46 -0
- package/src/effect/Otel/lib-tracer/TracerProvider.ts +16 -0
- package/src/effect/Otel/lib-tracer/WebProvider.ts +48 -0
- package/src/effect/Schedule.ts +12 -0
- package/src/effect/ServiceContext.ts +116 -0
- package/src/effect/index.ts +65 -0
- package/src/global.ts +5 -0
- package/src/guards.ts +8 -0
- package/src/index.ts +217 -0
- package/src/object/index.ts +24 -0
- package/src/object/omit.ts +17 -0
- package/src/object/pick.ts +27 -0
- package/src/promise.ts +43 -0
- package/src/set.ts +10 -0
- package/src/string.ts +2 -0
- package/src/time.ts +25 -0
- package/tsconfig.json +13 -0
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import * as Context from '@effect/data/Context';
|
|
2
|
+
import * as Effect from '@effect/io/Effect';
|
|
3
|
+
import * as Layer from '@effect/io/Layer';
|
|
4
|
+
import type { OTLPExporterNodeConfigBase } from '@opentelemetry/otlp-exporter-base';
|
|
5
|
+
import { WebsocketTraceExporter } from 'otel-websocket-exporter';
|
|
6
|
+
export declare const OTLPTraceExporterConfig: Context.Tag<OTLPExporterNodeConfigBase, OTLPExporterNodeConfigBase>;
|
|
7
|
+
export declare const makeOTLPTraceExporterConfigLayer: (config: OTLPExporterNodeConfigBase) => Layer.Layer<never, never, OTLPExporterNodeConfigBase>;
|
|
8
|
+
export declare const makeTracingSpanExporter: Effect.Effect<import("@effect/io/Scope").Scope | OTLPExporterNodeConfigBase, never, WebsocketTraceExporter>;
|
|
9
|
+
//# sourceMappingURL=ExporterTraceOtlpWebsocket.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExporterTraceOtlpWebsocket.d.ts","sourceRoot":"","sources":["../../../../src/effect/Otel/lib-tracer/ExporterTraceOtlpWebsocket.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAA;AAE/C,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAC3C,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAA;AACzC,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAA;AACnF,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAA;AAEhE,eAAO,MAAM,uBAAuB,qEAAiF,CAAA;AAErH,eAAO,MAAM,gCAAgC,WAAY,0BAA0B,0DACnC,CAAA;AAEhD,eAAO,MAAM,uBAAuB,6GAyBlC,CAAA"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import * as Context from '@effect/data/Context';
|
|
2
|
+
import * as Duration from '@effect/data/Duration';
|
|
3
|
+
import * as Effect from '@effect/io/Effect';
|
|
4
|
+
import * as Layer from '@effect/io/Layer';
|
|
5
|
+
import { WebsocketTraceExporter } from 'otel-websocket-exporter';
|
|
6
|
+
export const OTLPTraceExporterConfig = Context.Tag('effect-otel/OTLPTraceExporterConfig');
|
|
7
|
+
export const makeOTLPTraceExporterConfigLayer = (config) => Layer.succeed(OTLPTraceExporterConfig, config);
|
|
8
|
+
export const makeTracingSpanExporter = Effect.gen(function* ($) {
|
|
9
|
+
const config = yield* $(OTLPTraceExporterConfig);
|
|
10
|
+
const spanExporter = yield* $(Effect.sync(() => new WebsocketTraceExporter(config)),
|
|
11
|
+
// NOTE Unfortunately this workaround/"hack" is currently needed since Otel doesn't yet provide a graceful
|
|
12
|
+
// way to shutdown.
|
|
13
|
+
//
|
|
14
|
+
// Related issue: https://github.com/open-telemetry/opentelemetry-js/issues/987
|
|
15
|
+
Effect.acquireRelease((p) => Effect.gen(function* ($) {
|
|
16
|
+
while (1) {
|
|
17
|
+
yield* $(Effect.sleep(Duration.millis(0)));
|
|
18
|
+
const promises = p['_sendingPromises'];
|
|
19
|
+
if (promises.length > 0) {
|
|
20
|
+
yield* $(Effect.exit(Effect.promise(() => Promise.all(promises))));
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
break;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
})));
|
|
27
|
+
return spanExporter;
|
|
28
|
+
});
|
|
29
|
+
//# sourceMappingURL=ExporterTraceOtlpWebsocket.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExporterTraceOtlpWebsocket.js","sourceRoot":"","sources":["../../../../src/effect/Otel/lib-tracer/ExporterTraceOtlpWebsocket.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAA;AAC/C,OAAO,KAAK,QAAQ,MAAM,uBAAuB,CAAA;AACjD,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAC3C,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAA;AAEzC,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAA;AAEhE,MAAM,CAAC,MAAM,uBAAuB,GAAG,OAAO,CAAC,GAAG,CAA6B,qCAAqC,CAAC,CAAA;AAErH,MAAM,CAAC,MAAM,gCAAgC,GAAG,CAAC,MAAkC,EAAE,EAAE,CACrF,KAAK,CAAC,OAAO,CAAC,uBAAuB,EAAE,MAAM,CAAC,CAAA;AAEhD,MAAM,CAAC,MAAM,uBAAuB,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC5D,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAA;IAEhD,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC,CAC3B,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,sBAAsB,CAAC,MAAM,CAAC,CAAC;IACrD,0GAA0G;IAC1G,mBAAmB;IACnB,EAAE;IACF,+EAA+E;IAC/E,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,EAAE,CAC1B,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QACrB,OAAO,CAAC,EAAE;YACR,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YAC1C,MAAM,QAAQ,GAAG,CAAC,CAAC,kBAAkB,CAAU,CAAA;YAC/C,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;gBACvB,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;aACnE;iBAAM;gBACL,MAAK;aACN;SACF;IACH,CAAC,CAAC,CACH,CACF,CAAA;IAED,OAAO,YAAY,CAAA;AACrB,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import * as Context from '@effect/data/Context';
|
|
2
|
+
import * as Effect from '@effect/io/Effect';
|
|
3
|
+
import * as Layer from '@effect/io/Layer';
|
|
4
|
+
import type * as Scope from '@effect/io/Scope';
|
|
5
|
+
import type { SpanExporter } from '@opentelemetry/sdk-trace-base';
|
|
6
|
+
import { SimpleSpanProcessor } from '@opentelemetry/sdk-trace-base';
|
|
7
|
+
import { TracerProvider } from './TracerProvider.js';
|
|
8
|
+
export declare const SimpleProcessorSymbol: unique symbol;
|
|
9
|
+
export type SimpleProcessorSymbol = typeof SimpleProcessorSymbol;
|
|
10
|
+
export interface SimpleProcessor {
|
|
11
|
+
readonly [SimpleProcessorSymbol]: SimpleProcessorSymbol;
|
|
12
|
+
readonly spanExporter: SpanExporter;
|
|
13
|
+
readonly spanProcessor: SimpleSpanProcessor;
|
|
14
|
+
}
|
|
15
|
+
export declare const makeSimpleProcessor: <R, E, A extends SpanExporter>(exporter: Effect.Effect<Scope.Scope | R, E, A>) => Effect.Effect<Scope.Scope | TracerProvider | R, E, SimpleProcessor>;
|
|
16
|
+
export declare const SimpleProcessorTag: Context.Tag<SimpleProcessor, SimpleProcessor>;
|
|
17
|
+
export declare const SimpleProcessor: <R, E, A extends SpanExporter>(exporter: Effect.Effect<Scope.Scope | R, E, A>) => Layer.Layer<TracerProvider | Exclude<R, Scope.Scope>, E, SimpleProcessor>;
|
|
18
|
+
export declare const LiveConsoleSimple: Layer.Layer<TracerProvider, never, SimpleProcessor>;
|
|
19
|
+
//# sourceMappingURL=SimpleProcessor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SimpleProcessor.d.ts","sourceRoot":"","sources":["../../../../src/effect/Otel/lib-tracer/SimpleProcessor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAA;AAE/C,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAC3C,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAA;AACzC,OAAO,KAAK,KAAK,KAAK,MAAM,kBAAkB,CAAA;AAC9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AACjE,OAAO,EAAuB,mBAAmB,EAAE,MAAM,+BAA+B,CAAA;AAExF,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAMpD,eAAO,MAAM,qBAAqB,eAA4C,CAAA;AAC9E,MAAM,MAAM,qBAAqB,GAAG,OAAO,qBAAqB,CAAA;AAEhE,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,CAAC,qBAAqB,CAAC,EAAE,qBAAqB,CAAA;IACvD,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAA;IACnC,QAAQ,CAAC,aAAa,EAAE,mBAAmB,CAAA;CAC5C;AAED,eAAO,MAAM,mBAAmB,uJAe5B,CAAA;AAEJ,eAAO,MAAM,kBAAkB,+CAAsD,CAAA;AAErF,eAAO,MAAM,eAAe,6JACqC,CAAA;AAEjE,eAAO,MAAM,iBAAiB,qDAAgE,CAAA"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import * as Context from '@effect/data/Context';
|
|
2
|
+
import { identity } from '@effect/data/Function';
|
|
3
|
+
import * as Effect from '@effect/io/Effect';
|
|
4
|
+
import * as Layer from '@effect/io/Layer';
|
|
5
|
+
import { ConsoleSpanExporter, SimpleSpanProcessor } from '@opentelemetry/sdk-trace-base';
|
|
6
|
+
import { TracerProvider } from './TracerProvider.js';
|
|
7
|
+
//
|
|
8
|
+
// Span Processor
|
|
9
|
+
//
|
|
10
|
+
export const SimpleProcessorSymbol = Symbol.for('effect-otel/SimpleProcessor');
|
|
11
|
+
export const makeSimpleProcessor = (exporter) => Effect.gen(function* ($) {
|
|
12
|
+
const { tracerProvider } = yield* $(TracerProvider);
|
|
13
|
+
const spanExporter = yield* $(exporter);
|
|
14
|
+
const spanProcessor = yield* $(Effect.sync(() => new SimpleSpanProcessor(spanExporter)));
|
|
15
|
+
yield* $(Effect.sync(() => tracerProvider.addSpanProcessor(spanProcessor)));
|
|
16
|
+
return identity({
|
|
17
|
+
[SimpleProcessorSymbol]: SimpleProcessorSymbol,
|
|
18
|
+
spanExporter,
|
|
19
|
+
spanProcessor,
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
export const SimpleProcessorTag = Context.Tag(SimpleProcessorSymbol);
|
|
23
|
+
export const SimpleProcessor = (exporter) => Layer.scoped(SimpleProcessorTag, makeSimpleProcessor(exporter));
|
|
24
|
+
export const LiveConsoleSimple = SimpleProcessor(Effect.sync(() => new ConsoleSpanExporter()));
|
|
25
|
+
//# sourceMappingURL=SimpleProcessor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SimpleProcessor.js","sourceRoot":"","sources":["../../../../src/effect/Otel/lib-tracer/SimpleProcessor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAA;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAChD,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAC3C,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAA;AAGzC,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAA;AAExF,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAEpD,EAAE;AACF,iBAAiB;AACjB,EAAE;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAA;AAS9E,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAA+B,QAA8C,EAAE,EAAE,CAClH,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;IACrB,MAAM,EAAE,cAAc,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAA;IAEnD,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAA;IAEvC,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,mBAAmB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;IAExF,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAA;IAE3E,OAAO,QAAQ,CAAkB;QAC/B,CAAC,qBAAqB,CAAC,EAAE,qBAAqB;QAC9C,YAAY;QACZ,aAAa;KACd,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEJ,MAAM,CAAC,MAAM,kBAAkB,GAAG,OAAO,CAAC,GAAG,CAAkB,qBAAqB,CAAC,CAAA;AAErF,MAAM,CAAC,MAAM,eAAe,GAAG,CAA+B,QAA8C,EAAE,EAAE,CAC9G,KAAK,CAAC,MAAM,CAAC,kBAAkB,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAA;AAEjE,MAAM,CAAC,MAAM,iBAAiB,GAAG,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,mBAAmB,EAAE,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import * as Context from '@effect/data/Context';
|
|
2
|
+
import type { BasicTracerProvider } from '@opentelemetry/sdk-trace-base';
|
|
3
|
+
export declare const TracerProviderSymbol: unique symbol;
|
|
4
|
+
export type TracerProviderSymbol = typeof TracerProviderSymbol;
|
|
5
|
+
export interface TracerProvider {
|
|
6
|
+
readonly [TracerProviderSymbol]: TracerProviderSymbol;
|
|
7
|
+
readonly tracerProvider: BasicTracerProvider;
|
|
8
|
+
}
|
|
9
|
+
export declare const TracerProvider: Context.Tag<TracerProvider, TracerProvider>;
|
|
10
|
+
//# sourceMappingURL=TracerProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TracerProvider.d.ts","sourceRoot":"","sources":["../../../../src/effect/Otel/lib-tracer/TracerProvider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAA;AAC/C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAA;AAMxE,eAAO,MAAM,oBAAoB,eAA2C,CAAA;AAC5E,MAAM,MAAM,oBAAoB,GAAG,OAAO,oBAAoB,CAAA;AAE9D,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,CAAC,oBAAoB,CAAC,EAAE,oBAAoB,CAAA;IACrD,QAAQ,CAAC,cAAc,EAAE,mBAAmB,CAAA;CAC7C;AAED,eAAO,MAAM,cAAc,6CAAoD,CAAA"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import * as Context from '@effect/data/Context';
|
|
2
|
+
//
|
|
3
|
+
// ets_tracing Provider
|
|
4
|
+
//
|
|
5
|
+
export const TracerProviderSymbol = Symbol.for('effect-otel/TracerProvider');
|
|
6
|
+
export const TracerProvider = Context.Tag(TracerProviderSymbol);
|
|
7
|
+
//# sourceMappingURL=TracerProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TracerProvider.js","sourceRoot":"","sources":["../../../../src/effect/Otel/lib-tracer/TracerProvider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAA;AAG/C,EAAE;AACF,uBAAuB;AACvB,EAAE;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAA;AAQ5E,MAAM,CAAC,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAiB,oBAAoB,CAAC,CAAA"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import * as Context from '@effect/data/Context';
|
|
2
|
+
import * as Effect from '@effect/io/Effect';
|
|
3
|
+
import * as Layer from '@effect/io/Layer';
|
|
4
|
+
import type { WebTracerConfig } from '@opentelemetry/sdk-trace-web';
|
|
5
|
+
import { TracerProvider } from './TracerProvider.js';
|
|
6
|
+
export declare const WebTracerProviderConfigSymbol: unique symbol;
|
|
7
|
+
type WebTracerProviderConfigSymbol = typeof WebTracerProviderConfigSymbol;
|
|
8
|
+
export interface WebTracerProviderConfig {
|
|
9
|
+
[WebTracerProviderConfigSymbol]: WebTracerProviderConfigSymbol;
|
|
10
|
+
readonly config: WebTracerConfig;
|
|
11
|
+
}
|
|
12
|
+
export declare const WebTracerProviderConfig: Context.Tag<WebTracerProviderConfig, WebTracerProviderConfig>;
|
|
13
|
+
export declare const LiveWebTracerProviderConfig: (config: WebTracerConfig) => Layer.Layer<never, never, WebTracerProviderConfig>;
|
|
14
|
+
export declare const makeWebTracingProvider: Effect.Effect<never, never, TracerProvider>;
|
|
15
|
+
export declare const WebProviderLayer: Layer.Layer<never, never, TracerProvider>;
|
|
16
|
+
export declare const WebProvider: (config?: WebTracerConfig) => Layer.Layer<never, never, TracerProvider>;
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=WebProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WebProvider.d.ts","sourceRoot":"","sources":["../../../../src/effect/Otel/lib-tracer/WebProvider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAA;AAG/C,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAC3C,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAA;AACzC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAGnE,OAAO,EAAE,cAAc,EAAwB,MAAM,qBAAqB,CAAA;AAE1E,eAAO,MAAM,6BAA6B,eAAoD,CAAA;AAC9F,KAAK,6BAA6B,GAAG,OAAO,6BAA6B,CAAA;AAEzE,MAAM,WAAW,uBAAuB;IACtC,CAAC,6BAA6B,CAAC,EAAE,6BAA6B,CAAA;IAE9D,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAA;CACjC;AAED,eAAO,MAAM,uBAAuB,+DAAsE,CAAA;AAE1G,eAAO,MAAM,2BAA2B,WAAY,eAAe,uDAI/D,CAAA;AAEJ,eAAO,MAAM,sBAAsB,6CAejC,CAAA;AAEF,eAAO,MAAM,gBAAgB,2CAAuD,CAAA;AAEpF,eAAO,MAAM,WAAW,YAAa,eAAe,8CAC8C,CAAA"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import * as Context from '@effect/data/Context';
|
|
2
|
+
import { identity, pipe } from '@effect/data/Function';
|
|
3
|
+
import * as Option from '@effect/data/Option';
|
|
4
|
+
import * as Effect from '@effect/io/Effect';
|
|
5
|
+
import * as Layer from '@effect/io/Layer';
|
|
6
|
+
import { WebTracerProvider } from '@opentelemetry/sdk-trace-web';
|
|
7
|
+
import { TracerProvider, TracerProviderSymbol } from './TracerProvider.js';
|
|
8
|
+
export const WebTracerProviderConfigSymbol = Symbol.for('effect-otel/WebTracerProviderConfig');
|
|
9
|
+
export const WebTracerProviderConfig = Context.Tag(WebTracerProviderConfigSymbol);
|
|
10
|
+
export const LiveWebTracerProviderConfig = (config) => Layer.succeed(WebTracerProviderConfig, {
|
|
11
|
+
[WebTracerProviderConfigSymbol]: WebTracerProviderConfigSymbol,
|
|
12
|
+
config,
|
|
13
|
+
});
|
|
14
|
+
export const makeWebTracingProvider = Effect.gen(function* ($) {
|
|
15
|
+
const ctx = yield* $(Effect.context());
|
|
16
|
+
const config = pipe(Context.getOption(ctx, WebTracerProviderConfig), Option.map((_) => _.config), Option.getOrUndefined);
|
|
17
|
+
const tracerProvider = yield* $(Effect.sync(() => new WebTracerProvider(config)));
|
|
18
|
+
return identity({
|
|
19
|
+
[TracerProviderSymbol]: TracerProviderSymbol,
|
|
20
|
+
tracerProvider,
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
export const WebProviderLayer = Layer.scoped(TracerProvider, makeWebTracingProvider);
|
|
24
|
+
export const WebProvider = (config) => config ? Layer.provide(LiveWebTracerProviderConfig(config), WebProviderLayer) : WebProviderLayer;
|
|
25
|
+
//# sourceMappingURL=WebProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WebProvider.js","sourceRoot":"","sources":["../../../../src/effect/Otel/lib-tracer/WebProvider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAA;AAC/C,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,KAAK,MAAM,MAAM,qBAAqB,CAAA;AAC7C,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAC3C,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAA;AAEzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAEhE,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAE1E,MAAM,CAAC,MAAM,6BAA6B,GAAG,MAAM,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAA;AAS9F,MAAM,CAAC,MAAM,uBAAuB,GAAG,OAAO,CAAC,GAAG,CAA0B,6BAA6B,CAAC,CAAA;AAE1G,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,MAAuB,EAAE,EAAE,CACrE,KAAK,CAAC,OAAO,CAAC,uBAAuB,EAAE;IACrC,CAAC,6BAA6B,CAAC,EAAE,6BAA6B;IAC9D,MAAM;CACP,CAAC,CAAA;AAEJ,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC3D,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,EAAS,CAAC,CAAA;IAE7C,MAAM,MAAM,GAAG,IAAI,CACjB,OAAO,CAAC,SAAS,CAAC,GAAG,EAAE,uBAAuB,CAAC,EAC/C,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAC3B,MAAM,CAAC,cAAc,CACtB,CAAA;IAED,MAAM,cAAc,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;IAEjF,OAAO,QAAQ,CAAiB;QAC9B,CAAC,oBAAoB,CAAC,EAAE,oBAAoB;QAC5C,cAAc;KACf,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,CAAC,MAAM,CAAC,cAAc,EAAE,sBAAsB,CAAC,CAAA;AAEpF,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,MAAwB,EAAE,EAAE,CACtD,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,2BAA2B,CAAC,MAAM,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReadonlyArray.d.ts","sourceRoot":"","sources":["../../src/effect/ReadonlyArray.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,aAAa,MAAM,4BAA4B,CAAA;AAE3D,cAAc,4BAA4B,CAAA;AAE1C,eAAO,MAAM,UAAU,4BAOnB,CAAA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { pipe } from '@effect/data/Function';
|
|
2
|
+
import * as Option from '@effect/data/Option';
|
|
3
|
+
import * as ReadonlyArray from '@effect/data/ReadonlyArray';
|
|
4
|
+
export * from '@effect/data/ReadonlyArray';
|
|
5
|
+
export const headUnsafe = (as) => pipe(as, ReadonlyArray.head, (_) => {
|
|
6
|
+
if (Option.isNone(_)) {
|
|
7
|
+
throw new Error('headUnsafe: empty array');
|
|
8
|
+
}
|
|
9
|
+
return _.value;
|
|
10
|
+
});
|
|
11
|
+
//# sourceMappingURL=ReadonlyArray.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReadonlyArray.js","sourceRoot":"","sources":["../../src/effect/ReadonlyArray.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAA;AAC5C,OAAO,KAAK,MAAM,MAAM,qBAAqB,CAAA;AAC7C,OAAO,KAAK,aAAa,MAAM,4BAA4B,CAAA;AAE3D,cAAc,4BAA4B,CAAA;AAE1C,MAAM,CAAC,MAAM,UAAU,GAAG,CAAI,EAAoB,EAAK,EAAE,CACvD,IAAI,CAAC,EAAE,EAAE,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE;IACjC,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;QACpB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAA;KAC3C;IAED,OAAO,CAAC,CAAC,KAAK,CAAA;AAChB,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type * as Duration from '@effect/data/Duration';
|
|
2
|
+
import type * as Request from '@effect/io/Request';
|
|
3
|
+
import * as RequestResolver from '@effect/io/RequestResolver';
|
|
4
|
+
import type * as Scope from '@effect/io/Scope';
|
|
5
|
+
import * as Effect from './Effect.js';
|
|
6
|
+
export * from '@effect/io/RequestResolver';
|
|
7
|
+
export declare const dataLoader: <A extends Request.Request<any, any>>(self: RequestResolver.RequestResolver<A, never>, options: {
|
|
8
|
+
readonly window: Duration.DurationInput;
|
|
9
|
+
readonly maxBatchSize?: number;
|
|
10
|
+
}) => Effect.Effect<Scope.Scope, never, RequestResolver.RequestResolver<A, never>>;
|
|
11
|
+
//# sourceMappingURL=RequestResolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RequestResolver.d.ts","sourceRoot":"","sources":["../../src/effect/RequestResolver.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,QAAQ,MAAM,uBAAuB,CAAA;AAItD,OAAO,KAAK,KAAK,OAAO,MAAM,oBAAoB,CAAA;AAClD,OAAO,KAAK,eAAe,MAAM,4BAA4B,CAAA;AAC7D,OAAO,KAAK,KAAK,KAAK,MAAM,kBAAkB,CAAA;AAE9C,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AAErC,cAAc,4BAA4B,CAAA;AAS1C,eAAO,MAAM,UAAU,kGAEZ;IACP,QAAQ,SAAS,SAAS,aAAa,CAAA;IACvC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAC/B,iFAuCC,CAAA"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import * as Chunk from '@effect/data/Chunk';
|
|
2
|
+
import * as Deferred from '@effect/io/Deferred';
|
|
3
|
+
import * as Queue from '@effect/io/Queue';
|
|
4
|
+
import * as Ref from '@effect/io/Ref';
|
|
5
|
+
import * as RequestResolver from '@effect/io/RequestResolver';
|
|
6
|
+
import * as Effect from './Effect.js';
|
|
7
|
+
export * from '@effect/io/RequestResolver';
|
|
8
|
+
export const dataLoader = (self, options) => Effect.gen(function* (_) {
|
|
9
|
+
const queue = yield* _(Queue.unbounded());
|
|
10
|
+
const batch = yield* _(Ref.make(Chunk.empty()));
|
|
11
|
+
const takeOne = Effect.flatMap(Queue.take(queue), (item) => Ref.updateAndGet(batch, Chunk.append(item)));
|
|
12
|
+
const takeRest = takeOne.pipe(Effect.repeatUntil((items) => options.maxBatchSize !== undefined && items.length >= options.maxBatchSize), Effect.timeout(options.window), Effect.zipRight(Ref.getAndSet(batch, Chunk.empty())));
|
|
13
|
+
yield* _(takeOne, Effect.zipRight(takeRest), Effect.flatMap(Effect.filter(({ deferred }) => Deferred.isDone(deferred), {
|
|
14
|
+
negate: true,
|
|
15
|
+
})), Effect.flatMap(Effect.forEach(({ request, deferred }) => Effect.flatMap(Effect.exit(Effect.request(request, self)), (exit) => Deferred.complete(deferred, exit)), { batching: true, discard: true })), Effect.forever, Effect.forkScoped);
|
|
16
|
+
return RequestResolver.fromFunctionEffect((request) => Effect.flatMap(Deferred.make(), (deferred) => Queue.offer(queue, { request, deferred }).pipe(Effect.zipRight(Deferred.await(deferred)), Effect.onInterrupt(() => Deferred.interrupt(deferred)))));
|
|
17
|
+
});
|
|
18
|
+
//# sourceMappingURL=RequestResolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RequestResolver.js","sourceRoot":"","sources":["../../src/effect/RequestResolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,oBAAoB,CAAA;AAE3C,OAAO,KAAK,QAAQ,MAAM,qBAAqB,CAAA;AAC/C,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAA;AACzC,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAA;AAErC,OAAO,KAAK,eAAe,MAAM,4BAA4B,CAAA;AAG7D,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AAErC,cAAc,4BAA4B,CAAA;AAS1C,MAAM,CAAC,MAAM,UAAU,GAAG,CACxB,IAA+C,EAC/C,OAGC,EAC6E,EAAE,CAChF,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;IACrB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,EAAqB,CAAC,CAAA;IAC5D,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAqB,CAAC,CAAC,CAAA;IAClE,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACxG,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAC3B,MAAM,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,YAAY,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,IAAI,OAAO,CAAC,YAAY,CAAC,EACzG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAC9B,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CACrD,CAAA;IAED,KAAK,CAAC,CAAC,CAAC,CACN,OAAO,EACP,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,EACzB,MAAM,CAAC,OAAO,CACZ,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE;QACzD,MAAM,EAAE,IAAI;KACb,CAAC,CACH,EACD,MAAM,CAAC,OAAO,CACZ,MAAM,CAAC,OAAO,CACZ,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,CACxB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,EACzG,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAClC,CACF,EACD,MAAM,CAAC,OAAO,EACd,MAAM,CAAC,UAAU,CAClB,CAAA;IAED,OAAO,eAAe,CAAC,kBAAkB,CAAC,CAAC,OAAU,EAAE,EAAE,CACvD,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAwD,EAAE,CAAC,QAAQ,EAAE,EAAE,CACjG,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,IAAI,CAC5C,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EACzC,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CACvD,CACF,CACF,CAAA;AACH,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"STM.d.ts","sourceRoot":"","sources":["../../src/effect/STM.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA;AACzB,cAAc,iBAAiB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"STM.js","sourceRoot":"","sources":["../../src/effect/STM.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA;AACzB,cAAc,iBAAiB,CAAA"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import * as Duration from '@effect/data/Duration';
|
|
2
|
+
import * as Schedule from '@effect/io/Schedule';
|
|
3
|
+
export * from '@effect/io/Schedule';
|
|
4
|
+
export declare const exponentialBackoff10Sec: Schedule.Schedule<never, unknown, Duration.DurationInput>;
|
|
5
|
+
//# sourceMappingURL=Schedule.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Schedule.d.ts","sourceRoot":"","sources":["../../src/effect/Schedule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,uBAAuB,CAAA;AAEjD,OAAO,KAAK,QAAQ,MAAM,qBAAqB,CAAA;AAE/C,cAAc,qBAAqB,CAAA;AAEnC,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,aAAa,CAK7F,CAAA"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import * as Duration from '@effect/data/Duration';
|
|
2
|
+
import { pipe } from '@effect/data/Function';
|
|
3
|
+
import * as Schedule from '@effect/io/Schedule';
|
|
4
|
+
export * from '@effect/io/Schedule';
|
|
5
|
+
export const exponentialBackoff10Sec = pipe(Schedule.exponential(Duration.millis(10), 4), // 10ms, 40ms, 160ms, 640ms, 2560ms, ...
|
|
6
|
+
Schedule.andThenEither(Schedule.spaced(Duration.seconds(1))), Schedule.compose(Schedule.elapsed), Schedule.whileOutput(Duration.lessThanOrEqualTo(Duration.seconds(10))));
|
|
7
|
+
//# sourceMappingURL=Schedule.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Schedule.js","sourceRoot":"","sources":["../../src/effect/Schedule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,uBAAuB,CAAA;AACjD,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAA;AAC5C,OAAO,KAAK,QAAQ,MAAM,qBAAqB,CAAA;AAE/C,cAAc,qBAAqB,CAAA;AAEnC,MAAM,CAAC,MAAM,uBAAuB,GAA8D,IAAI,CACpG,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,wCAAwC;AACtF,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAC5D,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAClC,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,iBAAiB,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CACvE,CAAA"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/// <reference no-default-lib="true"/>
|
|
2
|
+
/// <reference lib="esnext" />
|
|
3
|
+
/// <reference lib="dom" />
|
|
4
|
+
declare global {
|
|
5
|
+
interface Navigator {
|
|
6
|
+
scheduling: {
|
|
7
|
+
isInputPending: (() => boolean) | undefined;
|
|
8
|
+
} | undefined;
|
|
9
|
+
}
|
|
10
|
+
function cancelAnimationFrame(handle: number | undefined): void;
|
|
11
|
+
function cancelIdleCallback(handle: number | undefined): void;
|
|
12
|
+
}
|
|
13
|
+
export * from '@effect/io/Scheduler';
|
|
14
|
+
import * as Scheduler from '@effect/io/Scheduler';
|
|
15
|
+
export declare class ReactAwareScheduler implements Scheduler.Scheduler {
|
|
16
|
+
private maxNextTickBeforeTimer;
|
|
17
|
+
private running;
|
|
18
|
+
private tasks;
|
|
19
|
+
constructor(maxNextTickBeforeTimer: number);
|
|
20
|
+
scheduleTask(task: Scheduler.Task): void;
|
|
21
|
+
private starveInternal;
|
|
22
|
+
private starve;
|
|
23
|
+
/** NOTE We're also returning `starveStartedMs` to avoid having to call` Date.now()` twice */
|
|
24
|
+
private shouldYieldToNextFrame;
|
|
25
|
+
}
|
|
26
|
+
/** NOTE should only be used on Main Thread */
|
|
27
|
+
export declare class BackgroundScheduler implements Scheduler.Scheduler {
|
|
28
|
+
private running;
|
|
29
|
+
private taskBuckets;
|
|
30
|
+
scheduleTask(task: Scheduler.Task, priority: number): void;
|
|
31
|
+
private doWork;
|
|
32
|
+
private starve;
|
|
33
|
+
}
|
|
34
|
+
export declare class FallbackBackgroundScheduler implements Scheduler.Scheduler {
|
|
35
|
+
private systemFps;
|
|
36
|
+
private running;
|
|
37
|
+
private taskBuckets;
|
|
38
|
+
/** Timestamp in milli seconds */
|
|
39
|
+
private lastWitnessedFrame;
|
|
40
|
+
private timePerFrame;
|
|
41
|
+
constructor(systemFps?: number);
|
|
42
|
+
scheduleTask(task: Scheduler.Task, priority: number): void;
|
|
43
|
+
private loopRequestAnimationFrame;
|
|
44
|
+
private starve;
|
|
45
|
+
private getRemainingTimeMs;
|
|
46
|
+
}
|
|
47
|
+
export declare const reactAwareScheduler: () => Scheduler.Scheduler;
|
|
48
|
+
export declare const backgroundScheduler: () => Scheduler.Scheduler;
|
|
49
|
+
//# sourceMappingURL=Scheduler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Scheduler.d.ts","sourceRoot":"","sources":["../../src/effect/Scheduler.ts"],"names":[],"mappings":";;;AAIA,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,SAAS;QACjB,UAAU,EACN;YACE,cAAc,EAAE,CAAC,MAAM,OAAO,CAAC,GAAG,SAAS,CAAA;SAC5C,GACD,SAAS,CAAA;KACd;IACD,SAAS,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAA;IAC/D,SAAS,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAA;CAC9D;AAGD,cAAc,sBAAsB,CAAA;AAEpC,OAAO,KAAK,SAAS,MAAM,sBAAsB,CAAA;AAGjD,qBAAa,mBAAoB,YAAW,SAAS,CAAC,SAAS;IAIjD,OAAO,CAAC,sBAAsB;IAH1C,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,KAAK,CAA8B;gBAEvB,sBAAsB,EAAE,MAAM;IAElD,YAAY,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI;IASjC,OAAO,CAAC,cAAc;IAgBtB,OAAO,CAAC,MAAM;IAUd,6FAA6F;IAC7F,OAAO,CAAC,sBAAsB;CAgB/B;AAED,8CAA8C;AAC9C,qBAAa,mBAAoB,YAAW,SAAS,CAAC,SAAS;IAC7D,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,WAAW,CAAkC;IAErD,YAAY,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM;IASnD,OAAO,CAAC,MAAM;IAkBd,OAAO,CAAC,MAAM;CAKf;AAED,qBAAa,2BAA4B,YAAW,SAAS,CAAC,SAAS;IASzD,OAAO,CAAC,SAAS;IAR7B,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,WAAW,CAAkC;IAErD,iCAAiC;IACjC,OAAO,CAAC,kBAAkB,CAAI;IAE9B,OAAO,CAAC,YAAY,CAAwB;gBAExB,SAAS,SAAK;IAMlC,YAAY,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM;IAUnD,OAAO,CAAC,yBAAyB;IAUjC,OAAO,CAAC,MAAM;IAmBd,OAAO,CAAC,kBAAkB;CAK3B;AAaD,eAAO,MAAM,mBAAmB,QAAO,mBAAoD,CAAA;AAE3F,eAAO,MAAM,mBAAmB,QAAO,mBAYtC,CAAA"}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
/// <reference no-default-lib="true" />
|
|
2
|
+
/// <reference lib="esnext" />
|
|
3
|
+
/// <reference lib="dom" />
|
|
4
|
+
/* eslint-disable prefer-arrow/prefer-arrow-functions */
|
|
5
|
+
export * from '@effect/io/Scheduler';
|
|
6
|
+
import * as Scheduler from '@effect/io/Scheduler';
|
|
7
|
+
// Based on https://github.com/Effect-TS/io/blob/main/src/Scheduler.ts#L63
|
|
8
|
+
export class ReactAwareScheduler {
|
|
9
|
+
constructor(maxNextTickBeforeTimer) {
|
|
10
|
+
this.maxNextTickBeforeTimer = maxNextTickBeforeTimer;
|
|
11
|
+
this.running = false;
|
|
12
|
+
this.tasks = new Array();
|
|
13
|
+
}
|
|
14
|
+
scheduleTask(task) {
|
|
15
|
+
this.tasks.push(task);
|
|
16
|
+
if (this.running === false) {
|
|
17
|
+
this.running = true;
|
|
18
|
+
this.starve(0, Date.now());
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
starveInternal(depth, starveStartedMs) {
|
|
22
|
+
const tasks = this.tasks;
|
|
23
|
+
this.tasks = [];
|
|
24
|
+
// TODO do some metering here to avoid frame drops
|
|
25
|
+
for (const task of tasks) {
|
|
26
|
+
task();
|
|
27
|
+
}
|
|
28
|
+
if (this.tasks.length === 0) {
|
|
29
|
+
this.running = false;
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
this.starve(depth, starveStartedMs);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
starve(executionDepth, starveStartedMs_) {
|
|
36
|
+
const { shouldYield, starveStartedMs } = this.shouldYieldToNextFrame(executionDepth, starveStartedMs_);
|
|
37
|
+
if (shouldYield) {
|
|
38
|
+
setTimeout(() => this.starveInternal(0, starveStartedMs), 0);
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
// Schedules remaining work as a microtask (using `Promise.resolve()` instead of `queueMicrotask()` for better compatibility (e.g. React Native))
|
|
42
|
+
void Promise.resolve(void 0).then(() => this.starveInternal(executionDepth + 1, starveStartedMs));
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/** NOTE We're also returning `starveStartedMs` to avoid having to call` Date.now()` twice */
|
|
46
|
+
shouldYieldToNextFrame(depth, starveStartedMs) {
|
|
47
|
+
// @ts-expect-error TODO improve this (at least the typing)
|
|
48
|
+
const reactRenderedThisFrame = window.__debugReactRenderedThisFrame;
|
|
49
|
+
if (reactRenderedThisFrame)
|
|
50
|
+
return { shouldYield: true, starveStartedMs };
|
|
51
|
+
if (depth >= this.maxNextTickBeforeTimer)
|
|
52
|
+
return { shouldYield: true, starveStartedMs };
|
|
53
|
+
const now = Date.now();
|
|
54
|
+
// TODO use actual FPS
|
|
55
|
+
if (now - starveStartedMs > 10)
|
|
56
|
+
return { shouldYield: true, starveStartedMs: now };
|
|
57
|
+
return { shouldYield: false, starveStartedMs };
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/** NOTE should only be used on Main Thread */
|
|
61
|
+
export class BackgroundScheduler {
|
|
62
|
+
constructor() {
|
|
63
|
+
this.running = false;
|
|
64
|
+
this.taskBuckets = new Scheduler.PriorityBuckets();
|
|
65
|
+
}
|
|
66
|
+
scheduleTask(task, priority) {
|
|
67
|
+
this.taskBuckets.scheduleTask(task, priority);
|
|
68
|
+
if (this.running === false) {
|
|
69
|
+
this.running = true;
|
|
70
|
+
this.starve();
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
doWork(idleDeadline) {
|
|
74
|
+
while (true) {
|
|
75
|
+
const task = getNextTask(this.taskBuckets);
|
|
76
|
+
if (task === undefined) {
|
|
77
|
+
this.running = false;
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
task();
|
|
82
|
+
if (navigator.scheduling.isInputPending() || idleDeadline.timeRemaining() <= 0.5) {
|
|
83
|
+
this.starve();
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
starve() {
|
|
90
|
+
requestIdleCallback((idleDeadline) => {
|
|
91
|
+
this.doWork(idleDeadline);
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
export class FallbackBackgroundScheduler {
|
|
96
|
+
constructor(systemFps = 60) {
|
|
97
|
+
this.systemFps = systemFps;
|
|
98
|
+
this.running = false;
|
|
99
|
+
this.taskBuckets = new Scheduler.PriorityBuckets();
|
|
100
|
+
/** Timestamp in milli seconds */
|
|
101
|
+
this.lastWitnessedFrame = 0;
|
|
102
|
+
this.timePerFrame = 1000 / this.systemFps;
|
|
103
|
+
// NOTE We keep this loop running (even if no tasks might be scheduled for a while)
|
|
104
|
+
// to optimize the latency for the next task that might be scheduled
|
|
105
|
+
this.loopRequestAnimationFrame();
|
|
106
|
+
}
|
|
107
|
+
scheduleTask(task, priority) {
|
|
108
|
+
this.taskBuckets.scheduleTask(task, priority);
|
|
109
|
+
if (this.running === false) {
|
|
110
|
+
this.running = true;
|
|
111
|
+
this.starve();
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
// TODO We should investigate a better implementation for Safari if possible
|
|
115
|
+
loopRequestAnimationFrame() {
|
|
116
|
+
// TODO use `_now` from requestAnimationFrame
|
|
117
|
+
requestAnimationFrame((_now) => {
|
|
118
|
+
// setInterval(() => {
|
|
119
|
+
this.lastWitnessedFrame = Date.now();
|
|
120
|
+
this.loopRequestAnimationFrame();
|
|
121
|
+
});
|
|
122
|
+
// }, this.timePerFrame)
|
|
123
|
+
}
|
|
124
|
+
starve() {
|
|
125
|
+
while (true) {
|
|
126
|
+
const task = getNextTask(this.taskBuckets);
|
|
127
|
+
if (task === undefined) {
|
|
128
|
+
this.running = false;
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
task();
|
|
133
|
+
if (this.getRemainingTimeMs() <= 0.5) {
|
|
134
|
+
this.starve();
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
getRemainingTimeMs() {
|
|
141
|
+
const now = Date.now();
|
|
142
|
+
const timeSinceLastFrame = now - this.lastWitnessedFrame;
|
|
143
|
+
return this.timePerFrame - timeSinceLastFrame;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* NOTE This implementation always prioritizes higher-priority tasks over lower priority tasks
|
|
148
|
+
* even if the lower priority task was scheduled first
|
|
149
|
+
*/
|
|
150
|
+
const getNextTask = (taskBuckets) => {
|
|
151
|
+
for (const [_, tasks] of taskBuckets.buckets) {
|
|
152
|
+
const task = tasks.shift();
|
|
153
|
+
if (task !== undefined)
|
|
154
|
+
return task;
|
|
155
|
+
}
|
|
156
|
+
};
|
|
157
|
+
export const reactAwareScheduler = () => new ReactAwareScheduler(2048);
|
|
158
|
+
export const backgroundScheduler = () => {
|
|
159
|
+
// Safari doesn't yet support `requestIdleCallback` and `navigator.scheduling.isInputPending`
|
|
160
|
+
// So we're falling back to a timer based scheduler
|
|
161
|
+
if (typeof window === 'undefined' ||
|
|
162
|
+
window.requestIdleCallback === undefined ||
|
|
163
|
+
navigator.scheduling?.isInputPending === undefined) {
|
|
164
|
+
return new FallbackBackgroundScheduler();
|
|
165
|
+
}
|
|
166
|
+
return new BackgroundScheduler();
|
|
167
|
+
};
|
|
168
|
+
//# sourceMappingURL=Scheduler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Scheduler.js","sourceRoot":"","sources":["../../src/effect/Scheduler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SchemaHash.d.ts","sourceRoot":"","sources":["../../../src/effect/Schema/SchemaHash.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,MAAM,uBAAuB,CAAA;AAEpD,eAAO,MAAM,IAAI,WAAY,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,KAAG,MAA0C,CAAA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export const hash = (schema) => hashCode(JSON.stringify(schema));
|
|
2
|
+
// Based on https://stackoverflow.com/a/7616484
|
|
3
|
+
const hashCode = (str) => {
|
|
4
|
+
let hash = 0, i, chr;
|
|
5
|
+
if (str.length === 0)
|
|
6
|
+
return hash;
|
|
7
|
+
for (i = 0; i < str.length; i++) {
|
|
8
|
+
// eslint-disable-next-line unicorn/prefer-code-point
|
|
9
|
+
chr = str.charCodeAt(i);
|
|
10
|
+
hash = (hash << 5) - hash + chr;
|
|
11
|
+
hash = Math.trunc(hash); // Convert to 32bit integer
|
|
12
|
+
}
|
|
13
|
+
return hash;
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=SchemaHash.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SchemaHash.js","sourceRoot":"","sources":["../../../src/effect/Schema/SchemaHash.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,MAA+B,EAAU,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAA;AAEjG,+CAA+C;AAC/C,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAE,EAAE;IAC/B,IAAI,IAAI,GAAG,CAAC,EACV,CAAC,EACD,GAAG,CAAA;IACL,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IACjC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC/B,qDAAqD;QACrD,GAAG,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;QACvB,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,GAAG,GAAG,CAAA;QAC/B,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA,CAAC,2BAA2B;KACpD;IACD,OAAO,IAAI,CAAA;AACb,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SchemaHash.test.d.ts","sourceRoot":"","sources":["../../../src/effect/Schema/SchemaHash.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import * as Schema from './index.js';
|
|
3
|
+
describe('SchemaHash', () => {
|
|
4
|
+
it('simple struct', () => {
|
|
5
|
+
const schema = Schema.struct({ a: Schema.number });
|
|
6
|
+
expect(Schema.hash(schema)).toMatchInlineSnapshot('-12736118826');
|
|
7
|
+
});
|
|
8
|
+
it('date transform', () => {
|
|
9
|
+
const schema = Schema.struct({ a: Schema.dateFromString });
|
|
10
|
+
expect(Schema.hash(schema)).toMatchInlineSnapshot('-25415217759');
|
|
11
|
+
});
|
|
12
|
+
});
|
|
13
|
+
//# sourceMappingURL=SchemaHash.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SchemaHash.test.js","sourceRoot":"","sources":["../../../src/effect/Schema/SchemaHash.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAE7C,OAAO,KAAK,MAAM,MAAM,YAAY,CAAA;AAEpC,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,EAAE,CAAC,eAAe,EAAE,GAAG,EAAE;QACvB,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAA;QAClD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,qBAAqB,CAAC,cAAc,CAAC,CAAA;IACnE,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,gBAAgB,EAAE,GAAG,EAAE;QACxB,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,cAAc,EAAE,CAAC,CAAA;QAC1D,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,qBAAqB,CAAC,cAAc,CAAC,CAAA;IACnE,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import * as Equal from '@effect/data/Equal';
|
|
2
|
+
import * as Hash from '@effect/data/Hash';
|
|
3
|
+
import * as Schema from '@effect/schema/Schema';
|
|
4
|
+
export declare class JsonWrapper<A> {
|
|
5
|
+
readonly value: A;
|
|
6
|
+
constructor(value: A);
|
|
7
|
+
[Hash.symbol](): number;
|
|
8
|
+
[Equal.symbol](that: Equal.Equal): boolean;
|
|
9
|
+
}
|
|
10
|
+
export declare const jsonWrapper: <I, A>(item: Schema.Schema<I, A>) => Schema.Schema<I, JsonWrapper<A>>;
|
|
11
|
+
//# sourceMappingURL=SchemaJsonWrapper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SchemaJsonWrapper.d.ts","sourceRoot":"","sources":["../../../src/effect/Schema/SchemaJsonWrapper.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,oBAAoB,CAAA;AAC3C,OAAO,KAAK,IAAI,MAAM,mBAAmB,CAAA;AAQzC,OAAO,KAAK,MAAM,MAAM,uBAAuB,CAAA;AAG/C,qBAAa,WAAW,CAAC,CAAC;IACZ,QAAQ,CAAC,KAAK,EAAE,CAAC;gBAAR,KAAK,EAAE,CAAC;IAC7B,CAAC,IAAI,CAAC,MAAM,CAAC;IAGb,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,GAAG,OAAO;CAG3C;AAgCD,eAAO,MAAM,WAAW,uEAMrB,CAAA"}
|