@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
|
@@ -217,8 +217,7 @@ export namespace RefinePathValueTests {
|
|
|
217
217
|
| { nested: { a: string; _tag: "a" } | { b: number; _tag: "b" }; _tag: "ab" }
|
|
218
218
|
| { nested: { b: number; _tag: "b" } | { c: boolean; _tag: "c" }; _tag: "bc" },
|
|
219
219
|
"nested._tag",
|
|
220
|
-
"a"
|
|
221
|
-
false
|
|
220
|
+
"a"
|
|
222
221
|
>
|
|
223
222
|
|
|
224
223
|
expectTypeOf<test10>().toEqualTypeOf<{
|
package/src/Model/query/dsl.ts
CHANGED
|
@@ -54,7 +54,7 @@ type ExtractFieldValuesRefined<T> = T extends QueryTogether<any, infer TFieldVal
|
|
|
54
54
|
|
|
55
55
|
export type RelationDirection = "some" | "every"
|
|
56
56
|
export type Relation = { relation: RelationDirection }
|
|
57
|
-
export type Query<TFieldValues extends FieldValues> = QueryTogether<TFieldValues, TFieldValues
|
|
57
|
+
export type Query<TFieldValues extends FieldValues> = QueryTogether<TFieldValues, TFieldValues>
|
|
58
58
|
export type QueryWhere<
|
|
59
59
|
TFieldValues extends FieldValues,
|
|
60
60
|
TFieldValuesRefined extends TFieldValues = TFieldValues,
|
|
@@ -1538,7 +1538,7 @@ export type NestedQueriesFreeDisjointRefinement = {
|
|
|
1538
1538
|
fb: (current: Query<TFieldValues>) => QueryWhere<TFieldValues, TFieldValuesRefined2, E2>
|
|
1539
1539
|
): (
|
|
1540
1540
|
current: QueryWhere<TFieldValues, TFieldValuesRefined, E>
|
|
1541
|
-
) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined2
|
|
1541
|
+
) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined2>
|
|
1542
1542
|
|
|
1543
1543
|
<
|
|
1544
1544
|
TFieldValues extends FieldValues,
|
|
@@ -1555,7 +1555,7 @@ export type NestedQueriesFreeDisjointRefinement = {
|
|
|
1555
1555
|
) => QueryWhere<TFieldValues, TFieldValuesRefined3, E3>
|
|
1556
1556
|
): (
|
|
1557
1557
|
current: QueryWhere<TFieldValues, TFieldValuesRefined, E>
|
|
1558
|
-
) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined3
|
|
1558
|
+
) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined3>
|
|
1559
1559
|
|
|
1560
1560
|
<
|
|
1561
1561
|
TFieldValues extends FieldValues,
|
|
@@ -1577,7 +1577,7 @@ export type NestedQueriesFreeDisjointRefinement = {
|
|
|
1577
1577
|
) => QueryWhere<TFieldValues, TFieldValuesRefined4, E4>
|
|
1578
1578
|
): (
|
|
1579
1579
|
current: QueryWhere<TFieldValues, TFieldValuesRefined, E>
|
|
1580
|
-
) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined4
|
|
1580
|
+
) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined4>
|
|
1581
1581
|
|
|
1582
1582
|
<
|
|
1583
1583
|
TFieldValues extends FieldValues,
|
|
@@ -1604,7 +1604,7 @@ export type NestedQueriesFreeDisjointRefinement = {
|
|
|
1604
1604
|
) => QueryWhere<TFieldValues, TFieldValuesRefined5, E5>
|
|
1605
1605
|
): (
|
|
1606
1606
|
current: QueryWhere<TFieldValues, TFieldValuesRefined, E>
|
|
1607
|
-
) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined5
|
|
1607
|
+
) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined5>
|
|
1608
1608
|
|
|
1609
1609
|
<
|
|
1610
1610
|
TFieldValues extends FieldValues,
|
|
@@ -1636,7 +1636,7 @@ export type NestedQueriesFreeDisjointRefinement = {
|
|
|
1636
1636
|
) => QueryWhere<TFieldValues, TFieldValuesRefined6, E6>
|
|
1637
1637
|
): (
|
|
1638
1638
|
current: QueryWhere<TFieldValues, TFieldValuesRefined, E>
|
|
1639
|
-
) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined6
|
|
1639
|
+
) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined6>
|
|
1640
1640
|
|
|
1641
1641
|
<
|
|
1642
1642
|
TFieldValues extends FieldValues,
|
|
@@ -1673,7 +1673,7 @@ export type NestedQueriesFreeDisjointRefinement = {
|
|
|
1673
1673
|
) => QueryWhere<TFieldValues, TFieldValuesRefined7, E7>
|
|
1674
1674
|
): (
|
|
1675
1675
|
current: QueryWhere<TFieldValues, TFieldValuesRefined, E>
|
|
1676
|
-
) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined7
|
|
1676
|
+
) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined7>
|
|
1677
1677
|
|
|
1678
1678
|
<
|
|
1679
1679
|
TFieldValues extends FieldValues,
|
|
@@ -1715,7 +1715,7 @@ export type NestedQueriesFreeDisjointRefinement = {
|
|
|
1715
1715
|
) => QueryWhere<TFieldValues, TFieldValuesRefined8, E8>
|
|
1716
1716
|
): (
|
|
1717
1717
|
current: QueryWhere<TFieldValues, TFieldValuesRefined, E>
|
|
1718
|
-
) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined2
|
|
1718
|
+
) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined2>
|
|
1719
1719
|
|
|
1720
1720
|
<
|
|
1721
1721
|
TFieldValues extends FieldValues,
|
|
@@ -1762,7 +1762,7 @@ export type NestedQueriesFreeDisjointRefinement = {
|
|
|
1762
1762
|
) => QueryWhere<TFieldValues, TFieldValuesRefined9, E9>
|
|
1763
1763
|
): (
|
|
1764
1764
|
current: QueryWhere<TFieldValues, TFieldValuesRefined, E>
|
|
1765
|
-
) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined9
|
|
1765
|
+
) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined9>
|
|
1766
1766
|
|
|
1767
1767
|
<
|
|
1768
1768
|
TFieldValues extends FieldValues,
|
|
@@ -1814,7 +1814,7 @@ export type NestedQueriesFreeDisjointRefinement = {
|
|
|
1814
1814
|
) => QueryWhere<TFieldValues, TFieldValuesRefined10, E10>
|
|
1815
1815
|
): (
|
|
1816
1816
|
current: QueryWhere<TFieldValues, TFieldValuesRefined, E>
|
|
1817
|
-
) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined10
|
|
1817
|
+
) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined10>
|
|
1818
1818
|
|
|
1819
1819
|
<
|
|
1820
1820
|
TFieldValues extends FieldValues,
|
|
@@ -1871,7 +1871,7 @@ export type NestedQueriesFreeDisjointRefinement = {
|
|
|
1871
1871
|
) => QueryWhere<TFieldValues, TFieldValuesRefined11, E11>
|
|
1872
1872
|
): (
|
|
1873
1873
|
current: QueryWhere<TFieldValues, TFieldValuesRefined, E>
|
|
1874
|
-
) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined11
|
|
1874
|
+
) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined11>
|
|
1875
1875
|
|
|
1876
1876
|
<
|
|
1877
1877
|
TFieldValues extends FieldValues,
|
|
@@ -1933,7 +1933,7 @@ export type NestedQueriesFreeDisjointRefinement = {
|
|
|
1933
1933
|
) => QueryWhere<TFieldValues, TFieldValuesRefined12, E12>
|
|
1934
1934
|
): (
|
|
1935
1935
|
current: QueryWhere<TFieldValues, TFieldValuesRefined, E>
|
|
1936
|
-
) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined12
|
|
1936
|
+
) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined12>
|
|
1937
1937
|
|
|
1938
1938
|
<
|
|
1939
1939
|
TFieldValues extends FieldValues,
|
|
@@ -2000,7 +2000,7 @@ export type NestedQueriesFreeDisjointRefinement = {
|
|
|
2000
2000
|
) => QueryWhere<TFieldValues, TFieldValuesRefined13, E13>
|
|
2001
2001
|
): (
|
|
2002
2002
|
current: QueryWhere<TFieldValues, TFieldValuesRefined, E>
|
|
2003
|
-
) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined13
|
|
2003
|
+
) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined13>
|
|
2004
2004
|
|
|
2005
2005
|
<
|
|
2006
2006
|
TFieldValues extends FieldValues,
|
|
@@ -2072,7 +2072,7 @@ export type NestedQueriesFreeDisjointRefinement = {
|
|
|
2072
2072
|
) => QueryWhere<TFieldValues, TFieldValuesRefined14, E14>
|
|
2073
2073
|
): (
|
|
2074
2074
|
current: QueryWhere<TFieldValues, TFieldValuesRefined, E>
|
|
2075
|
-
) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined14
|
|
2075
|
+
) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined14>
|
|
2076
2076
|
}
|
|
2077
2077
|
|
|
2078
2078
|
export type FilterWhere =
|
|
@@ -2099,12 +2099,12 @@ export type WhereEveryOrSome =
|
|
|
2099
2099
|
subPath: TFieldName,
|
|
2100
2100
|
dude: (
|
|
2101
2101
|
current: Query<TFieldValues[TFieldName][number]>
|
|
2102
|
-
) => QueryWhere<TFieldValues[TFieldName][number], TFieldValues[TFieldName][number]
|
|
2102
|
+
) => QueryWhere<TFieldValues[TFieldName][number], TFieldValues[TFieldName][number]>,
|
|
2103
2103
|
...dudes: ((
|
|
2104
|
-
current: QueryWhere<TFieldValues[TFieldName][number], TFieldValues[TFieldName][number]
|
|
2105
|
-
) => QueryWhere<TFieldValues[TFieldName][number], TFieldValues[TFieldName][number]
|
|
2104
|
+
current: QueryWhere<TFieldValues[TFieldName][number], TFieldValues[TFieldName][number]>
|
|
2105
|
+
) => QueryWhere<TFieldValues[TFieldName][number], TFieldValues[TFieldName][number]>)[]
|
|
2106
2106
|
): (
|
|
2107
2107
|
current: Query<TFieldValues>
|
|
2108
|
-
) => QueryWhere<TFieldValues, TFieldValues
|
|
2108
|
+
) => QueryWhere<TFieldValues, TFieldValues>
|
|
2109
2109
|
}
|
|
2110
2110
|
& FilterContinuationsWithSubpath
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
2
|
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
|
|
3
|
-
import { Array, identity, Match, Option, pipe, S } from "effect-app"
|
|
3
|
+
import { Array, identity, Match, Option, pipe, S, SchemaAST } from "effect-app"
|
|
4
4
|
import { toNonEmptyArray } from "effect-app/Array"
|
|
5
5
|
import { dropUndefinedT } from "effect-app/utils"
|
|
6
6
|
import type { FilterResult } from "../filter/filterApi.js"
|
|
@@ -165,7 +165,7 @@ export const toFilter = <
|
|
|
165
165
|
let select: (keyof TFieldValues | { key: string; subKeys: string[] })[] = []
|
|
166
166
|
// TODO: support more complex (nested) schemas?
|
|
167
167
|
if (schema) {
|
|
168
|
-
const t = walkTransformation(schema.ast)
|
|
168
|
+
const t = walkTransformation(SchemaAST.toEncoded(schema.ast))
|
|
169
169
|
if (S.AST.isObjects(t)) {
|
|
170
170
|
select = t.propertySignatures.map((_) => _.name as string)
|
|
171
171
|
for (const prop of t.propertySignatures) {
|
package/src/Model.ts
CHANGED
|
@@ -1,20 +1,19 @@
|
|
|
1
1
|
import { getRequestContext, setupRequestContextWithCustomSpan } from "@effect-app/infra/api/setupRequest"
|
|
2
2
|
import { reportNonInterruptedFailure } from "@effect-app/infra/QueueMaker/errors"
|
|
3
3
|
import { type QueueBase, QueueMeta } from "@effect-app/infra/QueueMaker/service"
|
|
4
|
-
import { SqlClient } from "effect/unstable/sql"
|
|
5
4
|
import { subMinutes } from "date-fns"
|
|
6
|
-
import { Effect, Fiber, Option, S, Tracer } from "effect-app"
|
|
7
|
-
import type
|
|
5
|
+
import { Effect, Fiber, type NonEmptyReadonlyArray, Option, S, Tracer } from "effect-app"
|
|
6
|
+
import { type NonEmptyString255 } from "effect-app/Schema"
|
|
8
7
|
import { pretty } from "effect-app/utils"
|
|
9
|
-
import
|
|
8
|
+
import { SqlClient } from "effect/unstable/sql"
|
|
10
9
|
import { SQLModel } from "../adapters/SQL.js"
|
|
11
10
|
import { InfraLogger } from "../logger.js"
|
|
12
11
|
|
|
13
|
-
export const QueueId = S.
|
|
12
|
+
export const QueueId = S.Finite.pipe(S.brand("QueueId"))
|
|
14
13
|
export type QueueId = typeof QueueId.Type
|
|
15
14
|
|
|
16
15
|
// TODO: let the model track and Auto Generate versionColumn on every update instead
|
|
17
|
-
export
|
|
16
|
+
export const makeSQLQueue = Effect.fnUntraced(function*<
|
|
18
17
|
Evt extends { id: S.StringId; _tag: string },
|
|
19
18
|
DrainEvt extends { id: S.StringId; _tag: string },
|
|
20
19
|
EvtE,
|
|
@@ -25,166 +24,136 @@ export function makeSQLQueue<
|
|
|
25
24
|
schema: S.Codec<Evt, EvtE>,
|
|
26
25
|
drainSchema: S.Codec<DrainEvt, DrainEvtE>
|
|
27
26
|
) {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
const sql = yield* SqlClient.SqlClient
|
|
27
|
+
const base = {
|
|
28
|
+
id: SQLModel.Generated(QueueId),
|
|
29
|
+
meta: SQLModel.JsonFromString(QueueMeta),
|
|
30
|
+
name: S.NonEmptyString255,
|
|
31
|
+
createdAt: SQLModel.DateTimeInsert,
|
|
32
|
+
updatedAt: SQLModel.DateTimeUpdate,
|
|
33
|
+
// TODO: at+owner
|
|
34
|
+
processingAt: SQLModel.FieldOption(S.Date),
|
|
35
|
+
finishedAt: SQLModel.FieldOption(S.Date),
|
|
36
|
+
etag: S.String // TODO: use a SQLModel thing that auto updates it?
|
|
37
|
+
// TODO: record locking.. / optimistic locking
|
|
38
|
+
// rowVersion: SQLModel.DateTimeFromNumberWithNow
|
|
39
|
+
}
|
|
40
|
+
class Queue extends SQLModel.Class<Queue>("Queue")({
|
|
41
|
+
body: SQLModel.JsonFromString(schema),
|
|
42
|
+
...base
|
|
43
|
+
}) {}
|
|
44
|
+
class Drain extends SQLModel.Class<Drain>("Drain")({
|
|
45
|
+
body: SQLModel.JsonFromString(drainSchema),
|
|
46
|
+
...base
|
|
47
|
+
}) {}
|
|
48
|
+
const sql = yield* SqlClient.SqlClient
|
|
51
49
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
50
|
+
const queueRepo = yield* SQLModel.makeRepository(Queue, {
|
|
51
|
+
tableName: "queue",
|
|
52
|
+
spanPrefix: "QueueRepo",
|
|
53
|
+
idColumn: "id",
|
|
54
|
+
versionColumn: "etag"
|
|
55
|
+
})
|
|
58
56
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
57
|
+
const drainRepo = yield* SQLModel.makeRepository(Drain, {
|
|
58
|
+
tableName: "queue",
|
|
59
|
+
spanPrefix: "DrainRepo",
|
|
60
|
+
idColumn: "id",
|
|
61
|
+
versionColumn: "etag"
|
|
62
|
+
})
|
|
65
63
|
|
|
66
|
-
|
|
64
|
+
const decodeDrain = S.decodeEffectConcurrently(Drain)
|
|
67
65
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
Effect
|
|
72
|
-
.andThen((limit) =>
|
|
73
|
-
sql<typeof Drain.Encoded>`SELECT *
|
|
66
|
+
const drain = Effect.gen(function*() {
|
|
67
|
+
const limit = subMinutes(new Date(), 15)
|
|
68
|
+
return yield* sql<typeof Drain.Encoded>`SELECT *
|
|
74
69
|
FROM queue
|
|
75
70
|
WHERE name = ${queueDrainName} AND finishedAt IS NULL AND (processingAt IS NULL OR processingAt < ${limit.getTime()})
|
|
76
71
|
LIMIT 1`
|
|
77
|
-
|
|
78
|
-
)
|
|
72
|
+
})
|
|
79
73
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
}
|
|
101
|
-
if (first) return first
|
|
102
|
-
yield* Effect.sleep(250)
|
|
74
|
+
const q = {
|
|
75
|
+
offer: Effect.fnUntraced(function*(body: Evt, meta: typeof QueueMeta.Type) {
|
|
76
|
+
yield* queueRepo.insertVoid(Queue.insert.make({
|
|
77
|
+
body,
|
|
78
|
+
meta,
|
|
79
|
+
name: queueName,
|
|
80
|
+
processingAt: Option.none(),
|
|
81
|
+
finishedAt: Option.none(),
|
|
82
|
+
etag: crypto.randomUUID()
|
|
83
|
+
}))
|
|
84
|
+
}),
|
|
85
|
+
take: Effect.gen(function*() {
|
|
86
|
+
while (true) {
|
|
87
|
+
const [first] = yield* drain.pipe(Effect.withTracerEnabled(false)) // disable sql tracer otherwise we spam it..
|
|
88
|
+
if (first) {
|
|
89
|
+
const dec = yield* decodeDrain(first)
|
|
90
|
+
const { createdAt, updatedAt, ...rest } = dec
|
|
91
|
+
return yield* drainRepo.update(
|
|
92
|
+
Drain.update.make({ ...rest, processingAt: Option.some(new Date()) }) // auto in lib , etag: crypto.randomUUID()
|
|
93
|
+
)
|
|
103
94
|
}
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
95
|
+
if (first) return first
|
|
96
|
+
yield* Effect.sleep(250)
|
|
97
|
+
}
|
|
98
|
+
}),
|
|
99
|
+
finish: Effect.fn(function*({ createdAt, updatedAt, ...q }: Drain) {
|
|
100
|
+
return yield* drainRepo.updateVoid(Drain.update.make({ ...q, finishedAt: Option.some(new Date()) })) // auto in lib , etag: crypto.randomUUID()
|
|
101
|
+
})
|
|
102
|
+
}
|
|
103
|
+
const queue = {
|
|
104
|
+
publish: Effect.fn("queue.publish: " + queueName, { kind: "producer" })(function*(
|
|
105
|
+
...messages: NonEmptyReadonlyArray<Evt>
|
|
106
|
+
) {
|
|
107
|
+
yield* Effect.annotateCurrentSpan({ "message_tags": messages.map((_) => _._tag) })
|
|
108
|
+
const requestContext = yield* getRequestContext
|
|
109
|
+
yield* Effect.forEach(messages, (m) => q.offer(m, requestContext), { discard: true })
|
|
110
|
+
}),
|
|
111
|
+
drain: <DrainE, DrainR>(
|
|
112
|
+
handleEvent: (ks: DrainEvt) => Effect.Effect<void, DrainE, DrainR>,
|
|
113
|
+
sessionId?: string
|
|
114
|
+
) => {
|
|
115
|
+
const silenceAndReportError = reportNonInterruptedFailure({ name: "MemQueue.drain." + queueDrainName })
|
|
116
|
+
const processMessage = Effect.fnUntraced(function*({ body, meta }: Drain) {
|
|
117
|
+
let effect = InfraLogger
|
|
118
|
+
.logDebug(`[${queueDrainName}] Processing incoming message`)
|
|
111
119
|
.pipe(
|
|
112
|
-
Effect.
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
120
|
+
Effect.annotateLogs({ body: pretty(body), meta: pretty(meta) }),
|
|
121
|
+
Effect.andThen(handleEvent(body)),
|
|
122
|
+
silenceAndReportError,
|
|
123
|
+
(_) =>
|
|
124
|
+
setupRequestContextWithCustomSpan(
|
|
125
|
+
_,
|
|
126
|
+
meta,
|
|
127
|
+
`queue.drain: ${queueDrainName}.${body._tag}`,
|
|
128
|
+
{
|
|
129
|
+
captureStackTrace: false,
|
|
130
|
+
kind: "consumer",
|
|
131
|
+
attributes: {
|
|
132
|
+
"queue.name": queueDrainName,
|
|
133
|
+
"queue.sessionId": sessionId,
|
|
134
|
+
"queue.input": body
|
|
119
135
|
}
|
|
120
|
-
)
|
|
121
|
-
),
|
|
122
|
-
Effect.withSpan("queue.publish: " + queueName, {
|
|
123
|
-
kind: "producer",
|
|
124
|
-
attributes: { "message_tags": messages.map((_) => _._tag) }
|
|
125
|
-
}, { captureStackTrace: false })
|
|
126
|
-
),
|
|
127
|
-
drain: <DrainE, DrainR>(
|
|
128
|
-
handleEvent: (ks: DrainEvt) => Effect.Effect<void, DrainE, DrainR>,
|
|
129
|
-
sessionId?: string
|
|
130
|
-
) => {
|
|
131
|
-
const silenceAndReportError = reportNonInterruptedFailure({ name: "MemQueue.drain." + queueDrainName })
|
|
132
|
-
const processMessage = (msg: Drain) =>
|
|
133
|
-
Effect
|
|
134
|
-
.succeed(msg)
|
|
135
|
-
.pipe(Effect
|
|
136
|
-
.flatMap(({ body, meta }) => {
|
|
137
|
-
let effect = InfraLogger
|
|
138
|
-
.logDebug(`[${queueDrainName}] Processing incoming message`)
|
|
139
|
-
.pipe(
|
|
140
|
-
Effect.annotateLogs({ body: pretty(body), meta: pretty(meta) }),
|
|
141
|
-
Effect.andThen(handleEvent(body)),
|
|
142
|
-
silenceAndReportError,
|
|
143
|
-
(_) =>
|
|
144
|
-
setupRequestContextWithCustomSpan(
|
|
145
|
-
_,
|
|
146
|
-
meta,
|
|
147
|
-
`queue.drain: ${queueDrainName}.${body._tag}`,
|
|
148
|
-
{
|
|
149
|
-
captureStackTrace: false,
|
|
150
|
-
kind: "consumer",
|
|
151
|
-
attributes: {
|
|
152
|
-
"queue.name": queueDrainName,
|
|
153
|
-
"queue.sessionId": sessionId,
|
|
154
|
-
"queue.input": body
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
)
|
|
158
|
-
)
|
|
159
|
-
if (meta.span) {
|
|
160
|
-
effect = Effect.withParentSpan(effect, Tracer.externalSpan(meta.span))
|
|
161
136
|
}
|
|
162
|
-
return effect
|
|
163
|
-
}))
|
|
164
|
-
|
|
165
|
-
return q
|
|
166
|
-
.take
|
|
167
|
-
.pipe(
|
|
168
|
-
Effect.flatMap((x) =>
|
|
169
|
-
processMessage(x).pipe(
|
|
170
|
-
Effect.uninterruptible,
|
|
171
|
-
Effect.forkChild,
|
|
172
|
-
Effect.flatMap(Fiber.join),
|
|
173
|
-
Effect.tap(q.finish(x))
|
|
174
137
|
)
|
|
175
|
-
),
|
|
176
|
-
silenceAndReportError,
|
|
177
|
-
Effect.withSpan(`queue.drain: ${queueDrainName}`, {
|
|
178
|
-
attributes: {
|
|
179
|
-
"queue.type": "sql",
|
|
180
|
-
"queue.name": queueDrainName,
|
|
181
|
-
"queue.sessionId": sessionId
|
|
182
|
-
}
|
|
183
|
-
}),
|
|
184
|
-
Effect.forever
|
|
185
138
|
)
|
|
186
|
-
|
|
139
|
+
if (meta.span) {
|
|
140
|
+
effect = Effect.withParentSpan(effect, Tracer.externalSpan(meta.span))
|
|
141
|
+
}
|
|
142
|
+
return yield* effect
|
|
143
|
+
})
|
|
144
|
+
|
|
145
|
+
return Effect.fn(`queue.drain: ${queueDrainName}`, {
|
|
146
|
+
attributes: { "queue.type": "sql", "queue.name": queueDrainName, "queue.sessionId": sessionId }
|
|
147
|
+
})(function*() {
|
|
148
|
+
const x = yield* q.take
|
|
149
|
+
yield* processMessage(x).pipe(
|
|
150
|
+
Effect.uninterruptible,
|
|
151
|
+
Effect.forkChild,
|
|
152
|
+
Effect.flatMap(Fiber.join),
|
|
153
|
+
Effect.tap(q.finish(x))
|
|
154
|
+
)
|
|
155
|
+
}, (effect) => effect.pipe(silenceAndReportError, Effect.forever))()
|
|
187
156
|
}
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
}
|
|
157
|
+
}
|
|
158
|
+
return queue as QueueBase<Evt, DrainEvt>
|
|
159
|
+
})
|