@effect-app/infra 4.0.0-beta.22 → 4.0.0-beta.221
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/CHANGELOG.md +1648 -0
- package/_check.sh +1 -1
- package/dist/CUPS.d.ts +12 -7
- package/dist/CUPS.d.ts.map +1 -1
- package/dist/CUPS.js +16 -12
- package/dist/Emailer/Sendgrid.d.ts +15 -15
- package/dist/Emailer/Sendgrid.d.ts.map +1 -1
- package/dist/Emailer/Sendgrid.js +20 -16
- package/dist/Emailer/fake.d.ts +1 -1
- package/dist/Emailer/fake.js +2 -2
- package/dist/Emailer/service.d.ts +13 -4
- package/dist/Emailer/service.d.ts.map +1 -1
- package/dist/Emailer/service.js +4 -3
- package/dist/Emailer.d.ts +1 -1
- package/dist/MainFiberSet.d.ts +12 -9
- package/dist/MainFiberSet.d.ts.map +1 -1
- package/dist/MainFiberSet.js +7 -3
- package/dist/Model/Repository/Registry.d.ts +21 -0
- package/dist/Model/Repository/Registry.d.ts.map +1 -0
- package/dist/Model/Repository/Registry.js +18 -0
- package/dist/Model/Repository/ext.d.ts +35 -16
- package/dist/Model/Repository/ext.d.ts.map +1 -1
- package/dist/Model/Repository/ext.js +60 -3
- package/dist/Model/Repository/internal/internal.d.ts +9 -6
- package/dist/Model/Repository/internal/internal.d.ts.map +1 -1
- package/dist/Model/Repository/internal/internal.js +115 -51
- package/dist/Model/Repository/legacy.d.ts +4 -2
- package/dist/Model/Repository/legacy.d.ts.map +1 -1
- package/dist/Model/Repository/makeRepo.d.ts +10 -6
- package/dist/Model/Repository/makeRepo.d.ts.map +1 -1
- package/dist/Model/Repository/makeRepo.js +5 -2
- package/dist/Model/Repository/service.d.ts +32 -24
- package/dist/Model/Repository/service.d.ts.map +1 -1
- package/dist/Model/Repository/validation.d.ts +47 -18
- package/dist/Model/Repository/validation.d.ts.map +1 -1
- package/dist/Model/Repository/validation.js +6 -6
- package/dist/Model/Repository.d.ts +2 -1
- package/dist/Model/Repository.d.ts.map +1 -1
- package/dist/Model/Repository.js +2 -1
- package/dist/Model/dsl.d.ts +6 -5
- package/dist/Model/dsl.d.ts.map +1 -1
- package/dist/Model/dsl.js +2 -3
- package/dist/Model/filter/filterApi.d.ts +5 -5
- package/dist/Model/filter/filterApi.d.ts.map +1 -1
- package/dist/Model/filter/types/errors.d.ts +1 -1
- package/dist/Model/filter/types/fields.d.ts +1 -1
- package/dist/Model/filter/types/path/common.d.ts +1 -1
- package/dist/Model/filter/types/path/eager.d.ts +1 -1
- package/dist/Model/filter/types/path/eager.d.ts.map +1 -1
- package/dist/Model/filter/types/path/eager.js +1 -1
- package/dist/Model/filter/types/path/index.d.ts +1 -1
- package/dist/Model/filter/types/utils.d.ts +1 -1
- package/dist/Model/filter/types/validator.d.ts +1 -1
- package/dist/Model/filter/types.d.ts +1 -1
- package/dist/Model/query/dsl.d.ts +142 -17
- package/dist/Model/query/dsl.d.ts.map +1 -1
- package/dist/Model/query/dsl.js +190 -5
- package/dist/Model/query/new-kid-interpreter.d.ts +77 -8
- package/dist/Model/query/new-kid-interpreter.d.ts.map +1 -1
- package/dist/Model/query/new-kid-interpreter.js +127 -6
- package/dist/Model/query.d.ts +1 -1
- package/dist/Model.d.ts +2 -1
- package/dist/Model.d.ts.map +1 -1
- package/dist/Model.js +2 -1
- package/dist/QueueMaker/SQLQueue.d.ts +7 -8
- package/dist/QueueMaker/SQLQueue.d.ts.map +1 -1
- package/dist/QueueMaker/SQLQueue.js +135 -117
- package/dist/QueueMaker/errors.d.ts +5 -3
- package/dist/QueueMaker/errors.d.ts.map +1 -1
- package/dist/QueueMaker/errors.js +4 -2
- package/dist/QueueMaker/memQueue.d.ts +9 -5
- package/dist/QueueMaker/memQueue.d.ts.map +1 -1
- package/dist/QueueMaker/memQueue.js +81 -65
- package/dist/QueueMaker/sbqueue.d.ts +8 -4
- package/dist/QueueMaker/sbqueue.d.ts.map +1 -1
- package/dist/QueueMaker/sbqueue.js +57 -55
- package/dist/QueueMaker/service.d.ts +4 -2
- package/dist/QueueMaker/service.d.ts.map +1 -1
- package/dist/QueueMaker/service.js +1 -1
- package/dist/RequestContext.d.ts +75 -35
- package/dist/RequestContext.d.ts.map +1 -1
- package/dist/RequestContext.js +14 -14
- package/dist/RequestFiberSet.d.ts +10 -7
- package/dist/RequestFiberSet.d.ts.map +1 -1
- package/dist/RequestFiberSet.js +8 -3
- package/dist/Store/ContextMapContainer.d.ts +22 -3
- package/dist/Store/ContextMapContainer.d.ts.map +1 -1
- package/dist/Store/ContextMapContainer.js +17 -3
- package/dist/Store/Cosmos/query.d.ts +7 -2
- package/dist/Store/Cosmos/query.d.ts.map +1 -1
- package/dist/Store/Cosmos/query.js +115 -35
- package/dist/Store/Cosmos.d.ts +2 -2
- package/dist/Store/Cosmos.d.ts.map +1 -1
- package/dist/Store/Cosmos.js +343 -244
- package/dist/Store/Disk.d.ts +3 -3
- package/dist/Store/Disk.d.ts.map +1 -1
- package/dist/Store/Disk.js +76 -36
- package/dist/Store/Memory.d.ts +7 -4
- package/dist/Store/Memory.d.ts.map +1 -1
- package/dist/Store/Memory.js +251 -58
- package/dist/Store/SQL/Pg.d.ts +4 -0
- package/dist/Store/SQL/Pg.d.ts.map +1 -0
- package/dist/Store/SQL/Pg.js +233 -0
- package/dist/Store/SQL/query.d.ts +43 -0
- package/dist/Store/SQL/query.d.ts.map +1 -0
- package/dist/Store/SQL/query.js +478 -0
- package/dist/Store/SQL.d.ts +21 -0
- package/dist/Store/SQL.d.ts.map +1 -0
- package/dist/Store/SQL.js +450 -0
- package/dist/Store/codeFilter.d.ts +2 -2
- package/dist/Store/codeFilter.d.ts.map +1 -1
- package/dist/Store/codeFilter.js +6 -3
- package/dist/Store/index.d.ts +6 -3
- package/dist/Store/index.d.ts.map +1 -1
- package/dist/Store/index.js +18 -4
- package/dist/Store/service.d.ts +26 -8
- package/dist/Store/service.d.ts.map +1 -1
- package/dist/Store/service.js +25 -6
- package/dist/Store/utils.d.ts +3 -2
- package/dist/Store/utils.d.ts.map +1 -1
- package/dist/Store/utils.js +5 -5
- package/dist/Store.d.ts +1 -1
- package/dist/adapters/SQL/Model.d.ts +32 -43
- package/dist/adapters/SQL/Model.d.ts.map +1 -1
- package/dist/adapters/SQL/Model.js +30 -39
- package/dist/adapters/SQL.d.ts +1 -1
- package/dist/adapters/ServiceBus.d.ts +14 -11
- package/dist/adapters/ServiceBus.d.ts.map +1 -1
- package/dist/adapters/ServiceBus.js +30 -21
- package/dist/adapters/cosmos-client.d.ts +5 -3
- package/dist/adapters/cosmos-client.d.ts.map +1 -1
- package/dist/adapters/cosmos-client.js +5 -3
- package/dist/adapters/index.d.ts +8 -2
- package/dist/adapters/index.d.ts.map +1 -1
- package/dist/adapters/index.js +8 -2
- package/dist/adapters/logger.d.ts +2 -2
- package/dist/adapters/logger.d.ts.map +1 -1
- package/dist/adapters/memQueue.d.ts +5 -3
- package/dist/adapters/memQueue.d.ts.map +1 -1
- package/dist/adapters/memQueue.js +6 -5
- package/dist/adapters/mongo-client.d.ts +4 -3
- package/dist/adapters/mongo-client.d.ts.map +1 -1
- package/dist/adapters/mongo-client.js +5 -3
- package/dist/adapters/redis-client.d.ts +6 -3
- package/dist/adapters/redis-client.d.ts.map +1 -1
- package/dist/adapters/redis-client.js +7 -3
- package/dist/api/ContextProvider.d.ts +12 -8
- package/dist/api/ContextProvider.d.ts.map +1 -1
- package/dist/api/ContextProvider.js +9 -7
- package/dist/api/codec.d.ts +1 -1
- package/dist/api/internal/RequestContextMiddleware.d.ts +3 -3
- package/dist/api/internal/RequestContextMiddleware.d.ts.map +1 -1
- package/dist/api/internal/RequestContextMiddleware.js +10 -6
- package/dist/api/internal/auth.d.ts +45 -7
- package/dist/api/internal/auth.d.ts.map +1 -1
- package/dist/api/internal/auth.js +162 -29
- package/dist/api/internal/events.d.ts +6 -4
- package/dist/api/internal/events.d.ts.map +1 -1
- package/dist/api/internal/events.js +16 -9
- package/dist/api/internal/health.d.ts +1 -1
- package/dist/api/layerUtils.d.ts +10 -6
- package/dist/api/layerUtils.d.ts.map +1 -1
- package/dist/api/layerUtils.js +7 -6
- package/dist/api/middlewares.d.ts +1 -1
- package/dist/api/reportError.d.ts +2 -2
- package/dist/api/reportError.d.ts.map +1 -1
- package/dist/api/reportError.js +3 -2
- package/dist/api/routing/middleware/RouterMiddleware.d.ts +5 -4
- package/dist/api/routing/middleware/RouterMiddleware.d.ts.map +1 -1
- package/dist/api/routing/middleware/middleware.d.ts +42 -3
- package/dist/api/routing/middleware/middleware.d.ts.map +1 -1
- package/dist/api/routing/middleware/middleware.js +53 -17
- package/dist/api/routing/middleware.d.ts +1 -2
- package/dist/api/routing/middleware.d.ts.map +1 -1
- package/dist/api/routing/middleware.js +1 -2
- package/dist/api/routing/schema/jwt.d.ts +1 -1
- package/dist/api/routing/schema/jwt.d.ts.map +1 -1
- package/dist/api/routing/schema/jwt.js +3 -2
- package/dist/api/routing/tsort.d.ts +1 -1
- package/dist/api/routing/tsort.d.ts.map +1 -1
- package/dist/api/routing/utils.d.ts +4 -4
- package/dist/api/routing/utils.d.ts.map +1 -1
- package/dist/api/routing/utils.js +3 -2
- package/dist/api/routing.d.ts +84 -37
- package/dist/api/routing.d.ts.map +1 -1
- package/dist/api/routing.js +115 -45
- package/dist/api/setupRequest.d.ts +10 -6
- package/dist/api/setupRequest.d.ts.map +1 -1
- package/dist/api/setupRequest.js +15 -7
- package/dist/api/util.d.ts +1 -1
- package/dist/arbs.d.ts +2 -2
- package/dist/arbs.d.ts.map +1 -1
- package/dist/arbs.js +5 -3
- package/dist/errorReporter.d.ts +7 -5
- package/dist/errorReporter.d.ts.map +1 -1
- package/dist/errorReporter.js +22 -26
- package/dist/errors.d.ts +1 -1
- package/dist/fileUtil.d.ts +2 -2
- package/dist/fileUtil.d.ts.map +1 -1
- package/dist/fileUtil.js +2 -2
- package/dist/index.d.ts +1 -1
- package/dist/logger/jsonLogger.d.ts +2 -2
- package/dist/logger/jsonLogger.d.ts.map +1 -1
- package/dist/logger/jsonLogger.js +4 -2
- package/dist/logger/logFmtLogger.d.ts +2 -2
- package/dist/logger/logFmtLogger.d.ts.map +1 -1
- package/dist/logger/logFmtLogger.js +2 -2
- package/dist/logger/shared.d.ts +2 -2
- package/dist/logger/shared.d.ts.map +1 -1
- package/dist/logger/shared.js +3 -3
- package/dist/logger.d.ts +1 -1
- package/dist/logger.d.ts.map +1 -1
- package/dist/otel.d.ts +75 -0
- package/dist/otel.d.ts.map +1 -0
- package/dist/otel.js +65 -0
- package/dist/rateLimit.d.ts +12 -4
- package/dist/rateLimit.d.ts.map +1 -1
- package/dist/rateLimit.js +7 -12
- package/dist/test.d.ts +3 -3
- package/dist/test.d.ts.map +1 -1
- package/dist/test.js +2 -2
- package/dist/vitest.d.ts +1 -1
- package/examples/query.ts +46 -38
- package/package.json +46 -37
- package/src/CUPS.ts +15 -11
- package/src/Emailer/Sendgrid.ts +21 -15
- package/src/Emailer/fake.ts +1 -1
- package/src/Emailer/service.ts +13 -3
- package/src/MainFiberSet.ts +9 -6
- package/src/Model/Repository/Registry.ts +34 -0
- package/src/Model/Repository/ext.ts +103 -11
- package/src/Model/Repository/internal/internal.ts +231 -149
- package/src/Model/Repository/legacy.ts +3 -1
- package/src/Model/Repository/makeRepo.ts +15 -10
- package/src/Model/Repository/service.ts +35 -23
- package/src/Model/Repository/validation.ts +5 -5
- package/src/Model/Repository.ts +1 -0
- package/src/Model/dsl.ts +5 -4
- package/src/Model/filter/types/path/eager.ts +1 -2
- package/src/Model/query/dsl.ts +353 -19
- package/src/Model/query/new-kid-interpreter.ts +211 -6
- package/src/Model.ts +1 -0
- package/src/QueueMaker/SQLQueue.ts +150 -153
- package/src/QueueMaker/errors.ts +3 -1
- package/src/QueueMaker/memQueue.ts +111 -105
- package/src/QueueMaker/sbqueue.ts +76 -88
- package/src/QueueMaker/service.ts +3 -1
- package/src/RequestContext.ts +15 -16
- package/src/RequestFiberSet.ts +8 -2
- package/src/Store/ContextMapContainer.ts +45 -2
- package/src/Store/Cosmos/query.ts +143 -44
- package/src/Store/Cosmos.ts +491 -350
- package/src/Store/Disk.ts +106 -66
- package/src/Store/Memory.ts +285 -87
- package/src/Store/SQL/Pg.ts +364 -0
- package/src/Store/SQL/query.ts +540 -0
- package/src/Store/SQL.ts +736 -0
- package/src/Store/codeFilter.ts +5 -2
- package/src/Store/index.ts +20 -3
- package/src/Store/service.ts +45 -10
- package/src/Store/utils.ts +25 -23
- package/src/adapters/SQL/Model.ts +42 -41
- package/src/adapters/ServiceBus.ts +131 -121
- package/src/adapters/cosmos-client.ts +4 -2
- package/src/adapters/index.ts +7 -0
- package/src/adapters/memQueue.ts +5 -4
- package/src/adapters/mongo-client.ts +4 -2
- package/src/adapters/redis-client.ts +6 -2
- package/src/api/ContextProvider.ts +17 -13
- package/src/api/internal/RequestContextMiddleware.ts +16 -5
- package/src/api/internal/auth.ts +248 -44
- package/src/api/internal/events.ts +19 -10
- package/src/api/layerUtils.ts +12 -8
- package/src/api/reportError.ts +2 -1
- package/src/api/routing/middleware/RouterMiddleware.ts +5 -4
- package/src/api/routing/middleware/middleware.ts +60 -15
- package/src/api/routing/middleware.ts +0 -2
- package/src/api/routing/schema/jwt.ts +2 -1
- package/src/api/routing/utils.ts +2 -1
- package/src/api/routing.ts +304 -131
- package/src/api/setupRequest.ts +31 -8
- package/src/arbs.ts +5 -3
- package/src/errorReporter.ts +65 -75
- package/src/fileUtil.ts +1 -1
- package/src/logger/jsonLogger.ts +3 -1
- package/src/logger/logFmtLogger.ts +1 -1
- package/src/logger/shared.ts +3 -2
- package/src/otel.ts +152 -0
- package/src/rateLimit.ts +34 -23
- package/src/test.ts +2 -2
- package/test/auth.test.ts +101 -0
- package/test/contextProvider.test.ts +14 -11
- package/test/controller.test.ts +25 -29
- package/test/dist/auth.test.d.ts.map +1 -0
- package/test/dist/contextProvider.test.d.ts.map +1 -1
- package/test/dist/controller.test.d.ts.map +1 -1
- package/test/dist/date-query.test.d.ts.map +1 -0
- package/test/dist/fixtures.d.ts +30 -12
- package/test/dist/fixtures.d.ts.map +1 -1
- package/test/dist/fixtures.js +17 -10
- package/test/dist/query.test.d.ts.map +1 -1
- package/test/dist/rawQuery.test.d.ts.map +1 -1
- package/test/dist/repository-ext.test.d.ts.map +1 -0
- package/test/dist/requires.test.d.ts.map +1 -1
- package/test/dist/router-generator.test.d.ts.map +1 -0
- package/test/dist/routing-interruptibility.test.d.ts.map +1 -0
- package/test/dist/rpc-e2e-invalidation.test.d.ts.map +1 -0
- package/test/dist/rpc-multi-middleware.test.d.ts.map +1 -1
- package/test/dist/rpc-stream-fullstack.test.d.ts.map +1 -0
- package/test/dist/sql-store.test.d.ts.map +1 -0
- package/test/fixtures.ts +16 -9
- package/test/layerUtils.test.ts +1 -1
- package/test/query.test.ts +819 -38
- package/test/rawQuery.test.ts +312 -20
- package/test/repository-ext.test.ts +62 -0
- package/test/requires.test.ts +10 -5
- package/test/router-generator.test.ts +187 -0
- package/test/routing-interruptibility.test.ts +66 -0
- package/test/rpc-e2e-invalidation.test.ts +256 -0
- package/test/rpc-multi-middleware.test.ts +84 -9
- package/test/rpc-stream-fullstack.test.ts +304 -0
- package/test/sql-store.test.ts +1592 -0
- package/test/validateSample.test.ts +17 -12
- package/tsconfig.examples.json +1 -1
- package/tsconfig.json +0 -1
- package/tsconfig.json.bak +2 -2
- package/tsconfig.src.json +35 -35
- package/tsconfig.test.json +2 -2
- package/dist/Operations.d.ts +0 -55
- package/dist/Operations.d.ts.map +0 -1
- package/dist/Operations.js +0 -102
- package/dist/OperationsRepo.d.ts +0 -41
- package/dist/OperationsRepo.d.ts.map +0 -1
- package/dist/OperationsRepo.js +0 -14
- package/eslint.config.mjs +0 -24
- package/src/Operations.ts +0 -235
- package/src/OperationsRepo.ts +0 -16
package/_check.sh
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
2
|
cd /home/patroza/pj/effect-app/libs
|
|
3
|
-
./node_modules/.bin/tsc -p packages/infra/tsconfig.src.json --noEmit 2>&1 | grep -E "(internal\.ts|
|
|
3
|
+
./node_modules/.bin/tsc -p packages/infra/tsconfig.src.json --noEmit 2>&1 | grep -E "(internal\.ts|SQLQueue\.ts|memQueue\.ts|sbqueue\.ts)" | head -100
|
package/dist/CUPS.d.ts
CHANGED
|
@@ -1,14 +1,19 @@
|
|
|
1
1
|
import { type FileOptions } from "@effect-app/infra/fileUtil";
|
|
2
|
-
import
|
|
3
|
-
|
|
2
|
+
import * as Config from "effect-app/Config";
|
|
3
|
+
import * as Context from "effect-app/Context";
|
|
4
|
+
import * as Effect from "effect-app/Effect";
|
|
5
|
+
import * as Layer from "effect-app/Layer";
|
|
6
|
+
import * as Option from "effect-app/Option";
|
|
7
|
+
import * as S from "effect-app/Schema";
|
|
8
|
+
export declare const PrinterId: S.WithDefaults<import("effect-app/Schema/brand").BrandedSchema<import("effect/Schema").NonEmptyString, S.NonEmptyString255>> & import("effect-app/Schema/brand").BrandedSchema<import("effect/Schema").NonEmptyString, S.NonEmptyString255>;
|
|
4
9
|
export type PrinterId = S.NonEmptyString255;
|
|
5
10
|
export declare const prepareTempDir: Effect.Effect<void, never, never>;
|
|
6
|
-
export declare const makePrintJobTempFile: (data: string |
|
|
11
|
+
export declare const makePrintJobTempFile: (data: string | AsyncIterable<string | NodeJS.ArrayBufferView<ArrayBufferLike>> | Iterable<string | NodeJS.ArrayBufferView<ArrayBufferLike>> | import("node:stream") | NodeJS.ArrayBufferView<ArrayBufferLike>, options?: FileOptions) => Effect.Effect<string, import("effect/Cause").UnknownError, import("effect/Scope").Scope>;
|
|
7
12
|
export declare const makePrintJobTempFileArrayBuffer: (buffer: ArrayBuffer, options?: FileOptions) => Effect.Effect<string, import("effect/Cause").UnknownError, import("effect/Scope").Scope>;
|
|
8
13
|
export declare const CUPSConfig: Config.Config<{
|
|
9
14
|
server: Option.Option<import("node:url").URL>;
|
|
10
15
|
}>;
|
|
11
|
-
declare const CUPS_base:
|
|
16
|
+
declare const CUPS_base: Context.ServiceClass<CUPS, "effect-app/CUPS", {
|
|
12
17
|
print: (buffer: ArrayBuffer, printerId: PrinterId, ...options: string[]) => Effect.Effect<{
|
|
13
18
|
stdout: string;
|
|
14
19
|
stderr: string;
|
|
@@ -17,7 +22,7 @@ declare const CUPS_base: ServiceMap.ServiceClass<CUPS, "effect-app/CUPS", {
|
|
|
17
22
|
stdout: string;
|
|
18
23
|
stderr: string;
|
|
19
24
|
}, import("effect/Cause").UnknownError, never>;
|
|
20
|
-
getAvailablePrinters: Effect.Effect<
|
|
25
|
+
getAvailablePrinters: Effect.Effect<S.NonEmptyString255[], import("effect/Cause").UnknownError, never>;
|
|
21
26
|
}> & {
|
|
22
27
|
readonly make: Effect.Effect<{
|
|
23
28
|
print: (buffer: ArrayBuffer, printerId: PrinterId, ...options: string[]) => Effect.Effect<{
|
|
@@ -28,11 +33,11 @@ declare const CUPS_base: ServiceMap.ServiceClass<CUPS, "effect-app/CUPS", {
|
|
|
28
33
|
stdout: string;
|
|
29
34
|
stderr: string;
|
|
30
35
|
}, import("effect/Cause").UnknownError, never>;
|
|
31
|
-
getAvailablePrinters: Effect.Effect<
|
|
36
|
+
getAvailablePrinters: Effect.Effect<S.NonEmptyString255[], import("effect/Cause").UnknownError, never>;
|
|
32
37
|
}, Config.ConfigError, never>;
|
|
33
38
|
};
|
|
34
39
|
export declare class CUPS extends CUPS_base {
|
|
35
40
|
static readonly Fake: Layer.Layer<CUPS, never, never>;
|
|
36
41
|
}
|
|
37
42
|
export {};
|
|
38
|
-
//# sourceMappingURL=
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ1VQUy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL0NVUFMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssV0FBVyxFQUFZLE1BQU0sNEJBQTRCLENBQUE7QUFFdkUsT0FBTyxLQUFLLE1BQU0sTUFBTSxtQkFBbUIsQ0FBQTtBQUMzQyxPQUFPLEtBQUssT0FBTyxNQUFNLG9CQUFvQixDQUFBO0FBQzdDLE9BQU8sS0FBSyxNQUFNLE1BQU0sbUJBQW1CLENBQUE7QUFDM0MsT0FBTyxLQUFLLEtBQUssTUFBTSxrQkFBa0IsQ0FBQTtBQUN6QyxPQUFPLEtBQUssTUFBTSxNQUFNLG1CQUFtQixDQUFBO0FBQzNDLE9BQU8sS0FBSyxDQUFDLE1BQU0sbUJBQW1CLENBQUE7QUFTdEMsZUFBTyxNQUFNLFNBQVMsNk9BQXNCLENBQUE7QUFDNUMsTUFBTSxNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUMsaUJBQWlCLENBQUE7QUF1QzNDLGVBQU8sTUFBTSxjQUFjLG1DQVV6QixDQUFBO0FBR0YsZUFBTyxNQUFNLG9CQUFvQixvVUFBNEIsQ0FBQTtBQUM3RCxlQUFPLE1BQU0sK0JBQStCLFdBQVksV0FBVyxZQUFZLFdBQVcsNkZBQ3RDLENBQUE7QUF5QnBELGVBQU8sTUFBTSxVQUFVOztFQVFyQixDQUFBOztvQkFNeUIsV0FBVyxhQUFhLFNBQVMsY0FBYyxNQUFNLEVBQUU7Ozs7MEJBU3RELE1BQU0sYUFBYSxTQUFTLGNBQWMsTUFBTSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFiOUUscUJBQWEsSUFBSyxTQUFRLFNBcUJ4QjtJQUNBLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxrQ0ErQm5CO0NBQ0YifQ==
|
package/dist/CUPS.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CUPS.d.ts","sourceRoot":"","sources":["../src/CUPS.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAY,MAAM,4BAA4B,CAAA;AAEvE,OAAO,
|
|
1
|
+
{"version":3,"file":"CUPS.d.ts","sourceRoot":"","sources":["../src/CUPS.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAY,MAAM,4BAA4B,CAAA;AAEvE,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAC3C,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAA;AAC7C,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAC3C,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAA;AACzC,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAC3C,OAAO,KAAK,CAAC,MAAM,mBAAmB,CAAA;AAStC,eAAO,MAAM,SAAS,6OAAsB,CAAA;AAC5C,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,iBAAiB,CAAA;AAuC3C,eAAO,MAAM,cAAc,mCAUzB,CAAA;AAGF,eAAO,MAAM,oBAAoB,oUAA4B,CAAA;AAC7D,eAAO,MAAM,+BAA+B,WAAY,WAAW,YAAY,WAAW,6FACtC,CAAA;AAyBpD,eAAO,MAAM,UAAU;;EAQrB,CAAA;;oBAMyB,WAAW,aAAa,SAAS,cAAc,MAAM,EAAE;;;;0BAStD,MAAM,aAAa,SAAS,cAAc,MAAM,EAAE;;;;;;;;;;;;;;;;;;AAb9E,qBAAa,IAAK,SAAQ,SAqBxB;IACA,MAAM,CAAC,QAAQ,CAAC,IAAI,kCA+BnB;CACF"}
|
package/dist/CUPS.js
CHANGED
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
import { tempFile } from "@effect-app/infra/fileUtil";
|
|
2
2
|
import cp from "child_process";
|
|
3
|
-
import
|
|
3
|
+
import * as Config from "effect-app/Config";
|
|
4
|
+
import * as Context from "effect-app/Context";
|
|
5
|
+
import * as Effect from "effect-app/Effect";
|
|
6
|
+
import * as Layer from "effect-app/Layer";
|
|
7
|
+
import * as Option from "effect-app/Option";
|
|
8
|
+
import * as S from "effect-app/Schema";
|
|
4
9
|
import { pretty } from "effect-app/utils";
|
|
10
|
+
import * as Predicate from "effect/Predicate";
|
|
5
11
|
import fs from "fs";
|
|
6
12
|
import os from "os";
|
|
7
13
|
import path from "path";
|
|
@@ -51,15 +57,13 @@ function printBuffer(printer, options) {
|
|
|
51
57
|
return (buffer) => makePrintJobTempFileArrayBuffer(buffer)
|
|
52
58
|
.pipe(Effect.flatMap(printFile(printer, options)), Effect.scoped);
|
|
53
59
|
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
});
|
|
62
|
-
}
|
|
60
|
+
const getAvailablePrinters = Effect.fnUntraced(function* (host) {
|
|
61
|
+
const { stdout } = yield* exec(["lpstat", ...buildListArgs({ host }), "-s"].join(" "));
|
|
62
|
+
return [...stdout.matchAll(/device for (\w+):/g)]
|
|
63
|
+
.map((_) => _[1])
|
|
64
|
+
.filter(Predicate.isNotNullish)
|
|
65
|
+
.map((_) => S.NonEmptyString255(_));
|
|
66
|
+
});
|
|
63
67
|
function* buildListArgs(config) {
|
|
64
68
|
if (config?.host) {
|
|
65
69
|
yield `-h ${config.host}`;
|
|
@@ -70,7 +74,7 @@ export const CUPSConfig = Config.all({
|
|
|
70
74
|
.string("server")
|
|
71
75
|
.pipe(Config.map((s) => new URL(s)), Config.option, Config.nested("cups"))
|
|
72
76
|
});
|
|
73
|
-
export class CUPS extends
|
|
77
|
+
export class CUPS extends Context.Service()("effect-app/CUPS", {
|
|
74
78
|
make: Effect.gen(function* () {
|
|
75
79
|
const config = yield* CUPSConfig;
|
|
76
80
|
const serverUrl = Option.getOrUndefined(config.server);
|
|
@@ -111,4 +115,4 @@ export class CUPS extends ServiceMap.Service()("effect-app/CUPS", {
|
|
|
111
115
|
getAvailablePrinters: Effect.sync(() => [])
|
|
112
116
|
})));
|
|
113
117
|
}
|
|
114
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
118
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ1VQUy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9DVVBTLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBb0IsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUE7QUFDdkUsT0FBTyxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQzlCLE9BQU8sS0FBSyxNQUFNLE1BQU0sbUJBQW1CLENBQUE7QUFDM0MsT0FBTyxLQUFLLE9BQU8sTUFBTSxvQkFBb0IsQ0FBQTtBQUM3QyxPQUFPLEtBQUssTUFBTSxNQUFNLG1CQUFtQixDQUFBO0FBQzNDLE9BQU8sS0FBSyxLQUFLLE1BQU0sa0JBQWtCLENBQUE7QUFDekMsT0FBTyxLQUFLLE1BQU0sTUFBTSxtQkFBbUIsQ0FBQTtBQUMzQyxPQUFPLEtBQUssQ0FBQyxNQUFNLG1CQUFtQixDQUFBO0FBQ3RDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUN6QyxPQUFPLEtBQUssU0FBUyxNQUFNLGtCQUFrQixDQUFBO0FBQzdDLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQTtBQUNuQixPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUE7QUFDbkIsT0FBTyxJQUFJLE1BQU0sTUFBTSxDQUFBO0FBQ3ZCLE9BQU8sSUFBSSxNQUFNLE1BQU0sQ0FBQTtBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBRXpDLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUMsaUJBQWlCLENBQUE7QUFHNUMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUE7QUFDckMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxPQUFlLEVBQUUsRUFBRSxDQUMvQixNQUFNLENBQUMsT0FBTyxDQUNaLFdBQVcsQ0FBQyxRQUFRLENBQUMsY0FBYyxPQUFPLEVBQUUsQ0FBQyxFQUM3QyxNQUFNLENBQUMsR0FBRyxDQUNSLE1B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
|
|
@@ -1,15 +1,12 @@
|
|
|
1
1
|
import type { EmailData } from "@sendgrid/helpers/classes/email-address.js";
|
|
2
2
|
import type { MailContent } from "@sendgrid/helpers/classes/mail.js";
|
|
3
|
-
import
|
|
3
|
+
import * as Array from "effect-app/Array";
|
|
4
4
|
import { Emailer, type EmailMsg, type SendgridConfig } from "./service.js";
|
|
5
5
|
export declare function Sendgrid(config: SendgridConfig): import("effect/Layer").Layer<Emailer, never, never>;
|
|
6
6
|
/**
|
|
7
7
|
* @hidden
|
|
8
8
|
*/
|
|
9
|
-
export declare function renderMessage(forceFake: boolean): (msg: EmailMsg) => {
|
|
10
|
-
to: EmailData | EmailData[];
|
|
11
|
-
cc: EmailData | EmailData[];
|
|
12
|
-
bcc: EmailData | EmailData[];
|
|
9
|
+
export declare function renderMessage(forceFake: boolean, fakeMailAddress: string): (msg: EmailMsg) => {
|
|
13
10
|
replyTo?: EmailData;
|
|
14
11
|
sendAt?: number;
|
|
15
12
|
subject?: string;
|
|
@@ -45,10 +42,10 @@ export declare function renderMessage(forceFake: boolean): (msg: EmailMsg) => {
|
|
|
45
42
|
hideWarnings?: boolean;
|
|
46
43
|
replyToList?: import("@sendgrid/helpers/classes/email-address.js").EmailJSON | import("@sendgrid/helpers/classes/email-address.js").EmailJSON[];
|
|
47
44
|
from: import("./service.js").EmailData;
|
|
45
|
+
to: EmailData[] | EmailData;
|
|
46
|
+
cc: EmailData[] | EmailData;
|
|
47
|
+
bcc: EmailData[] | EmailData;
|
|
48
48
|
} | {
|
|
49
|
-
to: EmailData | EmailData[];
|
|
50
|
-
cc: EmailData | EmailData[];
|
|
51
|
-
bcc: EmailData | EmailData[];
|
|
52
49
|
replyTo?: EmailData;
|
|
53
50
|
sendAt?: number;
|
|
54
51
|
subject?: string;
|
|
@@ -84,10 +81,10 @@ export declare function renderMessage(forceFake: boolean): (msg: EmailMsg) => {
|
|
|
84
81
|
hideWarnings?: boolean;
|
|
85
82
|
replyToList?: import("@sendgrid/helpers/classes/email-address.js").EmailJSON | import("@sendgrid/helpers/classes/email-address.js").EmailJSON[];
|
|
86
83
|
from: import("./service.js").EmailData;
|
|
84
|
+
to: EmailData[] | EmailData;
|
|
85
|
+
cc: EmailData[] | EmailData;
|
|
86
|
+
bcc: EmailData[] | EmailData;
|
|
87
87
|
} | {
|
|
88
|
-
to: EmailData | EmailData[];
|
|
89
|
-
cc: EmailData | EmailData[];
|
|
90
|
-
bcc: EmailData | EmailData[];
|
|
91
88
|
replyTo?: EmailData;
|
|
92
89
|
sendAt?: number;
|
|
93
90
|
subject?: string;
|
|
@@ -123,10 +120,10 @@ export declare function renderMessage(forceFake: boolean): (msg: EmailMsg) => {
|
|
|
123
120
|
hideWarnings?: boolean;
|
|
124
121
|
replyToList?: import("@sendgrid/helpers/classes/email-address.js").EmailJSON | import("@sendgrid/helpers/classes/email-address.js").EmailJSON[];
|
|
125
122
|
from: import("./service.js").EmailData;
|
|
123
|
+
to: EmailData[] | EmailData;
|
|
124
|
+
cc: EmailData[] | EmailData;
|
|
125
|
+
bcc: EmailData[] | EmailData;
|
|
126
126
|
} | {
|
|
127
|
-
to: EmailData | EmailData[];
|
|
128
|
-
cc: EmailData | EmailData[];
|
|
129
|
-
bcc: EmailData | EmailData[];
|
|
130
127
|
replyTo?: EmailData;
|
|
131
128
|
sendAt?: number;
|
|
132
129
|
subject?: string;
|
|
@@ -163,9 +160,12 @@ export declare function renderMessage(forceFake: boolean): (msg: EmailMsg) => {
|
|
|
163
160
|
replyToList?: import("@sendgrid/helpers/classes/email-address.js").EmailJSON | import("@sendgrid/helpers/classes/email-address.js").EmailJSON[];
|
|
164
161
|
from: import("./service.js").EmailData;
|
|
165
162
|
content: Array.NonEmptyReadonlyArray<MailContent>;
|
|
163
|
+
to: EmailData[] | EmailData;
|
|
164
|
+
cc: EmailData[] | EmailData;
|
|
165
|
+
bcc: EmailData[] | EmailData;
|
|
166
166
|
};
|
|
167
167
|
/**
|
|
168
168
|
* @hidden
|
|
169
169
|
*/
|
|
170
170
|
export declare function isTestAddress(to: EmailData): boolean;
|
|
171
|
-
//# sourceMappingURL=
|
|
171
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VuZGdyaWQuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9FbWFpbGVyL1NlbmRncmlkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLDRDQUE0QyxDQUFBO0FBQzNFLE9BQU8sS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1DQUFtQyxDQUFBO0FBRXBFLE9BQU8sS0FBSyxLQUFLLE1BQU0sa0JBQWtCLENBQUE7QUFPekMsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLFFBQVEsRUFBNkIsS0FBSyxjQUFjLEVBQWlCLE1BQU0sY0FBYyxDQUFBO0FBMERwSCx3QkFBZ0IsUUFBUSxDQUFDLE1BQU0sRUFBRSxjQUFjLHVEQUU5QztBQUVEOztHQUVHO0FBQ0gsd0JBQWdCLGFBQWEsQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFNBWTdELFFBQVE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFPbkI7QUFFRDs7R0FFRztBQUNILHdCQUFnQixhQUFhLENBQUMsRUFBRSxFQUFFLFNBQVMsV0FPMUMifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Sendgrid.d.ts","sourceRoot":"","sources":["../../src/Emailer/Sendgrid.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4CAA4C,CAAA;AAC3E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAA;AAEpE,OAAO,
|
|
1
|
+
{"version":3,"file":"Sendgrid.d.ts","sourceRoot":"","sources":["../../src/Emailer/Sendgrid.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4CAA4C,CAAA;AAC3E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAA;AAEpE,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAA;AAOzC,OAAO,EAAE,OAAO,EAAE,KAAK,QAAQ,EAA6B,KAAK,cAAc,EAAiB,MAAM,cAAc,CAAA;AA0DpH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,cAAc,uDAE9C;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,SAY7D,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAOnB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,SAAS,WAO1C"}
|
package/dist/Emailer/Sendgrid.js
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import sgMail from "@sendgrid/mail";
|
|
2
|
-
import
|
|
2
|
+
import * as Array from "effect-app/Array";
|
|
3
|
+
import * as Effect from "effect-app/Effect";
|
|
3
4
|
import { dropUndefinedT } from "effect-app/utils";
|
|
5
|
+
import * as Equivalence from "effect/Equivalence";
|
|
6
|
+
import * as Redacted from "effect/Redacted";
|
|
4
7
|
import { inspect } from "util";
|
|
5
8
|
import { InfraLogger } from "../logger.js";
|
|
6
9
|
import { Emailer, SendMailError } from "./service.js";
|
|
7
|
-
const makeSendgrid = ({ apiKey, defaultFrom, defaultReplyTo, realMail, subjectPrefix }) => Effect.sync(() => {
|
|
10
|
+
const makeSendgrid = ({ apiKey, defaultFrom, defaultReplyTo, fakeMailAddress, realMail, subjectPrefix }) => Effect.sync(() => {
|
|
8
11
|
sgMail.setApiKey(Redacted.value(apiKey));
|
|
9
12
|
return Emailer.of({
|
|
10
13
|
sendMail: Effect.fn("Sendgrid.sendMail")(function* (msg_) {
|
|
@@ -13,7 +16,7 @@ const makeSendgrid = ({ apiKey, defaultFrom, defaultReplyTo, realMail, subjectPr
|
|
|
13
16
|
from: msg_.from ?? defaultFrom,
|
|
14
17
|
replyTo: msg_.replyTo ?? (msg_.from ? undefined : defaultReplyTo)
|
|
15
18
|
});
|
|
16
|
-
const render = renderMessage(!realMail);
|
|
19
|
+
const render = renderMessage(!realMail, fakeMailAddress);
|
|
17
20
|
const renderedMsg_ = render(msg);
|
|
18
21
|
const renderedMsg = {
|
|
19
22
|
...renderedMsg_,
|
|
@@ -48,21 +51,22 @@ export function Sendgrid(config) {
|
|
|
48
51
|
/**
|
|
49
52
|
* @hidden
|
|
50
53
|
*/
|
|
51
|
-
export function renderMessage(forceFake) {
|
|
54
|
+
export function renderMessage(forceFake, fakeMailAddress) {
|
|
52
55
|
let i = 0;
|
|
53
56
|
const makeId = () => i++;
|
|
57
|
+
const makeFakeEmail = () => fakeMailAddress.replace("{i}", String(makeId()));
|
|
54
58
|
return forceFake
|
|
55
59
|
? (msg) => dropUndefinedT({
|
|
56
60
|
...msg,
|
|
57
|
-
to: msg.to && renderFake(msg.to,
|
|
58
|
-
cc: msg.cc && renderFake(msg.cc,
|
|
59
|
-
bcc: msg.bcc && renderFake(msg.bcc,
|
|
61
|
+
to: msg.to && renderFake(msg.to, makeFakeEmail),
|
|
62
|
+
cc: msg.cc && renderFake(msg.cc, makeFakeEmail),
|
|
63
|
+
bcc: msg.bcc && renderFake(msg.bcc, makeFakeEmail)
|
|
60
64
|
})
|
|
61
65
|
: (msg) => dropUndefinedT({
|
|
62
66
|
...msg,
|
|
63
|
-
to: msg.to && renderFakeIfTest(msg.to,
|
|
64
|
-
cc: msg.cc && renderFakeIfTest(msg.cc,
|
|
65
|
-
bcc: msg.bcc && renderFakeIfTest(msg.bcc,
|
|
67
|
+
to: msg.to && renderFakeIfTest(msg.to, makeFakeEmail),
|
|
68
|
+
cc: msg.cc && renderFakeIfTest(msg.cc, makeFakeEmail),
|
|
69
|
+
bcc: msg.bcc && renderFakeIfTest(msg.bcc, makeFakeEmail)
|
|
66
70
|
});
|
|
67
71
|
}
|
|
68
72
|
/**
|
|
@@ -74,10 +78,10 @@ export function isTestAddress(to) {
|
|
|
74
78
|
&& "email" in to
|
|
75
79
|
&& to.email.toLowerCase().endsWith(".test")));
|
|
76
80
|
}
|
|
77
|
-
function renderFake(addr,
|
|
81
|
+
function renderFake(addr, makeEmail) {
|
|
78
82
|
return {
|
|
79
83
|
name: renderMailData(addr),
|
|
80
|
-
email:
|
|
84
|
+
email: makeEmail()
|
|
81
85
|
};
|
|
82
86
|
}
|
|
83
87
|
const eq = Equivalence.mapInput(Equivalence.String, (to) => typeof to === "string" ? to.toLowerCase() : to.email.toLowerCase());
|
|
@@ -86,11 +90,11 @@ function isEmailDataArray(md) {
|
|
|
86
90
|
}
|
|
87
91
|
// TODO: should just not add any already added email address
|
|
88
92
|
// https://stackoverflow.com/a/53603076/11595834
|
|
89
|
-
function renderFakeIfTest(addr,
|
|
93
|
+
function renderFakeIfTest(addr, makeEmail) {
|
|
90
94
|
if (isEmailDataArray(addr)) {
|
|
91
|
-
return Array.dedupeWith(addr.map((x) => (isTestAddress(x) ? renderFake(x,
|
|
95
|
+
return Array.dedupeWith(addr.map((x) => (isTestAddress(x) ? renderFake(x, makeEmail) : x)), eq);
|
|
92
96
|
}
|
|
93
|
-
return isTestAddress(addr) ? renderFake(addr,
|
|
97
|
+
return isTestAddress(addr) ? renderFake(addr, makeEmail) : addr;
|
|
94
98
|
}
|
|
95
99
|
function renderMailData(md) {
|
|
96
100
|
if (isEmailDataArray(md)) {
|
|
@@ -101,4 +105,4 @@ function renderMailData(md) {
|
|
|
101
105
|
}
|
|
102
106
|
return md.email;
|
|
103
107
|
}
|
|
104
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
108
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VuZGdyaWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvRW1haWxlci9TZW5kZ3JpZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLE1BQU0sTUFBTSxnQkFBZ0IsQ0FBQTtBQUNuQyxPQUFPLEtBQUssS0FBSyxNQUFNLGtCQUFrQixDQUFBO0FBQ3pDLE9BQU8sS0FBSyxNQUFNLE1BQU0sbUJBQW1CLENBQUE7QUFDM0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBQ2pELE9BQU8sS0FBSyxXQUFXLE1BQU0sb0JBQW9CLENBQUE7QUFDakQsT0FBTyxLQUFLLFFBQVEsTUFBTSxpQkFBaUIsQ0FBQTtBQUMzQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQzlCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFDMUMsT0FBTyxFQUFFLE9BQU8sRUFBaUUsYUFBYSxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBRXBILE1BQU0sWUFBWSxHQUFHLENBQ25CLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQWtCLEVBQ2pHLEVBQUUsQ0FDRixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtJQUNmLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFBO0lBRXhDLE9BQU8sT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNoQixRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFDLElBQTBCO1lBQzNFLE1BQU0sR0FBRyxHQUFhLGNBQWMsQ0FBQztnQkFDbkMsR0FBRyxJQUFJO2dCQUNQLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxJQUFJLFdBQVc7Z0JBQzlCLE9BQU8sRUFBRSxJQUFJLENB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
|
package/dist/Emailer/fake.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { Emailer } from "./service.js";
|
|
2
2
|
export declare const FakeSendgrid: import("effect/Layer").Layer<Emailer, never, never>;
|
|
3
|
-
//# sourceMappingURL=
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFrZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL0VtYWlsZXIvZmFrZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBY3RDLGVBQU8sTUFBTSxZQUFZLHFEQUE0QixDQUFBIn0=
|
package/dist/Emailer/fake.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as Effect from "effect-app/Effect";
|
|
2
2
|
import { pretty } from "effect-app/utils";
|
|
3
3
|
import { InfraLogger } from "../logger.js";
|
|
4
4
|
import { Emailer } from "./service.js";
|
|
@@ -10,4 +10,4 @@ const makeFake = InfraLogger
|
|
|
10
10
|
.pipe(Effect.annotateLogs("msg", pretty(msg))))
|
|
11
11
|
})));
|
|
12
12
|
export const FakeSendgrid = Emailer.toLayer(makeFake);
|
|
13
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFrZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9FbWFpbGVyL2Zha2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE1BQU0sTUFBTSxtQkFBbUIsQ0FBQTtBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDekMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUMxQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBRXRDLE1BQU0sUUFBUSxHQUFHLFdBQVc7S0FDekIsT0FBTyxDQUFDLDhCQUE4QixDQUFDO0tBQ3ZDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUNwQixPQUFPLENBQUMsRUFBRSxDQUFDO0lBQ1QsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUMzQyxXQUFXO1NBQ1IsUUFBUSxDQUFDLGdCQUFnQixDQUFDO1NBQzFCLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUNqRDtDQUNGLENBQUMsQ0FDSCxDQUFDLENBQUE7QUFFSixNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQSJ9
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import type { MailContent, MailData } from "@sendgrid/helpers/classes/mail.js";
|
|
2
2
|
import type { ResponseError } from "@sendgrid/mail";
|
|
3
|
-
import
|
|
3
|
+
import type { NonEmptyReadonlyArray } from "effect-app/Array";
|
|
4
|
+
import * as Context from "effect-app/Context";
|
|
5
|
+
import type * as Effect from "effect-app/Effect";
|
|
4
6
|
import type { Email } from "effect-app/Schema";
|
|
7
|
+
import type * as Redacted from "effect/Redacted";
|
|
5
8
|
declare const SendMailError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
|
|
6
9
|
readonly _tag: "SendMailError";
|
|
7
10
|
} & Readonly<A>;
|
|
@@ -9,7 +12,7 @@ export declare class SendMailError extends SendMailError_base<{
|
|
|
9
12
|
readonly raw: Error | ResponseError;
|
|
10
13
|
}> {
|
|
11
14
|
}
|
|
12
|
-
declare const Emailer_base:
|
|
15
|
+
declare const Emailer_base: Context.OpaqueClass<Emailer, "effect-app/Emailer", {
|
|
13
16
|
sendMail: (msg: EmailMsgOptionalFrom) => Effect.Effect<void, SendMailError>;
|
|
14
17
|
}>;
|
|
15
18
|
export declare class Emailer extends Emailer_base {
|
|
@@ -23,7 +26,13 @@ export interface SendgridConfig {
|
|
|
23
26
|
subjectPrefix: string;
|
|
24
27
|
realMail: boolean;
|
|
25
28
|
defaultFrom: EmailData;
|
|
26
|
-
apiKey: Redacted.Redacted
|
|
29
|
+
apiKey: Redacted.Redacted;
|
|
30
|
+
/**
|
|
31
|
+
* Email address used for fake/test recipients. Use `{i}` as a placeholder for an auto-incrementing index to ensure uniqueness.
|
|
32
|
+
*
|
|
33
|
+
* @example "test+{i}@example.com"
|
|
34
|
+
*/
|
|
35
|
+
fakeMailAddress: string;
|
|
27
36
|
}
|
|
28
37
|
export type EmailTemplateMsg = MailData & {
|
|
29
38
|
templateId: string;
|
|
@@ -52,4 +61,4 @@ export type EmailContent = {
|
|
|
52
61
|
export type EmailMsg = EmailMsgBase & EmailContent;
|
|
53
62
|
export type EmailMsgOptionalFrom = Omit<EmailMsgBase, "from"> & Partial<Pick<EmailMsg, "from">> & EmailContent;
|
|
54
63
|
export {};
|
|
55
|
-
//# sourceMappingURL=
|
|
64
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL0VtYWlsZXIvc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE1BQU0sbUNBQW1DLENBQUE7QUFDOUUsT0FBTyxLQUFLLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDbkQsT0FBTyxLQUFLLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUM3RCxPQUFPLEtBQUssT0FBTyxNQUFNLG9CQUFvQixDQUFBO0FBQzdDLE9BQU8sS0FBSyxLQUFLLE1BQU0sTUFBTSxtQkFBbUIsQ0FBQTtBQUNoRCxPQUFPLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUU5QyxPQUFPLEtBQUssS0FBSyxRQUFRLE1BQU0saUJBQWlCLENBQUE7Ozs7QUFFaEQscUJBQWEsYUFBYyxTQUFRLG1CQUFrQztJQUNuRSxRQUFRLENBQUMsR0FBRyxFQUFFLEtBQUssR0FBRyxhQUFhLENBQUE7Q0FDcEMsQ0FBQztDQUFHOztjQUdPLENBQUMsR0FBRyxFQUFFLG9CQUFvQixLQUFLLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQzs7QUFEN0UscUJBQWEsT0FBUSxTQUFRLFlBRUg7Q0FBRztBQUU3QixNQUFNLE1BQU0sU0FBUyxHQUFHLEtBQUssR0FBRztJQUM5QixJQUFJLENBQUMsRUFBRSxNQUFNLENBQUE7SUFDYixLQUFLLEVBQUUsS0FBSyxDQUFBO0NBQ2IsQ0FBQTtBQUVELE1BQU0sV0FBVyxjQUFjO0lBQzdCLGNBQWMsQ0FBQyxFQUFFLFNBQVMsQ0FBQTtJQUMxQixhQUFhLEVBQUUsTUFBTSxDQUFBO0lBQ3JCLFFBQVEsRUFBRSxPQUFPLENBQUE7SUFDakIsV0FBVyxFQUFFLFNBQVMsQ0FBQTtJQUN0QixNQUFNLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQTtJQUN6Qjs7OztPQUlHO0lBQ0gsZUFBZSxFQUFFLE1BQU0sQ0FBQTtDQUN4QjtBQUNELE1BQU0sTUFBTSxnQkFBZ0IsR0FBRyxRQUFRLEdBQUc7SUFBRSxVQUFVLEVBQUUsTUFBTSxDQUFBO0NBQUUsQ0FBQTtBQUVoRSxNQUFNLE1BQU0sZUFBZSxHQUFHLFNBQVMsR0FBRyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsQ0FBQTtBQUUxRSxNQUFNLE1BQU0sWUFBWSxHQUNwQixJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksR0FBRyxTQUFTLENBQUMsR0FDeEQ7SUFDQSxFQUFFLEVBQUUsU0FBUyxHQUFHLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBQ2hELEVBQUUsQ0FBQyxFQUFFLFNBQVMsR0FBRyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsQ0FBQTtJQUNqRCxHQUFHLENBQUMsRUFBRSxTQUFTLEdBQUcscUJBQXFCLENBQUMsU0FBUyxDQUFDLENBQUE7SUFDbEQsSUFBSSxFQUFFLFNBQVMsQ0FBQTtJQUNmOzs7T0FHRztJQUNILFVBQVUsQ0FBQyxFQUFFLE9BQU8sQ0FBQTtDQUNyQixDQUFBO0FBRUgsTUFBTSxNQUFNLFlBQVksR0FBRztJQUFFLElBQUksRUFBRSxNQUFNLENBQUE7Q0FBRSxHQUFHO0lBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQTtDQUFFLEdBQUc7SUFBRSxVQUFVLEVBQUUsTUFBTSxDQUFBO0NBQUUsR0FBRztJQUN4RixPQUFPLEVBQUUscUJBQXFCLENBQUMsV0FBVyxDQUFDLENBQUE7Q0FDNUMsQ0FBQTtBQUVELE1BQU0sTUFBTSxRQUFRLEdBQ2hCLFlBQVksR0FDWixZQUFZLENBQUE7QUFFaEIsTUFBTSxNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUEifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/Emailer/service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAA;AAC9E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AACnD,OAAO,
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/Emailer/service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAA;AAC9E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AACnD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAA;AAC7D,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAA;AAC7C,OAAO,KAAK,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAChD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAE9C,OAAO,KAAK,KAAK,QAAQ,MAAM,iBAAiB,CAAA;;;;AAEhD,qBAAa,aAAc,SAAQ,mBAAkC;IACnE,QAAQ,CAAC,GAAG,EAAE,KAAK,GAAG,aAAa,CAAA;CACpC,CAAC;CAAG;;cAGO,CAAC,GAAG,EAAE,oBAAoB,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC;;AAD7E,qBAAa,OAAQ,SAAQ,YAEH;CAAG;AAE7B,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,KAAK,CAAA;CACb,CAAA;AAED,MAAM,WAAW,cAAc;IAC7B,cAAc,CAAC,EAAE,SAAS,CAAA;IAC1B,aAAa,EAAE,MAAM,CAAA;IACrB,QAAQ,EAAE,OAAO,CAAA;IACjB,WAAW,EAAE,SAAS,CAAA;IACtB,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAA;IACzB;;;;OAIG;IACH,eAAe,EAAE,MAAM,CAAA;CACxB;AACD,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,CAAA;AAEhE,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAA;AAE1E,MAAM,MAAM,YAAY,GACpB,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,SAAS,CAAC,GACxD;IACA,EAAE,EAAE,SAAS,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAA;IAChD,EAAE,CAAC,EAAE,SAAS,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAA;IACjD,GAAG,CAAC,EAAE,SAAS,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAA;IAClD,IAAI,EAAE,SAAS,CAAA;IACf;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB,CAAA;AAEH,MAAM,MAAM,YAAY,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG;IACxF,OAAO,EAAE,qBAAqB,CAAC,WAAW,CAAC,CAAA;CAC5C,CAAA;AAED,MAAM,MAAM,QAAQ,GAChB,YAAY,GACZ,YAAY,CAAA;AAEhB,MAAM,MAAM,oBAAoB,GAAG,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,GAAG,YAAY,CAAA"}
|
package/dist/Emailer/service.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as Context from "effect-app/Context";
|
|
2
|
+
import * as Data from "effect/Data";
|
|
2
3
|
export class SendMailError extends Data.TaggedError("SendMailError") {
|
|
3
4
|
}
|
|
4
|
-
export class Emailer extends
|
|
5
|
+
export class Emailer extends Context.Opaque()("effect-app/Emailer") {
|
|
5
6
|
}
|
|
6
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9FbWFpbGVyL3NlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxLQUFLLE9BQU8sTUFBTSxvQkFBb0IsQ0FBQTtBQUc3QyxPQUFPLEtBQUssSUFBSSxNQUFNLGFBQWEsQ0FBQTtBQUduQyxNQUFNLE9BQU8sYUFBYyxTQUFRLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUVqRTtDQUFHO0FBRUwsTUFBTSxPQUFPLE9BQVEsU0FBUSxPQUFPLENBQUMsTUFBTSxFQUV2QyxDQUFDLG9CQUFvQixDQUFDO0NBQUcifQ==
|
package/dist/Emailer.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export * from "./Emailer/service.js";
|
|
2
|
-
//# sourceMappingURL=
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRW1haWxlci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL0VtYWlsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxzQkFBc0IsQ0FBQSJ9
|
package/dist/MainFiberSet.d.ts
CHANGED
|
@@ -1,19 +1,22 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
1
|
+
import * as Context from "effect-app/Context";
|
|
2
|
+
import * as Effect from "effect-app/Effect";
|
|
3
|
+
import * as Layer from "effect-app/Layer";
|
|
4
|
+
import * as Fiber from "effect/Fiber";
|
|
5
|
+
declare const MainFiberSet_base: Context.ServiceClass<MainFiberSet, "MainFiberSet", {
|
|
3
6
|
interrupt: Effect.Effect<void, never, never>;
|
|
4
7
|
join: Effect.Effect<void, never, never>;
|
|
5
8
|
forkDaemonReport: <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<Fiber.Fiber<void, never>, never, R>;
|
|
6
9
|
run: <R, XE extends never, XA extends unknown>(effect: Effect.Effect<XA, XE, R>) => Effect.Effect<Fiber.Fiber<XA, XE>, never, R>;
|
|
7
|
-
add: (...fibers: Fiber.Fiber<never
|
|
8
|
-
addAll: (fibers: readonly Fiber.Fiber<never
|
|
10
|
+
add: (...fibers: Fiber.Fiber<never>[]) => Effect.Effect<void, never, never>;
|
|
11
|
+
addAll: (fibers: readonly Fiber.Fiber<never>[]) => Effect.Effect<void, never, never>;
|
|
9
12
|
}> & {
|
|
10
13
|
readonly make: Effect.Effect<{
|
|
11
14
|
interrupt: Effect.Effect<void, never, never>;
|
|
12
15
|
join: Effect.Effect<void, never, never>;
|
|
13
16
|
forkDaemonReport: <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<Fiber.Fiber<void, never>, never, R>;
|
|
14
17
|
run: <R, XE extends never, XA extends unknown>(effect: Effect.Effect<XA, XE, R>) => Effect.Effect<Fiber.Fiber<XA, XE>, never, R>;
|
|
15
|
-
add: (...fibers: Fiber.Fiber<never
|
|
16
|
-
addAll: (fibers: readonly Fiber.Fiber<never
|
|
18
|
+
add: (...fibers: Fiber.Fiber<never>[]) => Effect.Effect<void, never, never>;
|
|
19
|
+
addAll: (fibers: readonly Fiber.Fiber<never>[]) => Effect.Effect<void, never, never>;
|
|
17
20
|
}, never, import("effect/Scope").Scope>;
|
|
18
21
|
};
|
|
19
22
|
/**
|
|
@@ -24,8 +27,8 @@ declare const MainFiberSet_base: ServiceMap.ServiceClass<MainFiberSet, "MainFibe
|
|
|
24
27
|
export declare class MainFiberSet extends MainFiberSet_base {
|
|
25
28
|
static readonly Live: Layer.Layer<MainFiberSet, never, never>;
|
|
26
29
|
static readonly JoinLive: Layer.Layer<never, never, never>;
|
|
27
|
-
static readonly run: <A, R>(self: Effect.Effect<A, never, R>) => Effect.Effect<Fiber.Fiber<A, never>, never,
|
|
28
|
-
static readonly forkDaemonReport: <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<Fiber.Fiber<void, never>, never,
|
|
30
|
+
static readonly run: <A, R>(self: Effect.Effect<A, never, R>) => Effect.Effect<Fiber.Fiber<A, never>, never, R | MainFiberSet>;
|
|
31
|
+
static readonly forkDaemonReport: <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<Fiber.Fiber<void, never>, never, R | MainFiberSet>;
|
|
29
32
|
}
|
|
30
33
|
export {};
|
|
31
|
-
//# sourceMappingURL=
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWFpbkZpYmVyU2V0LmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvTWFpbkZpYmVyU2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sb0JBQW9CLENBQUE7QUFDN0MsT0FBTyxLQUFLLE1BQU0sTUFBTSxtQkFBbUIsQ0FBQTtBQUMzQyxPQUFPLEtBQUssS0FBSyxNQUFNLGtCQUFrQixDQUFBO0FBQ3pDLE9BQU8sS0FBSyxLQUFLLE1BQU0sY0FBYyxDQUFBOzs7O3VCQXdDVCxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsUUFBUSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDOztxQkEvQnZDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUU7cUJBQ3BCLFNBQVMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRTs7Ozs7Ozs7Ozs7QUFpRHZEOzs7O0dBSUc7QUFDSCxxQkFBYSxZQUFhLFNBQVEsaUJBQXlEO0lBQ3pGLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSwwQ0FBZ0M7SUFDcEQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLG1DQUl2QjtJQUNELE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxtRUFDSDtJQUMxRCxNQUFNLENBQUMsUUFBUSxDQUFDLGdCQUFnQixHQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxRQUFRLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsc0VBQ0Y7Q0FDeEUifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MainFiberSet.d.ts","sourceRoot":"","sources":["../src/MainFiberSet.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"MainFiberSet.d.ts","sourceRoot":"","sources":["../src/MainFiberSet.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAA;AAC7C,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAC3C,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAA;AACzC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;;;;uBAwCT,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;;qBA/BvC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;qBACpB,SAAS,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;;;;;;;;;;;AAiDvD;;;;GAIG;AACH,qBAAa,YAAa,SAAQ,iBAAyD;IACzF,MAAM,CAAC,QAAQ,CAAC,IAAI,0CAAgC;IACpD,MAAM,CAAC,QAAQ,CAAC,QAAQ,mCAIvB;IACD,MAAM,CAAC,QAAQ,CAAC,GAAG,GAAI,CAAC,EAAE,CAAC,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,mEACH;IAC1D,MAAM,CAAC,QAAQ,CAAC,gBAAgB,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,sEACF;CACxE"}
|
package/dist/MainFiberSet.js
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as Context from "effect-app/Context";
|
|
2
|
+
import * as Effect from "effect-app/Effect";
|
|
3
|
+
import * as Layer from "effect-app/Layer";
|
|
4
|
+
import * as Fiber from "effect/Fiber";
|
|
5
|
+
import * as FiberSet from "effect/FiberSet";
|
|
2
6
|
import { InfraLogger } from "./logger.js";
|
|
3
7
|
import { reportNonInterruptedFailureCause } from "./QueueMaker/errors.js";
|
|
4
8
|
import { setRootParentSpan } from "./RequestFiberSet.js";
|
|
@@ -45,10 +49,10 @@ const make = Effect.gen(function* () {
|
|
|
45
49
|
* you should register these long running fibers in a FiberSet, and join them at the end of your main program.
|
|
46
50
|
* This way any errors will blow up the main program instead of fibers dying unknowingly.
|
|
47
51
|
*/
|
|
48
|
-
export class MainFiberSet extends
|
|
52
|
+
export class MainFiberSet extends Context.Service()("MainFiberSet", { make }) {
|
|
49
53
|
static Live = Layer.effect(this, this.make);
|
|
50
54
|
static JoinLive = this.asEffect().pipe(Effect.andThen((_) => _.join), Layer.effectDiscard, Layer.provide(this.Live));
|
|
51
55
|
static run = (self) => this.asEffect().pipe(Effect.andThen((_) => _.run(self)));
|
|
52
56
|
static forkDaemonReport = (self) => this.asEffect().pipe(Effect.andThen((_) => _.forkDaemonReport(self)));
|
|
53
57
|
}
|
|
54
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWFpbkZpYmVyU2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL01haW5GaWJlclNldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLG9CQUFvQixDQUFBO0FBQzdDLE9BQU8sS0FBSyxNQUFNLE1BQU0sbUJBQW1CLENBQUE7QUFDM0MsT0FBTyxLQUFLLEtBQUssTUFBTSxrQkFBa0IsQ0FBQTtBQUN6QyxPQUFPLEtBQUssS0FBSyxNQUFNLGNBQWMsQ0FBQTtBQUNyQyxPQUFPLEtBQUssUUFBUSxNQUFNLGlCQUFpQixDQUFBO0FBRTNDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDekMsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sd0JBQXdCLENBQUE7QUFDekUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFFeEQsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7SUFDL0IsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksRUFBa0IsQ0FBQTtJQUNsRCxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsTUFBNEIsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDckgsTUFBTSxNQUFNLEdBQUcsQ0FBQyxNQUFxQyxFQUFFLEVBQUUsQ0FDdkQsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMs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
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import * as Context from "effect-app/Context";
|
|
2
|
+
import * as Effect from "effect-app/Effect";
|
|
3
|
+
export interface RegisteredRepository {
|
|
4
|
+
readonly seedNamespace: (namespace: string) => Effect.Effect<void>;
|
|
5
|
+
}
|
|
6
|
+
declare const RepositoryRegistry_base: Context.OpaqueClass<RepositoryRegistry, "effect-app/RepositoryRegistry", {
|
|
7
|
+
readonly register: (modelName: string, repo: RegisteredRepository) => void;
|
|
8
|
+
readonly seedNamespace: (namespace: string) => Effect.Effect<void>;
|
|
9
|
+
readonly entries: ReadonlyMap<string, RegisteredRepository>;
|
|
10
|
+
}> & {
|
|
11
|
+
readonly make: Effect.Effect<{
|
|
12
|
+
readonly register: (modelName: string, repo: RegisteredRepository) => void;
|
|
13
|
+
readonly seedNamespace: (namespace: string) => Effect.Effect<void>;
|
|
14
|
+
readonly entries: ReadonlyMap<string, RegisteredRepository>;
|
|
15
|
+
}, never, never>;
|
|
16
|
+
};
|
|
17
|
+
export declare class RepositoryRegistry extends RepositoryRegistry_base {
|
|
18
|
+
}
|
|
19
|
+
export declare const RepositoryRegistryLive: import("effect/Layer").Layer<RepositoryRegistry, never, never>;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVnaXN0cnkuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9Nb2RlbC9SZXBvc2l0b3J5L1JlZ2lzdHJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sb0JBQW9CLENBQUE7QUFDN0MsT0FBTyxLQUFLLE1BQU0sTUFBTSxtQkFBbUIsQ0FBQTtBQUUzQyxNQUFNLFdBQVcsb0JBQW9CO0lBQ25DLFFBQVEsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxTQUFTLEVBQUUsTUFBTSxLQUFLLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUE7Q0FDbkU7O3VCQXVCb0IsQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxvQkFBb0IsS0FBSyxJQUFJOzRCQUNsRCxDQUFDLFNBQVMsRUFBRSxNQUFNLEtBQUssTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7c0JBQ2hELFdBQVcsQ0FBQyxNQUFNLEVBQUUsb0JBQW9CLENBQUM7OzsyQkFGeEMsQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxvQkFBb0IsS0FBSyxJQUFJO2dDQUNsRCxDQUFDLFNBQVMsRUFBRSxNQUFNLEtBQUssTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7MEJBQ2hELFdBQVcsQ0FBQyxNQUFNLEVBQUUsb0JBQW9CLENBQUM7OztBQUg3RCxxQkFBYSxrQkFBbUIsU0FBUSx1QkFJTztDQUFHO0FBRWxELGVBQU8sTUFBTSxzQkFBc0IsZ0VBQXNELENBQUEifQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Registry.d.ts","sourceRoot":"","sources":["../../../src/Model/Repository/Registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAA;AAC7C,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAE3C,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,aAAa,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;CACnE;;uBAuBoB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,oBAAoB,KAAK,IAAI;4BAClD,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;sBAChD,WAAW,CAAC,MAAM,EAAE,oBAAoB,CAAC;;;2BAFxC,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,oBAAoB,KAAK,IAAI;gCAClD,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;0BAChD,WAAW,CAAC,MAAM,EAAE,oBAAoB,CAAC;;;AAH7D,qBAAa,kBAAmB,SAAQ,uBAIO;CAAG;AAElD,eAAO,MAAM,sBAAsB,gEAAsD,CAAA"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import * as Context from "effect-app/Context";
|
|
2
|
+
import * as Effect from "effect-app/Effect";
|
|
3
|
+
const make = Effect.sync(() => {
|
|
4
|
+
const repos = new Map();
|
|
5
|
+
return {
|
|
6
|
+
register(modelName, repo) {
|
|
7
|
+
repos.set(modelName, repo);
|
|
8
|
+
},
|
|
9
|
+
seedNamespace: (namespace) => Effect.suspend(() => Effect.forEach(repos.values(), (r) => r.seedNamespace(namespace), { concurrency: "unbounded", discard: true })),
|
|
10
|
+
get entries() {
|
|
11
|
+
return repos;
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
});
|
|
15
|
+
export class RepositoryRegistry extends Context.Opaque()("effect-app/RepositoryRegistry", { make }) {
|
|
16
|
+
}
|
|
17
|
+
export const RepositoryRegistryLive = RepositoryRegistry.toLayer(RepositoryRegistry.make);
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVnaXN0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvTW9kZWwvUmVwb3NpdG9yeS9SZWdpc3RyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLG9CQUFvQixDQUFBO0FBQzdDLE9BQU8sS0FBSyxNQUFNLE1BQU0sbUJBQW1CLENBQUE7QUFNM0MsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7SUFDNUIsTUFBTSxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQWdDLENBQUE7SUFDckQsT0FBTztRQUNMLFFBQVEsQ0FBQyxTQUFpQixFQUFFLElBQTBCO1lBQ3BELEtBQUssQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFBO1FBQzVCLENBQUM7UUFDRCxhQUFhLEVBQUUsQ0FBQyxTQUFpQixFQUFFLEVBQUUsQ0FDbkMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FDbEIsTUFBTSxDQUFDLE9BQU8sQ0FDWixLQUFLLENBQUMsTUFBTSxFQUFFLEVBQ2QsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLEVBQ2pDLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQzVDLENBQ0Y7UUFDSCxJQUFJLE9BQU87WUFDVCxPQUFPLEtBQUssQ0FBQTtRQUNkLENBQUM7S0FDRixDQUFBO0FBQ0gsQ0FBQyxDQUFDLENBQUE7QUFFRixNQUFNLE9BQU8sa0JBQW1CLFNBQVEsT0FBTyxDQUFDLE1BQU0sRUFJbEQsQ0FBQywrQkFBK0IsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDO0NBQUc7QUFFbEQsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsa0JBQWtCLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFBIn0=
|