@effect-app/infra 4.0.0-beta.22 → 4.0.0-beta.220
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 +1640 -0
- package/_check.sh +1 -1
- package/dist/CUPS.d.ts +7 -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 +10 -4
- 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 +103 -51
- 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 +46 -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 +139 -16
- package/dist/Model/query/dsl.d.ts.map +1 -1
- package/dist/Model/query/dsl.js +187 -1
- package/dist/Model/query/new-kid-interpreter.d.ts +76 -7
- package/dist/Model/query/new-kid-interpreter.d.ts.map +1 -1
- package/dist/Model/query/new-kid-interpreter.js +122 -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 +5 -7
- package/dist/QueueMaker/SQLQueue.d.ts.map +1 -1
- package/dist/QueueMaker/SQLQueue.js +130 -116
- 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 +75 -63
- package/dist/QueueMaker/sbqueue.d.ts +6 -3
- package/dist/QueueMaker/sbqueue.d.ts.map +1 -1
- package/dist/QueueMaker/sbqueue.js +52 -53
- package/dist/QueueMaker/service.d.ts +1 -1
- package/dist/RequestContext.d.ts +74 -35
- package/dist/RequestContext.d.ts.map +1 -1
- package/dist/RequestContext.js +13 -14
- package/dist/RequestFiberSet.d.ts +7 -7
- package/dist/RequestFiberSet.d.ts.map +1 -1
- package/dist/RequestFiberSet.js +3 -3
- package/dist/Store/ContextMapContainer.d.ts +19 -3
- package/dist/Store/ContextMapContainer.d.ts.map +1 -1
- package/dist/Store/ContextMapContainer.js +13 -3
- package/dist/Store/Cosmos/query.d.ts +5 -1
- package/dist/Store/Cosmos/query.d.ts.map +1 -1
- package/dist/Store/Cosmos/query.js +113 -34
- package/dist/Store/Cosmos.d.ts +1 -1
- package/dist/Store/Cosmos.d.ts.map +1 -1
- package/dist/Store/Cosmos.js +335 -243
- package/dist/Store/Disk.d.ts +2 -2
- package/dist/Store/Disk.d.ts.map +1 -1
- package/dist/Store/Disk.js +72 -35
- package/dist/Store/Memory.d.ts +6 -4
- package/dist/Store/Memory.d.ts.map +1 -1
- package/dist/Store/Memory.js +242 -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 +231 -0
- package/dist/Store/SQL/query.d.ts +42 -0
- package/dist/Store/SQL/query.d.ts.map +1 -0
- package/dist/Store/SQL/query.js +479 -0
- package/dist/Store/SQL.d.ts +20 -0
- package/dist/Store/SQL.d.ts.map +1 -0
- package/dist/Store/SQL.js +446 -0
- package/dist/Store/codeFilter.d.ts +1 -1
- package/dist/Store/codeFilter.d.ts.map +1 -1
- package/dist/Store/codeFilter.js +4 -2
- 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 +22 -8
- 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 +31 -42
- package/dist/adapters/SQL/Model.d.ts.map +1 -1
- package/dist/adapters/SQL/Model.js +29 -38
- 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 +25 -21
- 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 +1 -1
- 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 +3 -3
- 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 +9 -6
- package/dist/api/internal/auth.d.ts +44 -6
- 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 +10 -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 +39 -3
- package/dist/api/routing/middleware/middleware.d.ts.map +1 -1
- package/dist/api/routing/middleware/middleware.js +48 -16
- 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/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 +80 -37
- package/dist/api/routing.d.ts.map +1 -1
- package/dist/api/routing.js +109 -41
- package/dist/api/setupRequest.d.ts +8 -5
- package/dist/api/setupRequest.d.ts.map +1 -1
- package/dist/api/setupRequest.js +12 -7
- 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 +4 -4
- 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/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/otel.d.ts +75 -0
- package/dist/otel.d.ts.map +1 -0
- package/dist/otel.js +65 -0
- 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 +42 -38
- package/package.json +46 -37
- package/src/CUPS.ts +9 -11
- package/src/Emailer/Sendgrid.ts +17 -14
- 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 +218 -149
- 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 +348 -18
- package/src/Model/query/new-kid-interpreter.ts +206 -6
- package/src/Model.ts +1 -0
- package/src/QueueMaker/SQLQueue.ts +144 -152
- package/src/QueueMaker/memQueue.ts +104 -103
- package/src/QueueMaker/sbqueue.ts +70 -86
- package/src/RequestContext.ts +14 -16
- package/src/RequestFiberSet.ts +2 -2
- package/src/Store/ContextMapContainer.ts +41 -2
- package/src/Store/Cosmos/query.ts +140 -43
- package/src/Store/Cosmos.ts +482 -349
- package/src/Store/Disk.ts +102 -65
- package/src/Store/Memory.ts +275 -87
- package/src/Store/SQL/Pg.ts +361 -0
- package/src/Store/SQL/query.ts +539 -0
- package/src/Store/SQL.ts +731 -0
- package/src/Store/codeFilter.ts +3 -1
- package/src/Store/index.ts +17 -2
- package/src/Store/service.ts +41 -10
- package/src/Store/utils.ts +23 -22
- package/src/adapters/SQL/Model.ts +41 -40
- package/src/adapters/ServiceBus.ts +125 -121
- 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 +15 -5
- package/src/api/internal/auth.ts +246 -44
- package/src/api/internal/events.ts +13 -9
- package/src/api/layerUtils.ts +8 -8
- package/src/api/routing/middleware/RouterMiddleware.ts +4 -4
- package/src/api/routing/middleware/middleware.ts +55 -14
- package/src/api/routing/middleware.ts +0 -2
- package/src/api/routing.ts +296 -131
- package/src/api/setupRequest.ts +28 -8
- package/src/arbs.ts +4 -2
- package/src/errorReporter.ts +62 -74
- package/src/logger/shared.ts +1 -1
- package/src/otel.ts +152 -0
- 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 +21 -30
- 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 +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 +813 -38
- package/test/rawQuery.test.ts +301 -20
- package/test/repository-ext.test.ts +60 -0
- package/test/requires.test.ts +6 -6
- package/test/router-generator.test.ts +183 -0
- package/test/routing-interruptibility.test.ts +63 -0
- package/test/rpc-e2e-invalidation.test.ts +251 -0
- package/test/rpc-multi-middleware.test.ts +78 -9
- package/test/rpc-stream-fullstack.test.ts +300 -0
- package/test/sql-store.test.ts +1592 -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/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,
|
|
@@ -97,6 +97,86 @@ export type QueryProjection<
|
|
|
97
97
|
R,
|
|
98
98
|
TType
|
|
99
99
|
>
|
|
100
|
+
|
|
101
|
+
export type ComputedProjectionOperation = (q: Query<any>) => QueryWhere<any, any, any>
|
|
102
|
+
|
|
103
|
+
export type ComputedProjectionMathExpression =
|
|
104
|
+
| {
|
|
105
|
+
readonly _tag: "field"
|
|
106
|
+
readonly field: string
|
|
107
|
+
}
|
|
108
|
+
| {
|
|
109
|
+
readonly _tag: "mul"
|
|
110
|
+
readonly left: ComputedProjectionMathExpression
|
|
111
|
+
readonly right: ComputedProjectionMathExpression
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
export type ComputedProjectionExpression =
|
|
115
|
+
| {
|
|
116
|
+
readonly _tag: "relation-count"
|
|
117
|
+
readonly path: string
|
|
118
|
+
readonly operation?: ComputedProjectionOperation
|
|
119
|
+
}
|
|
120
|
+
| {
|
|
121
|
+
readonly _tag: "relation-any"
|
|
122
|
+
readonly path: string
|
|
123
|
+
readonly operation?: ComputedProjectionOperation
|
|
124
|
+
}
|
|
125
|
+
| {
|
|
126
|
+
readonly _tag: "relation-every"
|
|
127
|
+
readonly path: string
|
|
128
|
+
readonly operation: ComputedProjectionOperation
|
|
129
|
+
}
|
|
130
|
+
| {
|
|
131
|
+
readonly _tag: "relation-distinct-count"
|
|
132
|
+
readonly path: string
|
|
133
|
+
readonly field: string
|
|
134
|
+
readonly operation?: ComputedProjectionOperation
|
|
135
|
+
}
|
|
136
|
+
| {
|
|
137
|
+
readonly _tag: "relation-sum"
|
|
138
|
+
readonly path: string
|
|
139
|
+
readonly field: string
|
|
140
|
+
readonly operation?: ComputedProjectionOperation
|
|
141
|
+
}
|
|
142
|
+
| {
|
|
143
|
+
readonly _tag: "relation-sum-expr"
|
|
144
|
+
readonly path: string
|
|
145
|
+
readonly expression: ComputedProjectionMathExpression
|
|
146
|
+
readonly operation?: ComputedProjectionOperation
|
|
147
|
+
}
|
|
148
|
+
| {
|
|
149
|
+
readonly _tag: "relation-sum-expr-by"
|
|
150
|
+
readonly path: string
|
|
151
|
+
readonly expression: ComputedProjectionMathExpression
|
|
152
|
+
readonly unit: string
|
|
153
|
+
readonly operation?: ComputedProjectionOperation
|
|
154
|
+
}
|
|
155
|
+
| {
|
|
156
|
+
readonly _tag: "relation-sum-expr-normalized"
|
|
157
|
+
readonly path: string
|
|
158
|
+
readonly expression: ComputedProjectionMathExpression
|
|
159
|
+
readonly unit: string
|
|
160
|
+
readonly toBase: string
|
|
161
|
+
readonly factors: Readonly<Record<string, number>>
|
|
162
|
+
readonly operation?: ComputedProjectionOperation
|
|
163
|
+
}
|
|
164
|
+
| {
|
|
165
|
+
readonly _tag: "relation-collect"
|
|
166
|
+
readonly path: string
|
|
167
|
+
readonly field: string
|
|
168
|
+
readonly distinct: boolean
|
|
169
|
+
readonly operation?: ComputedProjectionOperation
|
|
170
|
+
}
|
|
171
|
+
| {
|
|
172
|
+
readonly _tag: "relation-collect-fields"
|
|
173
|
+
readonly path: string
|
|
174
|
+
readonly fields: readonly string[]
|
|
175
|
+
readonly distinct: boolean
|
|
176
|
+
readonly operation?: ComputedProjectionOperation
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
export type ComputedProjectionMap = Readonly<Record<string, ComputedProjectionExpression>>
|
|
100
180
|
export type Q<TFieldValues extends FieldValues> =
|
|
101
181
|
| Initial<TFieldValues>
|
|
102
182
|
| Where<TFieldValues>
|
|
@@ -211,6 +291,7 @@ export class Project<A, TFieldValues extends FieldValues, R, TType extends "one"
|
|
|
211
291
|
current: Query<TFieldValues> | QueryWhere<any, TFieldValues> | QueryEnd<TFieldValues, TType>
|
|
212
292
|
schema: S.Codec<A, TFieldValues, R>
|
|
213
293
|
mode: "collect" | "project" | "transform"
|
|
294
|
+
computed?: ComputedProjectionMap
|
|
214
295
|
}>
|
|
215
296
|
implements QueryProjection<TFieldValues, A, R>
|
|
216
297
|
{
|
|
@@ -299,6 +380,35 @@ export const count: {
|
|
|
299
380
|
): QueryProjection<ExtractFieldValuesRefined<Q>, NonNegativeInt, never, "count", ExtractExclusiveness<Q>>
|
|
300
381
|
} = (current) => new Count({ current })
|
|
301
382
|
|
|
383
|
+
/**
|
|
384
|
+
* Attach a projection schema to a query.
|
|
385
|
+
*
|
|
386
|
+
* The `select` clause sent to the store is derived from the schema's encoded
|
|
387
|
+
* AST property names (top-level + per-array sub-keys), so a projection always
|
|
388
|
+
* narrows what is read from the store. The repository augments that select
|
|
389
|
+
* with `id` and `_etag` for change tracking. See {@link toFilter} and the
|
|
390
|
+
* dispatch in `Repository/internal/internal.ts`.
|
|
391
|
+
*
|
|
392
|
+
* Modes — pick based on shape of the decoded value and on whether the
|
|
393
|
+
* persistence-model (PM) reverse-mapping is needed:
|
|
394
|
+
*
|
|
395
|
+
* - `"transform"` (default when `mode` omitted): goes through the repo's
|
|
396
|
+
* `parseMany`/`parseMany2` pipeline. The raw row is reverse-mapped via the
|
|
397
|
+
* etag/PM cache (re-injecting `_etag` and any PM-shape state) before
|
|
398
|
+
* decoding. Decode failures `orDie` (error channel = `never`). Use when
|
|
399
|
+
* the schema operates on the full PM shape (e.g. full-entity reads that
|
|
400
|
+
* must preserve etag tracking).
|
|
401
|
+
*
|
|
402
|
+
* - `"project"`: decodes the raw encoded row directly with the supplied
|
|
403
|
+
* schema. No PM reverse-mapping, no etag cache merge. Decode failures
|
|
404
|
+
* surface as `S.SchemaError`. Use for slim DTOs / aggregations that do not
|
|
405
|
+
* need etag tracking and whose schema input is a plain subset of `Encoded`.
|
|
406
|
+
*
|
|
407
|
+
* - `"collect"`: like `"project"`, but the schema yields `Option<A>` and
|
|
408
|
+
* `None` values are dropped post-decode (`Array.getSomes`). Use to filter
|
|
409
|
+
* rows during decode (e.g. discriminated-union narrowing where some rows
|
|
410
|
+
* should not appear in the result).
|
|
411
|
+
*/
|
|
302
412
|
export const project: {
|
|
303
413
|
<
|
|
304
414
|
Q extends Query<any> | QueryWhere<any, any, any> | QueryEnd<any, "one" | "many", any>,
|
|
@@ -356,6 +466,226 @@ export const project: {
|
|
|
356
466
|
) => QueryProjection<ExtractFieldValuesRefined<Q>, A, R, ExtractTType<Q>, E>
|
|
357
467
|
} = (schema: any, mode = "transform") => (current: any) => new Project({ current, schema, mode } as any)
|
|
358
468
|
|
|
469
|
+
export const relation = <TFieldValues extends FieldValues>(
|
|
470
|
+
path: FieldPath<TFieldValues>
|
|
471
|
+
) => ({
|
|
472
|
+
count: (operation?: ComputedProjectionOperation): ComputedProjectionExpression =>
|
|
473
|
+
operation
|
|
474
|
+
? {
|
|
475
|
+
_tag: "relation-count",
|
|
476
|
+
path: path as string,
|
|
477
|
+
operation
|
|
478
|
+
}
|
|
479
|
+
: {
|
|
480
|
+
_tag: "relation-count",
|
|
481
|
+
path: path as string
|
|
482
|
+
},
|
|
483
|
+
any: (operation?: ComputedProjectionOperation): ComputedProjectionExpression =>
|
|
484
|
+
operation
|
|
485
|
+
? {
|
|
486
|
+
_tag: "relation-any",
|
|
487
|
+
path: path as string,
|
|
488
|
+
operation
|
|
489
|
+
}
|
|
490
|
+
: {
|
|
491
|
+
_tag: "relation-any",
|
|
492
|
+
path: path as string
|
|
493
|
+
},
|
|
494
|
+
every: (operation: ComputedProjectionOperation): ComputedProjectionExpression => ({
|
|
495
|
+
_tag: "relation-every",
|
|
496
|
+
path: path as string,
|
|
497
|
+
operation
|
|
498
|
+
}),
|
|
499
|
+
distinctCount: (field: string, operation?: ComputedProjectionOperation): ComputedProjectionExpression =>
|
|
500
|
+
operation
|
|
501
|
+
? {
|
|
502
|
+
_tag: "relation-distinct-count",
|
|
503
|
+
path: path as string,
|
|
504
|
+
field,
|
|
505
|
+
operation
|
|
506
|
+
}
|
|
507
|
+
: {
|
|
508
|
+
_tag: "relation-distinct-count",
|
|
509
|
+
path: path as string,
|
|
510
|
+
field
|
|
511
|
+
},
|
|
512
|
+
sum: (field: string, operation?: ComputedProjectionOperation): ComputedProjectionExpression =>
|
|
513
|
+
operation
|
|
514
|
+
? {
|
|
515
|
+
_tag: "relation-sum",
|
|
516
|
+
path: path as string,
|
|
517
|
+
field,
|
|
518
|
+
operation
|
|
519
|
+
}
|
|
520
|
+
: {
|
|
521
|
+
_tag: "relation-sum",
|
|
522
|
+
path: path as string,
|
|
523
|
+
field
|
|
524
|
+
},
|
|
525
|
+
sumExpr: (
|
|
526
|
+
expression: ComputedProjectionMathExpression,
|
|
527
|
+
operation?: ComputedProjectionOperation
|
|
528
|
+
): ComputedProjectionExpression =>
|
|
529
|
+
operation
|
|
530
|
+
? {
|
|
531
|
+
_tag: "relation-sum-expr",
|
|
532
|
+
path: path as string,
|
|
533
|
+
expression,
|
|
534
|
+
operation
|
|
535
|
+
}
|
|
536
|
+
: {
|
|
537
|
+
_tag: "relation-sum-expr",
|
|
538
|
+
path: path as string,
|
|
539
|
+
expression
|
|
540
|
+
},
|
|
541
|
+
sumExprBy: (
|
|
542
|
+
expression: ComputedProjectionMathExpression,
|
|
543
|
+
options: { unit: string },
|
|
544
|
+
operation?: ComputedProjectionOperation
|
|
545
|
+
): ComputedProjectionExpression =>
|
|
546
|
+
operation
|
|
547
|
+
? {
|
|
548
|
+
_tag: "relation-sum-expr-by",
|
|
549
|
+
path: path as string,
|
|
550
|
+
expression,
|
|
551
|
+
unit: options.unit,
|
|
552
|
+
operation
|
|
553
|
+
}
|
|
554
|
+
: {
|
|
555
|
+
_tag: "relation-sum-expr-by",
|
|
556
|
+
path: path as string,
|
|
557
|
+
expression,
|
|
558
|
+
unit: options.unit
|
|
559
|
+
},
|
|
560
|
+
sumExprNormalized: (
|
|
561
|
+
expression: ComputedProjectionMathExpression,
|
|
562
|
+
options: { unit: string; toBase: string; factors: Readonly<Record<string, number>> },
|
|
563
|
+
operation?: ComputedProjectionOperation
|
|
564
|
+
): ComputedProjectionExpression =>
|
|
565
|
+
operation
|
|
566
|
+
? {
|
|
567
|
+
_tag: "relation-sum-expr-normalized",
|
|
568
|
+
path: path as string,
|
|
569
|
+
expression,
|
|
570
|
+
unit: options.unit,
|
|
571
|
+
toBase: options.toBase,
|
|
572
|
+
factors: options.factors,
|
|
573
|
+
operation
|
|
574
|
+
}
|
|
575
|
+
: {
|
|
576
|
+
_tag: "relation-sum-expr-normalized",
|
|
577
|
+
path: path as string,
|
|
578
|
+
expression,
|
|
579
|
+
unit: options.unit,
|
|
580
|
+
toBase: options.toBase,
|
|
581
|
+
factors: options.factors
|
|
582
|
+
},
|
|
583
|
+
collect: (field: string, operation?: ComputedProjectionOperation): ComputedProjectionExpression =>
|
|
584
|
+
operation
|
|
585
|
+
? {
|
|
586
|
+
_tag: "relation-collect",
|
|
587
|
+
path: path as string,
|
|
588
|
+
field,
|
|
589
|
+
distinct: false,
|
|
590
|
+
operation
|
|
591
|
+
}
|
|
592
|
+
: {
|
|
593
|
+
_tag: "relation-collect",
|
|
594
|
+
path: path as string,
|
|
595
|
+
field,
|
|
596
|
+
distinct: false
|
|
597
|
+
},
|
|
598
|
+
collectDistinct: (field: string, operation?: ComputedProjectionOperation): ComputedProjectionExpression =>
|
|
599
|
+
operation
|
|
600
|
+
? {
|
|
601
|
+
_tag: "relation-collect",
|
|
602
|
+
path: path as string,
|
|
603
|
+
field,
|
|
604
|
+
distinct: true,
|
|
605
|
+
operation
|
|
606
|
+
}
|
|
607
|
+
: {
|
|
608
|
+
_tag: "relation-collect",
|
|
609
|
+
path: path as string,
|
|
610
|
+
field,
|
|
611
|
+
distinct: true
|
|
612
|
+
},
|
|
613
|
+
collectFields: (fields: readonly string[], operation?: ComputedProjectionOperation): ComputedProjectionExpression =>
|
|
614
|
+
operation
|
|
615
|
+
? {
|
|
616
|
+
_tag: "relation-collect-fields",
|
|
617
|
+
path: path as string,
|
|
618
|
+
fields,
|
|
619
|
+
distinct: false,
|
|
620
|
+
operation
|
|
621
|
+
}
|
|
622
|
+
: {
|
|
623
|
+
_tag: "relation-collect-fields",
|
|
624
|
+
path: path as string,
|
|
625
|
+
fields,
|
|
626
|
+
distinct: false
|
|
627
|
+
},
|
|
628
|
+
collectDistinctFields: (
|
|
629
|
+
fields: readonly string[],
|
|
630
|
+
operation?: ComputedProjectionOperation
|
|
631
|
+
): ComputedProjectionExpression =>
|
|
632
|
+
operation
|
|
633
|
+
? {
|
|
634
|
+
_tag: "relation-collect-fields",
|
|
635
|
+
path: path as string,
|
|
636
|
+
fields,
|
|
637
|
+
distinct: true,
|
|
638
|
+
operation
|
|
639
|
+
}
|
|
640
|
+
: {
|
|
641
|
+
_tag: "relation-collect-fields",
|
|
642
|
+
path: path as string,
|
|
643
|
+
fields,
|
|
644
|
+
distinct: true
|
|
645
|
+
}
|
|
646
|
+
})
|
|
647
|
+
|
|
648
|
+
export const expr = {
|
|
649
|
+
field: (field: string): ComputedProjectionMathExpression => ({ _tag: "field", field }),
|
|
650
|
+
mul: (
|
|
651
|
+
left: ComputedProjectionMathExpression,
|
|
652
|
+
right: ComputedProjectionMathExpression
|
|
653
|
+
): ComputedProjectionMathExpression => ({ _tag: "mul", left, right })
|
|
654
|
+
} as const
|
|
655
|
+
|
|
656
|
+
export const computed = <T extends ComputedProjectionMap>(value: T): T => value
|
|
657
|
+
|
|
658
|
+
export const projectComputed: {
|
|
659
|
+
<
|
|
660
|
+
Q extends Query<any> | QueryWhere<any, any, any> | QueryEnd<any, "one" | "many", any>,
|
|
661
|
+
I extends Record<string, unknown>,
|
|
662
|
+
A = ExtractFieldValuesRefined<Q>,
|
|
663
|
+
R = never,
|
|
664
|
+
E extends boolean = ExtractExclusiveness<Q>
|
|
665
|
+
>(
|
|
666
|
+
schema: S.Codec<Option.Option<A>, I, R>,
|
|
667
|
+
computedProjection: ComputedProjectionMap,
|
|
668
|
+
mode: "collect"
|
|
669
|
+
): (
|
|
670
|
+
current: Q
|
|
671
|
+
) => QueryProjection<ExtractFieldValuesRefined<Q>, A, R, ExtractTType<Q>, E>
|
|
672
|
+
|
|
673
|
+
<
|
|
674
|
+
Q extends Query<any> | QueryWhere<any, any, any> | QueryEnd<any, "one" | "many", any>,
|
|
675
|
+
I extends Record<string, unknown>,
|
|
676
|
+
A = ExtractFieldValuesRefined<Q>,
|
|
677
|
+
R = never,
|
|
678
|
+
E extends boolean = ExtractExclusiveness<Q>
|
|
679
|
+
>(
|
|
680
|
+
schema: S.Codec<A, I, R>,
|
|
681
|
+
computedProjection: ComputedProjectionMap,
|
|
682
|
+
mode?: "project"
|
|
683
|
+
): (
|
|
684
|
+
current: Q
|
|
685
|
+
) => QueryProjection<ExtractFieldValuesRefined<Q>, A, R, ExtractTType<Q>, E>
|
|
686
|
+
} = (schema: any, computedProjection: ComputedProjectionMap, mode = "project") => (current: any) =>
|
|
687
|
+
new Project({ current, schema, mode, computed: computedProjection } as any)
|
|
688
|
+
|
|
359
689
|
type GetArV<T> = T extends readonly (infer R)[] ? R : never
|
|
360
690
|
|
|
361
691
|
export type FilterContinuations<IsCurrentInitial extends boolean = false> = {
|
|
@@ -1538,7 +1868,7 @@ export type NestedQueriesFreeDisjointRefinement = {
|
|
|
1538
1868
|
fb: (current: Query<TFieldValues>) => QueryWhere<TFieldValues, TFieldValuesRefined2, E2>
|
|
1539
1869
|
): (
|
|
1540
1870
|
current: QueryWhere<TFieldValues, TFieldValuesRefined, E>
|
|
1541
|
-
) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined2
|
|
1871
|
+
) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined2>
|
|
1542
1872
|
|
|
1543
1873
|
<
|
|
1544
1874
|
TFieldValues extends FieldValues,
|
|
@@ -1555,7 +1885,7 @@ export type NestedQueriesFreeDisjointRefinement = {
|
|
|
1555
1885
|
) => QueryWhere<TFieldValues, TFieldValuesRefined3, E3>
|
|
1556
1886
|
): (
|
|
1557
1887
|
current: QueryWhere<TFieldValues, TFieldValuesRefined, E>
|
|
1558
|
-
) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined3
|
|
1888
|
+
) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined3>
|
|
1559
1889
|
|
|
1560
1890
|
<
|
|
1561
1891
|
TFieldValues extends FieldValues,
|
|
@@ -1577,7 +1907,7 @@ export type NestedQueriesFreeDisjointRefinement = {
|
|
|
1577
1907
|
) => QueryWhere<TFieldValues, TFieldValuesRefined4, E4>
|
|
1578
1908
|
): (
|
|
1579
1909
|
current: QueryWhere<TFieldValues, TFieldValuesRefined, E>
|
|
1580
|
-
) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined4
|
|
1910
|
+
) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined4>
|
|
1581
1911
|
|
|
1582
1912
|
<
|
|
1583
1913
|
TFieldValues extends FieldValues,
|
|
@@ -1604,7 +1934,7 @@ export type NestedQueriesFreeDisjointRefinement = {
|
|
|
1604
1934
|
) => QueryWhere<TFieldValues, TFieldValuesRefined5, E5>
|
|
1605
1935
|
): (
|
|
1606
1936
|
current: QueryWhere<TFieldValues, TFieldValuesRefined, E>
|
|
1607
|
-
) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined5
|
|
1937
|
+
) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined5>
|
|
1608
1938
|
|
|
1609
1939
|
<
|
|
1610
1940
|
TFieldValues extends FieldValues,
|
|
@@ -1636,7 +1966,7 @@ export type NestedQueriesFreeDisjointRefinement = {
|
|
|
1636
1966
|
) => QueryWhere<TFieldValues, TFieldValuesRefined6, E6>
|
|
1637
1967
|
): (
|
|
1638
1968
|
current: QueryWhere<TFieldValues, TFieldValuesRefined, E>
|
|
1639
|
-
) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined6
|
|
1969
|
+
) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined6>
|
|
1640
1970
|
|
|
1641
1971
|
<
|
|
1642
1972
|
TFieldValues extends FieldValues,
|
|
@@ -1673,7 +2003,7 @@ export type NestedQueriesFreeDisjointRefinement = {
|
|
|
1673
2003
|
) => QueryWhere<TFieldValues, TFieldValuesRefined7, E7>
|
|
1674
2004
|
): (
|
|
1675
2005
|
current: QueryWhere<TFieldValues, TFieldValuesRefined, E>
|
|
1676
|
-
) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined7
|
|
2006
|
+
) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined7>
|
|
1677
2007
|
|
|
1678
2008
|
<
|
|
1679
2009
|
TFieldValues extends FieldValues,
|
|
@@ -1715,7 +2045,7 @@ export type NestedQueriesFreeDisjointRefinement = {
|
|
|
1715
2045
|
) => QueryWhere<TFieldValues, TFieldValuesRefined8, E8>
|
|
1716
2046
|
): (
|
|
1717
2047
|
current: QueryWhere<TFieldValues, TFieldValuesRefined, E>
|
|
1718
|
-
) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined2
|
|
2048
|
+
) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined2>
|
|
1719
2049
|
|
|
1720
2050
|
<
|
|
1721
2051
|
TFieldValues extends FieldValues,
|
|
@@ -1762,7 +2092,7 @@ export type NestedQueriesFreeDisjointRefinement = {
|
|
|
1762
2092
|
) => QueryWhere<TFieldValues, TFieldValuesRefined9, E9>
|
|
1763
2093
|
): (
|
|
1764
2094
|
current: QueryWhere<TFieldValues, TFieldValuesRefined, E>
|
|
1765
|
-
) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined9
|
|
2095
|
+
) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined9>
|
|
1766
2096
|
|
|
1767
2097
|
<
|
|
1768
2098
|
TFieldValues extends FieldValues,
|
|
@@ -1814,7 +2144,7 @@ export type NestedQueriesFreeDisjointRefinement = {
|
|
|
1814
2144
|
) => QueryWhere<TFieldValues, TFieldValuesRefined10, E10>
|
|
1815
2145
|
): (
|
|
1816
2146
|
current: QueryWhere<TFieldValues, TFieldValuesRefined, E>
|
|
1817
|
-
) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined10
|
|
2147
|
+
) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined10>
|
|
1818
2148
|
|
|
1819
2149
|
<
|
|
1820
2150
|
TFieldValues extends FieldValues,
|
|
@@ -1871,7 +2201,7 @@ export type NestedQueriesFreeDisjointRefinement = {
|
|
|
1871
2201
|
) => QueryWhere<TFieldValues, TFieldValuesRefined11, E11>
|
|
1872
2202
|
): (
|
|
1873
2203
|
current: QueryWhere<TFieldValues, TFieldValuesRefined, E>
|
|
1874
|
-
) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined11
|
|
2204
|
+
) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined11>
|
|
1875
2205
|
|
|
1876
2206
|
<
|
|
1877
2207
|
TFieldValues extends FieldValues,
|
|
@@ -1933,7 +2263,7 @@ export type NestedQueriesFreeDisjointRefinement = {
|
|
|
1933
2263
|
) => QueryWhere<TFieldValues, TFieldValuesRefined12, E12>
|
|
1934
2264
|
): (
|
|
1935
2265
|
current: QueryWhere<TFieldValues, TFieldValuesRefined, E>
|
|
1936
|
-
) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined12
|
|
2266
|
+
) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined12>
|
|
1937
2267
|
|
|
1938
2268
|
<
|
|
1939
2269
|
TFieldValues extends FieldValues,
|
|
@@ -2000,7 +2330,7 @@ export type NestedQueriesFreeDisjointRefinement = {
|
|
|
2000
2330
|
) => QueryWhere<TFieldValues, TFieldValuesRefined13, E13>
|
|
2001
2331
|
): (
|
|
2002
2332
|
current: QueryWhere<TFieldValues, TFieldValuesRefined, E>
|
|
2003
|
-
) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined13
|
|
2333
|
+
) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined13>
|
|
2004
2334
|
|
|
2005
2335
|
<
|
|
2006
2336
|
TFieldValues extends FieldValues,
|
|
@@ -2072,7 +2402,7 @@ export type NestedQueriesFreeDisjointRefinement = {
|
|
|
2072
2402
|
) => QueryWhere<TFieldValues, TFieldValuesRefined14, E14>
|
|
2073
2403
|
): (
|
|
2074
2404
|
current: QueryWhere<TFieldValues, TFieldValuesRefined, E>
|
|
2075
|
-
) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined14
|
|
2405
|
+
) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined14>
|
|
2076
2406
|
}
|
|
2077
2407
|
|
|
2078
2408
|
export type FilterWhere =
|
|
@@ -2099,12 +2429,12 @@ export type WhereEveryOrSome =
|
|
|
2099
2429
|
subPath: TFieldName,
|
|
2100
2430
|
dude: (
|
|
2101
2431
|
current: Query<TFieldValues[TFieldName][number]>
|
|
2102
|
-
) => QueryWhere<TFieldValues[TFieldName][number], TFieldValues[TFieldName][number]
|
|
2432
|
+
) => QueryWhere<TFieldValues[TFieldName][number], TFieldValues[TFieldName][number]>,
|
|
2103
2433
|
...dudes: ((
|
|
2104
|
-
current: QueryWhere<TFieldValues[TFieldName][number], TFieldValues[TFieldName][number]
|
|
2105
|
-
) => QueryWhere<TFieldValues[TFieldName][number], TFieldValues[TFieldName][number]
|
|
2434
|
+
current: QueryWhere<TFieldValues[TFieldName][number], TFieldValues[TFieldName][number]>
|
|
2435
|
+
) => QueryWhere<TFieldValues[TFieldName][number], TFieldValues[TFieldName][number]>)[]
|
|
2106
2436
|
): (
|
|
2107
2437
|
current: Query<TFieldValues>
|
|
2108
|
-
) => QueryWhere<TFieldValues, TFieldValues
|
|
2438
|
+
) => QueryWhere<TFieldValues, TFieldValues>
|
|
2109
2439
|
}
|
|
2110
2440
|
& FilterContinuationsWithSubpath
|