@effect-app/infra 4.0.0-beta.2 → 4.0.0-beta.200
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 +1514 -0
- package/_check.sh +1 -1
- package/dist/CUPS.d.ts +15 -7
- package/dist/CUPS.d.ts.map +1 -1
- package/dist/CUPS.js +10 -12
- package/dist/Emailer/Sendgrid.d.ts +14 -14
- package/dist/Emailer/Sendgrid.d.ts.map +1 -1
- package/dist/Emailer/Sendgrid.js +16 -15
- package/dist/Emailer/fake.d.ts +1 -1
- package/dist/Emailer/service.d.ts +11 -5
- package/dist/Emailer/service.d.ts.map +1 -1
- package/dist/Emailer/service.js +3 -3
- package/dist/Emailer.d.ts +1 -1
- package/dist/MainFiberSet.d.ts +9 -9
- package/dist/MainFiberSet.d.ts.map +1 -1
- package/dist/MainFiberSet.js +3 -3
- package/dist/Model/Repository/Registry.d.ts +20 -0
- package/dist/Model/Repository/Registry.d.ts.map +1 -0
- package/dist/Model/Repository/Registry.js +17 -0
- package/dist/Model/Repository/ext.d.ts +33 -15
- package/dist/Model/Repository/ext.d.ts.map +1 -1
- package/dist/Model/Repository/ext.js +54 -2
- package/dist/Model/Repository/internal/internal.d.ts +6 -6
- package/dist/Model/Repository/internal/internal.d.ts.map +1 -1
- package/dist/Model/Repository/internal/internal.js +43 -32
- package/dist/Model/Repository/legacy.d.ts +1 -1
- package/dist/Model/Repository/makeRepo.d.ts +7 -6
- package/dist/Model/Repository/makeRepo.d.ts.map +1 -1
- package/dist/Model/Repository/makeRepo.js +5 -1
- package/dist/Model/Repository/service.d.ts +28 -23
- package/dist/Model/Repository/service.d.ts.map +1 -1
- package/dist/Model/Repository/validation.d.ts +142 -17
- package/dist/Model/Repository/validation.d.ts.map +1 -1
- package/dist/Model/Repository/validation.js +5 -5
- 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 +4 -4
- package/dist/Model/dsl.d.ts.map +1 -1
- 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 +25 -25
- package/dist/Model/query/dsl.d.ts.map +1 -1
- package/dist/Model/query/new-kid-interpreter.d.ts +6 -6
- package/dist/Model/query/new-kid-interpreter.d.ts.map +1 -1
- package/dist/Model/query/new-kid-interpreter.js +3 -3
- 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 +6 -8
- package/dist/QueueMaker/SQLQueue.d.ts.map +1 -1
- package/dist/QueueMaker/SQLQueue.js +106 -115
- package/dist/QueueMaker/errors.d.ts +2 -2
- package/dist/QueueMaker/errors.d.ts.map +1 -1
- package/dist/QueueMaker/memQueue.d.ts +7 -4
- package/dist/QueueMaker/memQueue.d.ts.map +1 -1
- package/dist/QueueMaker/memQueue.js +52 -62
- package/dist/QueueMaker/sbqueue.d.ts +6 -3
- package/dist/QueueMaker/sbqueue.d.ts.map +1 -1
- package/dist/QueueMaker/sbqueue.js +39 -53
- package/dist/QueueMaker/service.d.ts +1 -1
- package/dist/RequestContext.d.ts +117 -31
- package/dist/RequestContext.d.ts.map +1 -1
- package/dist/RequestContext.js +7 -8
- package/dist/RequestFiberSet.d.ts +7 -7
- package/dist/RequestFiberSet.d.ts.map +1 -1
- package/dist/RequestFiberSet.js +5 -5
- package/dist/Store/ContextMapContainer.d.ts +20 -4
- package/dist/Store/ContextMapContainer.d.ts.map +1 -1
- package/dist/Store/ContextMapContainer.js +13 -3
- package/dist/Store/Cosmos/query.d.ts +1 -1
- package/dist/Store/Cosmos/query.d.ts.map +1 -1
- package/dist/Store/Cosmos/query.js +10 -12
- package/dist/Store/Cosmos.d.ts +1 -1
- package/dist/Store/Cosmos.d.ts.map +1 -1
- package/dist/Store/Cosmos.js +318 -240
- package/dist/Store/Disk.d.ts +2 -2
- package/dist/Store/Disk.d.ts.map +1 -1
- package/dist/Store/Disk.js +25 -22
- package/dist/Store/Memory.d.ts +4 -4
- package/dist/Store/Memory.d.ts.map +1 -1
- package/dist/Store/Memory.js +27 -22
- 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 +189 -0
- package/dist/Store/SQL/query.d.ts +38 -0
- package/dist/Store/SQL/query.d.ts.map +1 -0
- package/dist/Store/SQL/query.js +367 -0
- package/dist/Store/SQL.d.ts +20 -0
- package/dist/Store/SQL.d.ts.map +1 -0
- package/dist/Store/SQL.js +381 -0
- package/dist/Store/codeFilter.d.ts +1 -1
- package/dist/Store/codeFilter.d.ts.map +1 -1
- package/dist/Store/codeFilter.js +2 -1
- package/dist/Store/index.d.ts +5 -2
- package/dist/Store/index.d.ts.map +1 -1
- package/dist/Store/index.js +15 -3
- package/dist/Store/service.d.ts +18 -7
- package/dist/Store/service.d.ts.map +1 -1
- package/dist/Store/service.js +24 -6
- package/dist/Store/utils.d.ts +1 -1
- package/dist/Store/utils.d.ts.map +1 -1
- package/dist/Store/utils.js +3 -4
- package/dist/Store.d.ts +1 -1
- package/dist/adapters/SQL/Model.d.ts +30 -47
- package/dist/adapters/SQL/Model.d.ts.map +1 -1
- package/dist/adapters/SQL/Model.js +22 -14
- package/dist/adapters/SQL.d.ts +1 -1
- package/dist/adapters/ServiceBus.d.ts +11 -11
- package/dist/adapters/ServiceBus.d.ts.map +1 -1
- package/dist/adapters/ServiceBus.js +15 -17
- package/dist/adapters/cosmos-client.d.ts +3 -3
- package/dist/adapters/cosmos-client.d.ts.map +1 -1
- package/dist/adapters/cosmos-client.js +3 -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 +3 -3
- package/dist/adapters/memQueue.d.ts.map +1 -1
- package/dist/adapters/memQueue.js +3 -3
- package/dist/adapters/mongo-client.d.ts +3 -3
- package/dist/adapters/mongo-client.d.ts.map +1 -1
- package/dist/adapters/mongo-client.js +3 -3
- package/dist/adapters/redis-client.d.ts +4 -4
- package/dist/adapters/redis-client.d.ts.map +1 -1
- package/dist/adapters/redis-client.js +3 -3
- package/dist/api/ContextProvider.d.ts +8 -8
- package/dist/api/ContextProvider.d.ts.map +1 -1
- package/dist/api/ContextProvider.js +6 -6
- package/dist/api/codec.d.ts +1 -1
- package/dist/api/internal/RequestContextMiddleware.d.ts +2 -2
- package/dist/api/internal/RequestContextMiddleware.d.ts.map +1 -1
- package/dist/api/internal/RequestContextMiddleware.js +2 -2
- 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 +160 -29
- package/dist/api/internal/events.d.ts +3 -3
- package/dist/api/internal/events.d.ts.map +1 -1
- package/dist/api/internal/events.js +12 -8
- package/dist/api/internal/health.d.ts +1 -1
- package/dist/api/layerUtils.d.ts +6 -6
- package/dist/api/layerUtils.d.ts.map +1 -1
- package/dist/api/layerUtils.js +5 -5
- package/dist/api/middlewares.d.ts +1 -1
- package/dist/api/reportError.d.ts +1 -1
- package/dist/api/routing/middleware/RouterMiddleware.d.ts +4 -4
- package/dist/api/routing/middleware/RouterMiddleware.d.ts.map +1 -1
- package/dist/api/routing/middleware/middleware.d.ts +50 -4
- package/dist/api/routing/middleware/middleware.d.ts.map +1 -1
- package/dist/api/routing/middleware/middleware.js +79 -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 +2 -2
- package/dist/api/routing/schema/jwt.d.ts.map +1 -1
- package/dist/api/routing/schema/jwt.js +1 -1
- 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 +3 -3
- package/dist/api/routing/utils.d.ts.map +1 -1
- package/dist/api/routing.d.ts +32 -35
- package/dist/api/routing.d.ts.map +1 -1
- package/dist/api/routing.js +84 -36
- package/dist/api/setupRequest.d.ts +8 -5
- package/dist/api/setupRequest.d.ts.map +1 -1
- package/dist/api/setupRequest.js +14 -9
- package/dist/api/util.d.ts +1 -1
- package/dist/arbs.d.ts +1 -1
- package/dist/arbs.d.ts.map +1 -1
- package/dist/arbs.js +5 -3
- package/dist/errorReporter.d.ts +5 -5
- package/dist/errorReporter.d.ts.map +1 -1
- package/dist/errorReporter.js +20 -25
- package/dist/errors.d.ts +1 -1
- package/dist/fileUtil.d.ts +1 -1
- package/dist/fileUtil.d.ts.map +1 -1
- package/dist/fileUtil.js +3 -2
- package/dist/index.d.ts +1 -1
- package/dist/logger/jsonLogger.d.ts +1 -1
- package/dist/logger/logFmtLogger.d.ts +1 -1
- package/dist/logger/shared.d.ts +1 -1
- package/dist/logger/shared.js +2 -2
- package/dist/logger.d.ts +1 -1
- package/dist/logger.d.ts.map +1 -1
- package/dist/rateLimit.d.ts +9 -3
- package/dist/rateLimit.d.ts.map +1 -1
- package/dist/rateLimit.js +5 -11
- package/dist/test.d.ts +2 -2
- package/dist/test.d.ts.map +1 -1
- package/dist/test.js +1 -1
- package/dist/vitest.d.ts +1 -1
- package/examples/query.ts +39 -35
- package/package.json +41 -37
- package/src/CUPS.ts +9 -11
- package/src/Emailer/Sendgrid.ts +18 -15
- package/src/Emailer/service.ts +9 -3
- package/src/MainFiberSet.ts +5 -6
- package/src/Model/Repository/Registry.ts +33 -0
- package/src/Model/Repository/ext.ts +96 -10
- package/src/Model/Repository/internal/internal.ts +97 -88
- package/src/Model/Repository/makeRepo.ts +12 -10
- package/src/Model/Repository/service.ts +31 -22
- package/src/Model/Repository/validation.ts +4 -4
- package/src/Model/Repository.ts +1 -0
- package/src/Model/dsl.ts +3 -3
- package/src/Model/filter/types/path/eager.ts +1 -2
- package/src/Model/query/dsl.ts +18 -18
- package/src/Model/query/new-kid-interpreter.ts +2 -2
- package/src/Model.ts +1 -0
- package/src/QueueMaker/SQLQueue.ts +123 -154
- package/src/QueueMaker/memQueue.ts +85 -107
- package/src/QueueMaker/sbqueue.ts +54 -81
- package/src/RequestContext.ts +8 -10
- package/src/RequestFiberSet.ts +4 -4
- package/src/Store/ContextMapContainer.ts +41 -2
- package/src/Store/Cosmos/query.ts +16 -20
- package/src/Store/Cosmos.ts +452 -342
- package/src/Store/Disk.ts +52 -49
- package/src/Store/Memory.ts +55 -51
- package/src/Store/SQL/Pg.ts +318 -0
- package/src/Store/SQL/query.ts +409 -0
- package/src/Store/SQL.ts +668 -0
- package/src/Store/codeFilter.ts +1 -0
- package/src/Store/index.ts +17 -2
- package/src/Store/service.ts +32 -8
- package/src/Store/utils.ts +23 -22
- package/src/adapters/SQL/Model.ts +83 -72
- package/src/adapters/ServiceBus.ts +114 -118
- package/src/adapters/cosmos-client.ts +2 -2
- package/src/adapters/index.ts +7 -0
- package/src/adapters/memQueue.ts +2 -2
- package/src/adapters/mongo-client.ts +2 -2
- package/src/adapters/redis-client.ts +2 -2
- package/src/api/ContextProvider.ts +12 -13
- package/src/api/internal/RequestContextMiddleware.ts +1 -1
- package/src/api/internal/auth.ts +246 -44
- package/src/api/internal/events.ts +15 -10
- package/src/api/layerUtils.ts +8 -8
- package/src/api/routing/middleware/RouterMiddleware.ts +4 -4
- package/src/api/routing/middleware/middleware.ts +112 -15
- package/src/api/routing/middleware.ts +0 -2
- package/src/api/routing/schema/jwt.ts +2 -3
- package/src/api/routing.ts +153 -79
- package/src/api/setupRequest.ts +30 -10
- package/src/arbs.ts +4 -2
- package/src/errorReporter.ts +63 -75
- package/src/fileUtil.ts +2 -1
- package/src/logger/shared.ts +1 -1
- package/src/rateLimit.ts +30 -22
- package/src/test.ts +1 -1
- package/test/auth.test.ts +101 -0
- package/test/contextProvider.test.ts +11 -11
- package/test/controller.test.ts +27 -21
- 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/fixtures.d.ts +26 -12
- package/test/dist/fixtures.d.ts.map +1 -1
- package/test/dist/fixtures.js +12 -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 +11 -9
- package/test/query.test.ts +216 -36
- package/test/rawQuery.test.ts +23 -19
- package/test/repository-ext.test.ts +60 -0
- package/test/requires.test.ts +6 -6
- package/test/router-generator.test.ts +180 -0
- package/test/routing-interruptibility.test.ts +63 -0
- package/test/rpc-e2e-invalidation.test.ts +507 -0
- package/test/rpc-multi-middleware.test.ts +79 -10
- package/test/rpc-stream-fullstack.test.ts +325 -0
- package/test/sql-store.test.ts +1064 -0
- package/test/validateSample.test.ts +15 -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/src/errorReporter.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as Sentry from "@sentry/node"
|
|
2
|
-
import { Cause, Effect, LogLevel } from "effect-app"
|
|
2
|
+
import { Cause, Effect, type LogLevel } from "effect-app"
|
|
3
3
|
import { dropUndefined, LogLevelToSentry } from "effect-app/utils"
|
|
4
4
|
import { getRC } from "./api/setupRequest.js"
|
|
5
5
|
import { CauseException, tryToJson, tryToReport } from "./errors.js"
|
|
@@ -13,47 +13,41 @@ const tryCauseException = <E>(cause: Cause.Cause<E>, name: string): CauseExcepti
|
|
|
13
13
|
}
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
-
export function reportError(
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
return
|
|
29
|
-
}
|
|
30
|
-
const error = tryCauseException(cause, name)
|
|
31
|
-
|
|
32
|
-
yield* reportSentry(error, extras, LogLevelToSentry(level))
|
|
33
|
-
yield* InfraLogger
|
|
34
|
-
.logWithLevel(level, "Reporting error", cause)
|
|
35
|
-
.pipe(
|
|
36
|
-
Effect.annotateLogs(dropUndefined({
|
|
37
|
-
extras,
|
|
38
|
-
error: tryToReport(error),
|
|
39
|
-
cause: tryToJson(cause),
|
|
40
|
-
__error_name__: name
|
|
41
|
-
}))
|
|
42
|
-
)
|
|
43
|
-
.pipe(
|
|
44
|
-
Effect.catchCause((cause) => InfraLogger.logWarning("Failed to log error", cause)),
|
|
45
|
-
Effect.catchCause(() => InfraLogger.logFatal("Failed to log error cause"))
|
|
46
|
-
)
|
|
16
|
+
export function reportError(name: string) {
|
|
17
|
+
return Effect.fnUntraced(
|
|
18
|
+
function*(
|
|
19
|
+
cause: Cause.Cause<unknown>,
|
|
20
|
+
extras?: Record<string, unknown>,
|
|
21
|
+
level: LogLevel.Severity = "Error"
|
|
22
|
+
) {
|
|
23
|
+
if (Cause.hasInterruptsOnly(cause)) {
|
|
24
|
+
yield* InfraLogger.logDebug("Interrupted").pipe(Effect.annotateLogs("extras", JSON.stringify(extras ?? {})))
|
|
25
|
+
return
|
|
26
|
+
}
|
|
27
|
+
const error = tryCauseException(cause, name)
|
|
47
28
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
29
|
+
yield* reportSentry(error, extras, LogLevelToSentry(level))
|
|
30
|
+
yield* InfraLogger
|
|
31
|
+
.logWithLevel(level, "Reporting error", cause)
|
|
32
|
+
.pipe(
|
|
33
|
+
Effect.annotateLogs(dropUndefined({
|
|
34
|
+
extras,
|
|
35
|
+
error: tryToReport(error),
|
|
36
|
+
cause: tryToJson(cause),
|
|
37
|
+
__error_name__: name
|
|
38
|
+
})),
|
|
39
|
+
Effect.catchCause((cause) => InfraLogger.logWarning("Failed to log error", cause)),
|
|
40
|
+
Effect.catchCause(() => InfraLogger.logFatal("Failed to log error cause"))
|
|
55
41
|
)
|
|
56
|
-
|
|
42
|
+
|
|
43
|
+
return error
|
|
44
|
+
},
|
|
45
|
+
(effect) =>
|
|
46
|
+
Effect.tapCause(effect, (cause) =>
|
|
47
|
+
InfraLogger.logError("Failed to report error", cause).pipe(
|
|
48
|
+
Effect.tapCause(() => InfraLogger.logFatal("Failed to log error cause"))
|
|
49
|
+
))
|
|
50
|
+
)
|
|
57
51
|
}
|
|
58
52
|
|
|
59
53
|
function reportSentry(
|
|
@@ -66,45 +60,39 @@ function reportSentry(
|
|
|
66
60
|
scope.setLevel(level)
|
|
67
61
|
if (context) scope.setContext("context", { ...context })
|
|
68
62
|
if (extras) scope.setContext("extras", extras)
|
|
69
|
-
|
|
70
|
-
scope.setContext("
|
|
63
|
+
const squashed = Cause.squash(error.originalCause)
|
|
64
|
+
scope.setContext("mainError", tryToJson(squashed))
|
|
65
|
+
scope.setContext("error", tryToReport(error))
|
|
66
|
+
scope.setContext("cause", tryToJson(error.originalCause))
|
|
71
67
|
Sentry.captureException(error, scope)
|
|
72
68
|
}))
|
|
73
69
|
}
|
|
74
70
|
|
|
75
|
-
export function logError<E>(
|
|
76
|
-
|
|
77
|
-
) {
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
}))
|
|
93
|
-
)
|
|
94
|
-
})
|
|
95
|
-
.pipe(
|
|
96
|
-
Effect.tapCause(() => InfraLogger.logFatal("Failed to log error cause"))
|
|
97
|
-
)
|
|
71
|
+
export function logError<E>(name: string) {
|
|
72
|
+
return Effect.fnUntraced(
|
|
73
|
+
function*(cause: Cause.Cause<E>, extras?: Record<string, unknown>) {
|
|
74
|
+
if (Cause.hasInterruptsOnly(cause)) {
|
|
75
|
+
yield* InfraLogger.logDebug("Interrupted").pipe(Effect.annotateLogs(dropUndefined({ extras })))
|
|
76
|
+
return
|
|
77
|
+
}
|
|
78
|
+
yield* InfraLogger
|
|
79
|
+
.logWarning("Logging error", cause)
|
|
80
|
+
.pipe(Effect.annotateLogs(dropUndefined({
|
|
81
|
+
extras,
|
|
82
|
+
cause: tryToJson(cause),
|
|
83
|
+
__error_name__: name
|
|
84
|
+
})))
|
|
85
|
+
},
|
|
86
|
+
(effect) => Effect.tapCause(effect, () => InfraLogger.logFatal("Failed to log error cause"))
|
|
87
|
+
)
|
|
98
88
|
}
|
|
99
89
|
|
|
100
|
-
export
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
Sentry.captureMessage(message, scope)
|
|
90
|
+
export const reportMessage = Effect.fnUntraced(function*(message: string, extras?: Record<string, unknown>) {
|
|
91
|
+
const context = yield* getRC
|
|
92
|
+
const scope = new Sentry.Scope()
|
|
93
|
+
if (context) scope.setContext("context", { ...context })
|
|
94
|
+
if (extras) scope.setContext("extras", extras)
|
|
95
|
+
Sentry.captureMessage(message, scope)
|
|
107
96
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
}
|
|
97
|
+
console.warn(message, extras)
|
|
98
|
+
})
|
package/src/fileUtil.ts
CHANGED
|
@@ -119,7 +119,8 @@ export function withFileLock<A, E, R>(
|
|
|
119
119
|
// ensure lock is released
|
|
120
120
|
yield* Effect.addFinalizer(() =>
|
|
121
121
|
Effect
|
|
122
|
-
|
|
122
|
+
// we have to make sure we use a thunk, or the library will cause problems because effect passes abortsignal as first argument
|
|
123
|
+
.tryPromise(() => release())
|
|
123
124
|
.pipe(Effect.orDie)
|
|
124
125
|
)
|
|
125
126
|
|
package/src/logger/shared.ts
CHANGED
|
@@ -7,7 +7,7 @@ export function getRequestContextFromFiber(fiber: Fiber.Fiber<unknown, unknown>)
|
|
|
7
7
|
const span = Option.fromNullishOr(fiber.currentSpan)
|
|
8
8
|
const locale = fiber.getRef(LocaleRef)
|
|
9
9
|
const namespace = fiber.getRef(storeId)
|
|
10
|
-
return
|
|
10
|
+
return RequestContext.make({
|
|
11
11
|
span: Option.map(span, (s) => ({ spanId: s.spanId, traceId: s.traceId, sampled: s.sampled })).pipe(
|
|
12
12
|
Option.getOrElse(() => ({ spanId: "bogus", sampled: true, traceId: "bogus" }))
|
|
13
13
|
),
|
package/src/rateLimit.ts
CHANGED
|
@@ -21,7 +21,9 @@
|
|
|
21
21
|
// }
|
|
22
22
|
|
|
23
23
|
import { Array, type Duration, Effect, type NonEmptyArray } from "effect-app"
|
|
24
|
+
import { dual } from "effect-app/Function"
|
|
24
25
|
import type { Semaphore } from "effect/Semaphore"
|
|
26
|
+
import type { Concurrency } from "effect/Types"
|
|
25
27
|
|
|
26
28
|
/**
|
|
27
29
|
* Executes the specified effect, acquiring the specified number of permits
|
|
@@ -45,36 +47,42 @@ export function SEM_withPermitsDuration(permits: number, duration: Duration.Dura
|
|
|
45
47
|
}
|
|
46
48
|
}
|
|
47
49
|
|
|
48
|
-
export
|
|
49
|
-
|
|
50
|
-
forEachItem: (item: T, iWithinBatch: number, batchI: number) => Effect.Effect<A, E, R>,
|
|
51
|
-
forEachBatch: (a: NonEmptyArray<A>, i: number) => Effect.Effect<A2, E2, R2>
|
|
52
|
-
) {
|
|
53
|
-
return (items: Iterable<T>) =>
|
|
54
|
-
Effect.forEach(
|
|
55
|
-
Array.chunksOf(items, n),
|
|
56
|
-
(_, i) =>
|
|
57
|
-
Effect
|
|
58
|
-
.forEach(_, (_, j) => forEachItem(_, j, i), { concurrency: "inherit" })
|
|
59
|
-
.pipe(Effect.flatMap((_) => forEachBatch(_ as NonEmptyArray<A>, i))),
|
|
60
|
-
{ concurrency: "inherit" }
|
|
61
|
-
)
|
|
50
|
+
export interface BatchOptions {
|
|
51
|
+
readonly concurrency?: Concurrency | undefined
|
|
62
52
|
}
|
|
63
53
|
|
|
64
|
-
export
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
)
|
|
69
|
-
|
|
54
|
+
export const batch: {
|
|
55
|
+
<T, A, E, R, A2, E2, R2>(
|
|
56
|
+
n: number,
|
|
57
|
+
forEachItem: (item: T, iWithinBatch: number, batchI: number) => Effect.Effect<A, E, R>,
|
|
58
|
+
forEachBatch: (a: NonEmptyArray<A>, i: number) => Effect.Effect<A2, E2, R2>,
|
|
59
|
+
options?: BatchOptions
|
|
60
|
+
): (items: Iterable<T>) => Effect.Effect<Array<A2>, E | E2, R | R2>
|
|
61
|
+
<T, A, E, R, A2, E2, R2>(
|
|
62
|
+
items: Iterable<T>,
|
|
63
|
+
n: number,
|
|
64
|
+
forEachItem: (item: T, iWithinBatch: number, batchI: number) => Effect.Effect<A, E, R>,
|
|
65
|
+
forEachBatch: (a: NonEmptyArray<A>, i: number) => Effect.Effect<A2, E2, R2>,
|
|
66
|
+
options?: BatchOptions
|
|
67
|
+
): Effect.Effect<Array<A2>, E | E2, R | R2>
|
|
68
|
+
} = dual(
|
|
69
|
+
(args) => typeof args[0] !== "number",
|
|
70
|
+
<T, A, E, R, A2, E2, R2>(
|
|
71
|
+
items: Iterable<T>,
|
|
72
|
+
n: number,
|
|
73
|
+
forEachItem: (item: T, iWithinBatch: number, batchI: number) => Effect.Effect<A, E, R>,
|
|
74
|
+
forEachBatch: (a: NonEmptyArray<A>, i: number) => Effect.Effect<A2, E2, R2>,
|
|
75
|
+
options?: BatchOptions
|
|
76
|
+
) =>
|
|
70
77
|
Effect.forEach(
|
|
71
78
|
Array.chunksOf(items, n),
|
|
72
79
|
(_, i) =>
|
|
73
80
|
Effect
|
|
74
81
|
.forEach(_, (_, j) => forEachItem(_, j, i), { concurrency: "inherit" })
|
|
75
|
-
.pipe(Effect.flatMap((_) => forEachBatch(_
|
|
82
|
+
.pipe(Effect.flatMap((_) => forEachBatch(_, i))),
|
|
83
|
+
{ concurrency: options?.concurrency }
|
|
76
84
|
)
|
|
77
|
-
|
|
85
|
+
)
|
|
78
86
|
|
|
79
87
|
// export function rateLimit(
|
|
80
88
|
// n: number,
|
package/src/test.ts
CHANGED
|
@@ -16,7 +16,7 @@ export const createRandomInstance = <A extends object, I, R>(s: S.Codec<A, I, R>
|
|
|
16
16
|
/**
|
|
17
17
|
* Like `createRandomInstance`, but takes encoded values rather than decoded ones.
|
|
18
18
|
*/
|
|
19
|
-
export const createRandomInstanceI = <A extends object, I>(s: S.Codec<A, I
|
|
19
|
+
export const createRandomInstanceI = <A extends object, I>(s: S.Codec<A, I> & { fields: S.Struct.Fields }) => {
|
|
20
20
|
const gen = generate(S.toArbitrary(s))
|
|
21
21
|
const encode = S.encodeSync(s)
|
|
22
22
|
const decode = S.decodeSync(s)
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { describe, expect, it } from "@effect/vitest"
|
|
2
|
+
import { Effect } from "effect-app"
|
|
3
|
+
import { HttpHeaders } from "effect-app/http"
|
|
4
|
+
import { SignJWT } from "jose"
|
|
5
|
+
import { checkJWTI, InvalidRequestError, InvalidTokenError, UnauthorizedError } from "../src/api/internal/auth.js"
|
|
6
|
+
|
|
7
|
+
const issuer = "https://issuer.example.com/"
|
|
8
|
+
const audience = "effect-app"
|
|
9
|
+
const secret = "test-secret-test-secret-test-secret"
|
|
10
|
+
|
|
11
|
+
const makeToken = () =>
|
|
12
|
+
new SignJWT({ scope: "read:all" })
|
|
13
|
+
.setProtectedHeader({ alg: "HS256", typ: "at+jwt" })
|
|
14
|
+
.setIssuer(issuer)
|
|
15
|
+
.setAudience(audience)
|
|
16
|
+
.setIssuedAt()
|
|
17
|
+
.setExpirationTime("10m")
|
|
18
|
+
.sign(new TextEncoder().encode(secret))
|
|
19
|
+
|
|
20
|
+
describe("checkJWTI", () => {
|
|
21
|
+
it.effect(
|
|
22
|
+
"validates a bearer token from headers",
|
|
23
|
+
Effect.fnUntraced(function*() {
|
|
24
|
+
const token = yield* Effect.promise(() => makeToken())
|
|
25
|
+
|
|
26
|
+
yield* checkJWTI({
|
|
27
|
+
audience,
|
|
28
|
+
issuer,
|
|
29
|
+
secret,
|
|
30
|
+
strict: true,
|
|
31
|
+
tokenSigningAlg: "HS256"
|
|
32
|
+
})(HttpHeaders.fromRecordUnsafe({ authorization: `Bearer ${token}` }))
|
|
33
|
+
})
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
it.effect(
|
|
37
|
+
"fails on malformed authorization headers",
|
|
38
|
+
Effect.fnUntraced(function*() {
|
|
39
|
+
const error = yield* Effect.flip(
|
|
40
|
+
checkJWTI({
|
|
41
|
+
audience,
|
|
42
|
+
issuer,
|
|
43
|
+
secret,
|
|
44
|
+
tokenSigningAlg: "HS256"
|
|
45
|
+
})(HttpHeaders.fromRecordUnsafe({ authorization: "Basic abc" }))
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
expect(error).toBeInstanceOf(InvalidRequestError)
|
|
49
|
+
expect(error.status).toBe(400)
|
|
50
|
+
})
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
it.effect(
|
|
54
|
+
"fails when the token is missing",
|
|
55
|
+
Effect.fnUntraced(function*() {
|
|
56
|
+
const error = yield* Effect.flip(
|
|
57
|
+
checkJWTI({
|
|
58
|
+
audience,
|
|
59
|
+
issuer,
|
|
60
|
+
secret,
|
|
61
|
+
tokenSigningAlg: "HS256"
|
|
62
|
+
})(HttpHeaders.empty)
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
expect(error).toBeInstanceOf(UnauthorizedError)
|
|
66
|
+
expect(error.status).toBe(401)
|
|
67
|
+
})
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
it.effect(
|
|
71
|
+
"allows missing tokens when auth is optional",
|
|
72
|
+
Effect.fnUntraced(function*() {
|
|
73
|
+
yield* checkJWTI({
|
|
74
|
+
audience,
|
|
75
|
+
authRequired: false,
|
|
76
|
+
issuer,
|
|
77
|
+
secret,
|
|
78
|
+
tokenSigningAlg: "HS256"
|
|
79
|
+
})(HttpHeaders.empty)
|
|
80
|
+
})
|
|
81
|
+
)
|
|
82
|
+
|
|
83
|
+
it.effect(
|
|
84
|
+
"fails when the token signature is invalid",
|
|
85
|
+
Effect.fnUntraced(function*() {
|
|
86
|
+
const token = yield* Effect.promise(() => makeToken())
|
|
87
|
+
|
|
88
|
+
const error = yield* Effect.flip(
|
|
89
|
+
checkJWTI({
|
|
90
|
+
audience,
|
|
91
|
+
issuer,
|
|
92
|
+
secret: "wrong-secret-wrong-secret-wrong-secret",
|
|
93
|
+
tokenSigningAlg: "HS256"
|
|
94
|
+
})(HttpHeaders.fromRecordUnsafe({ authorization: `Bearer ${token}` }))
|
|
95
|
+
)
|
|
96
|
+
|
|
97
|
+
expect(error).toBeInstanceOf(InvalidTokenError)
|
|
98
|
+
expect(error.status).toBe(401)
|
|
99
|
+
})
|
|
100
|
+
)
|
|
101
|
+
})
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
2
|
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
|
|
3
3
|
import { expectTypeOf, it } from "@effect/vitest"
|
|
4
|
-
import { Effect, Layer, Scope
|
|
4
|
+
import { Context, Effect, Layer, Scope } from "effect-app"
|
|
5
5
|
import { ContextProvider, mergeContextProviders, MergedContextProvider } from "../src/api/ContextProvider.js"
|
|
6
6
|
import { CustomError1, Some, SomeElse, SomeService } from "./fixtures.js"
|
|
7
7
|
|
|
8
8
|
// @effect-diagnostics-next-line missingEffectServiceDependency:off
|
|
9
|
-
class MyContextProvider extends
|
|
9
|
+
class MyContextProvider extends Context.Service<MyContextProvider>()(
|
|
10
10
|
"MyContextProvider",
|
|
11
11
|
{
|
|
12
12
|
make: Effect.gen(function*() {
|
|
@@ -20,7 +20,7 @@ class MyContextProvider extends ServiceMap.Service<MyContextProvider>()(
|
|
|
20
20
|
yield* Effect.logInfo("MyContextProviderGen", "this is a generator")
|
|
21
21
|
yield* Effect.succeed("this is a generator")
|
|
22
22
|
|
|
23
|
-
return Some.
|
|
23
|
+
return Some.context({ a: 1 })
|
|
24
24
|
})
|
|
25
25
|
})
|
|
26
26
|
}
|
|
@@ -28,7 +28,7 @@ class MyContextProvider extends ServiceMap.Service<MyContextProvider>()(
|
|
|
28
28
|
static readonly Default = Layer.effect(this, this.make)
|
|
29
29
|
}
|
|
30
30
|
|
|
31
|
-
class MyContextProvider2 extends
|
|
31
|
+
class MyContextProvider2 extends Context.Service<MyContextProvider2>()(
|
|
32
32
|
"MyContextProvider2",
|
|
33
33
|
{
|
|
34
34
|
make: Effect.gen(function*() {
|
|
@@ -37,7 +37,7 @@ class MyContextProvider2 extends ServiceMap.Service<MyContextProvider2>()(
|
|
|
37
37
|
return Effect.gen(function*() {
|
|
38
38
|
// we test without dependencies, so that we end up with an R of never.
|
|
39
39
|
|
|
40
|
-
return SomeElse.
|
|
40
|
+
return SomeElse.context({ b: 2 })
|
|
41
41
|
})
|
|
42
42
|
})
|
|
43
43
|
}
|
|
@@ -45,7 +45,7 @@ class MyContextProvider2 extends ServiceMap.Service<MyContextProvider2>()(
|
|
|
45
45
|
static readonly Default = Layer.effect(this, this.make)
|
|
46
46
|
}
|
|
47
47
|
|
|
48
|
-
class MyContextProvider2Gen extends
|
|
48
|
+
class MyContextProvider2Gen extends Context.Service<MyContextProvider2Gen>()(
|
|
49
49
|
"MyContextProvider2Gen",
|
|
50
50
|
{
|
|
51
51
|
make: Effect.gen(function*() {
|
|
@@ -54,7 +54,7 @@ class MyContextProvider2Gen extends ServiceMap.Service<MyContextProvider2Gen>()(
|
|
|
54
54
|
return function*() {
|
|
55
55
|
// we test without dependencies, so that we end up with an R of never
|
|
56
56
|
|
|
57
|
-
return SomeElse.
|
|
57
|
+
return SomeElse.context({ b: 2 })
|
|
58
58
|
}
|
|
59
59
|
})
|
|
60
60
|
}
|
|
@@ -63,7 +63,7 @@ class MyContextProvider2Gen extends ServiceMap.Service<MyContextProvider2Gen>()(
|
|
|
63
63
|
}
|
|
64
64
|
|
|
65
65
|
// @effect-diagnostics-next-line missingEffectServiceDependency:off
|
|
66
|
-
class MyContextProviderGen extends
|
|
66
|
+
class MyContextProviderGen extends Context.Service<MyContextProviderGen>()(
|
|
67
67
|
"MyContextProviderGen",
|
|
68
68
|
{
|
|
69
69
|
make: Effect.gen(function*() {
|
|
@@ -77,7 +77,7 @@ class MyContextProviderGen extends ServiceMap.Service<MyContextProviderGen>()(
|
|
|
77
77
|
yield* Effect.logInfo("MyContextProviderGen", "this is a generator")
|
|
78
78
|
yield* Effect.succeed("this is a generator")
|
|
79
79
|
|
|
80
|
-
return Some.
|
|
80
|
+
return Some.context({ a: 1 })
|
|
81
81
|
}
|
|
82
82
|
})
|
|
83
83
|
}
|
|
@@ -100,7 +100,7 @@ export const someContextProvider = ContextProvider({
|
|
|
100
100
|
// currently the effectful context provider cannot trigger an error when building the per request context
|
|
101
101
|
// if (Math.random() > 0.5) return yield* new CustomError2()
|
|
102
102
|
|
|
103
|
-
return Some.
|
|
103
|
+
return Some.context({ a: 1 })
|
|
104
104
|
})
|
|
105
105
|
})
|
|
106
106
|
})
|
|
@@ -119,7 +119,7 @@ export const someContextProviderGen = ContextProvider({
|
|
|
119
119
|
// currently the effectful context provider cannot trigger an error when building the per request context
|
|
120
120
|
// if (Math.random() > 0.5) return yield* new CustomError2()
|
|
121
121
|
|
|
122
|
-
return Some.
|
|
122
|
+
return Some.context({ a: 1 })
|
|
123
123
|
}
|
|
124
124
|
})
|
|
125
125
|
})
|
package/test/controller.test.ts
CHANGED
|
@@ -2,10 +2,9 @@
|
|
|
2
2
|
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
|
|
3
3
|
import { type MakeContext, type MakeErrors, makeRouter } from "@effect-app/infra/api/routing"
|
|
4
4
|
import { expect, expectTypeOf, it } from "@effect/vitest"
|
|
5
|
-
import { Effect, Layer, S, Scope
|
|
5
|
+
import { Context, Effect, Layer, RpcX, S, Scope } from "effect-app"
|
|
6
6
|
import { InvalidStateError, makeRpcClient, UnauthorizedError } from "effect-app/client"
|
|
7
7
|
import { DefaultGenericMiddlewares } from "effect-app/middleware"
|
|
8
|
-
import * as RpcX from "effect-app/rpc"
|
|
9
8
|
import { MiddlewareMaker } from "effect-app/rpc"
|
|
10
9
|
import { TypeTestId } from "effect-app/TypeTest"
|
|
11
10
|
import { type RpcSerialization } from "effect/unstable/rpc"
|
|
@@ -99,7 +98,7 @@ class MyContextProvider2
|
|
|
99
98
|
|
|
100
99
|
//
|
|
101
100
|
|
|
102
|
-
class Str extends
|
|
101
|
+
class Str extends Context.Service<Str, "str">()("str") {}
|
|
103
102
|
|
|
104
103
|
export class BogusMiddleware extends RpcX.RpcMiddleware.Tag<BogusMiddleware>()("BogusMiddleware") {
|
|
105
104
|
static Default = Layer.make(this, {
|
|
@@ -202,12 +201,17 @@ export const middleware3 = MiddlewareMaker
|
|
|
202
201
|
.middleware(Test)
|
|
203
202
|
.middleware(BogusMiddleware)
|
|
204
203
|
|
|
205
|
-
export const {
|
|
204
|
+
export const { TaggedRequestFor } = makeRpcClient(RequestContextMap)
|
|
205
|
+
const Req = TaggedRequestFor("Something")
|
|
206
|
+
const Command = Req.Command
|
|
207
|
+
const Query = Req.Query
|
|
206
208
|
|
|
207
|
-
export class Eff extends
|
|
208
|
-
export class Gen extends
|
|
209
|
+
export class Eff extends Command<Eff>()("Eff", {}, { success: S.Void }) {}
|
|
210
|
+
export class Gen extends Command<Gen>()("Gen", {}) {}
|
|
209
211
|
|
|
210
|
-
|
|
212
|
+
expectTypeOf(Eff.error).toEqualTypeOf<typeof Gen.error>()
|
|
213
|
+
|
|
214
|
+
export class DoSomething extends Command<DoSomething>()("DoSomething", {
|
|
211
215
|
id: S.String
|
|
212
216
|
}, { success: S.Void }) {}
|
|
213
217
|
|
|
@@ -225,24 +229,26 @@ export class DoSomething extends Req<DoSomething>()("DoSomething", {
|
|
|
225
229
|
// )
|
|
226
230
|
// )
|
|
227
231
|
|
|
228
|
-
export class GetSomething extends
|
|
232
|
+
export class GetSomething extends Query<GetSomething>()("GetSomething", {
|
|
229
233
|
id: S.String
|
|
230
234
|
}, { success: S.String }) {}
|
|
231
235
|
|
|
232
|
-
export class GetSomething2 extends
|
|
236
|
+
export class GetSomething2 extends Query<GetSomething2>()("GetSomething2", {
|
|
233
237
|
id: S.String
|
|
234
|
-
}, { success: S.
|
|
238
|
+
}, { success: S.FiniteFromString }) {}
|
|
235
239
|
|
|
236
|
-
const Something = { Eff, Gen, DoSomething, GetSomething, GetSomething2
|
|
240
|
+
const Something = { Eff, Gen, DoSomething, GetSomething, GetSomething2 }
|
|
237
241
|
|
|
238
242
|
// const client = ApiClientFactory.makeFor(Layer.empty)(Something)
|
|
239
243
|
// client.pipe(Effect.map(c => c.DoSomething.name))
|
|
240
244
|
|
|
241
|
-
export class SomethingService extends
|
|
245
|
+
export class SomethingService extends Context.Service<SomethingService>()(
|
|
242
246
|
"SomethingService",
|
|
243
247
|
{
|
|
244
248
|
make: Effect.gen(function*() {
|
|
245
|
-
return {
|
|
249
|
+
return {
|
|
250
|
+
a: 1
|
|
251
|
+
}
|
|
246
252
|
})
|
|
247
253
|
}
|
|
248
254
|
) {
|
|
@@ -256,24 +262,24 @@ declare const a: {
|
|
|
256
262
|
(opt: { b: 3 }): void
|
|
257
263
|
}
|
|
258
264
|
|
|
259
|
-
export class SomethingRepo extends
|
|
265
|
+
export class SomethingRepo extends Context.Service<SomethingRepo>()(
|
|
260
266
|
"SomethingRepo",
|
|
261
267
|
{
|
|
262
268
|
make: Effect.gen(function*() {
|
|
263
269
|
const smth = yield* SomethingService
|
|
264
270
|
console.log({ smth })
|
|
265
|
-
return {}
|
|
271
|
+
return { b: 2 }
|
|
266
272
|
})
|
|
267
273
|
}
|
|
268
274
|
) {
|
|
269
275
|
static Default = Layer.effect(this, this.make).pipe(Layer.provide(SomethingService.Default))
|
|
270
276
|
}
|
|
271
277
|
|
|
272
|
-
export class SomethingService2 extends
|
|
278
|
+
export class SomethingService2 extends Context.Service<SomethingService2>()(
|
|
273
279
|
"SomethingService2",
|
|
274
280
|
{
|
|
275
281
|
make: Effect.gen(function*() {
|
|
276
|
-
return {}
|
|
282
|
+
return { c: 3 }
|
|
277
283
|
})
|
|
278
284
|
}
|
|
279
285
|
) {
|
|
@@ -318,7 +324,7 @@ const router = Router(Something)({
|
|
|
318
324
|
const some = yield* Some
|
|
319
325
|
return yield* Effect.logInfo("Some", some)
|
|
320
326
|
},
|
|
321
|
-
*GetSomething(req
|
|
327
|
+
*GetSomething(req) {
|
|
322
328
|
console.log(req["id"])
|
|
323
329
|
|
|
324
330
|
const _b = yield* Effect.succeed(false)
|
|
@@ -344,7 +350,7 @@ const router = Router(Something)({
|
|
|
344
350
|
}
|
|
345
351
|
},
|
|
346
352
|
GetSomething2: {
|
|
347
|
-
raw: Some.use(() => Effect.succeed("12"))
|
|
353
|
+
raw: () => Some.use(() => Effect.succeed("12"))
|
|
348
354
|
}
|
|
349
355
|
})
|
|
350
356
|
}
|
|
@@ -383,7 +389,7 @@ const router2 = r2.Router(Something)({
|
|
|
383
389
|
const some = yield* Some
|
|
384
390
|
return yield* Effect.logInfo("Some", some)
|
|
385
391
|
},
|
|
386
|
-
*GetSomething(req
|
|
392
|
+
*GetSomething(req) {
|
|
387
393
|
console.log(req["id"])
|
|
388
394
|
|
|
389
395
|
const _b = yield* Effect.succeed(false)
|
|
@@ -409,7 +415,7 @@ const router2 = r2.Router(Something)({
|
|
|
409
415
|
}
|
|
410
416
|
},
|
|
411
417
|
GetSomething2: {
|
|
412
|
-
raw: Some.use(() => Effect.succeed("12"))
|
|
418
|
+
raw: () => Some.use(() => Effect.succeed("12"))
|
|
413
419
|
}
|
|
414
420
|
})
|
|
415
421
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.test.d.ts","sourceRoot":"","sources":["../auth.test.ts"],"names":[],"mappings":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contextProvider.test.d.ts","sourceRoot":"","sources":["../contextProvider.test.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"contextProvider.test.d.ts","sourceRoot":"","sources":["../contextProvider.test.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAE1D,OAAO,EAAE,YAAY,EAAE,IAAI,EAAY,WAAW,EAAE,MAAM,eAAe,CAAA;AAkFzE,eAAO,MAAM,mBAAmB;;CAkB9B,CAAA;AACF,eAAO,MAAM,sBAAsB;;CAkBjC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controller.test.d.ts","sourceRoot":"","sources":["../controller.test.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAc,MAAM,+BAA+B,CAAA;AAE7F,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"controller.test.d.ts","sourceRoot":"","sources":["../controller.test.ts"],"names":[],"mappings":"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"}
|