@effect-app/infra 2.60.0 → 2.60.1
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 +6 -0
- package/dist/Model/query/new-kid-interpreter.d.ts +2 -2
- package/dist/Model/query/new-kid-interpreter.d.ts.map +1 -1
- package/dist/Model/query/new-kid-interpreter.js +12 -6
- package/dist/QueueMaker/SQLQueue.d.ts +1 -1
- package/dist/QueueMaker/memQueue.d.ts +1 -1
- package/dist/QueueMaker/sbqueue.d.ts +3 -3
- package/dist/Store/ContextMapContainer.d.ts +1 -1
- package/dist/Store/service.d.ts +1 -1
- package/dist/api/internal/RequestContextMiddleware.d.ts +1 -1
- package/dist/api/setupRequest.d.ts +2 -2
- package/package.json +1 -1
- package/src/Model/query/new-kid-interpreter.ts +11 -5
- package/test/dist/rawQuery.test.d.ts.map +1 -1
- package/test/rawQuery.test.ts +47 -143
package/CHANGELOG.md
CHANGED
|
@@ -21,8 +21,8 @@ export declare const toFilter: <TFieldValues extends FieldValues, A, R, TFieldVa
|
|
|
21
21
|
key: import("../filter/types/path/eager.js").Path<TFieldValues>;
|
|
22
22
|
direction: "ASC" | "DESC";
|
|
23
23
|
}[]];
|
|
24
|
-
ttype: "
|
|
25
|
-
mode: "
|
|
24
|
+
ttype: "many" | "one" | "count";
|
|
25
|
+
mode: "collect" | "project" | "transform";
|
|
26
26
|
filter: FilterResult[];
|
|
27
27
|
};
|
|
28
28
|
//# sourceMappingURL=new-kid-interpreter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"new-kid-interpreter.d.ts","sourceRoot":"","sources":["../../../src/Model/query/new-kid-interpreter.ts"],"names":[],"mappings":"AAEA,OAAO,EAA8B,CAAC,EAAE,MAAM,YAAY,CAAA;AAG1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAErD,OAAO,EAAgB,KAAK,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAwIzD,eAAO,MAAM,QAAQ,GACnB,YAAY,SAAS,WAAW,EAChC,CAAC,EACD,CAAC,EACD,mBAAmB,SAAS,YAAY,GAAG,YAAY,EAEvD,GAAG,IAAI,CAAC,YAAY,EAAE,mBAAmB,EAAE,CAAC,EAAE,CAAC,CAAC;;;;;aAKP,MAAM;iBAAW,MAAM,EAAE;;aAAzB,MAAM;iBAAW,MAAM,EAAE;;;;;mBA5IhB,KAAK,GAAG,MAAM;;;mBAAd,KAAK,GAAG,MAAM;;;;;
|
|
1
|
+
{"version":3,"file":"new-kid-interpreter.d.ts","sourceRoot":"","sources":["../../../src/Model/query/new-kid-interpreter.ts"],"names":[],"mappings":"AAEA,OAAO,EAA8B,CAAC,EAAE,MAAM,YAAY,CAAA;AAG1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAErD,OAAO,EAAgB,KAAK,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAwIzD,eAAO,MAAM,QAAQ,GACnB,YAAY,SAAS,WAAW,EAChC,CAAC,EACD,CAAC,EACD,mBAAmB,SAAS,YAAY,GAAG,YAAY,EAEvD,GAAG,IAAI,CAAC,YAAY,EAAE,mBAAmB,EAAE,CAAC,EAAE,CAAC,CAAC;;;;;aAKP,MAAM;iBAAW,MAAM,EAAE;;aAAzB,MAAM;iBAAW,MAAM,EAAE;;;;;mBA5IhB,KAAK,GAAG,MAAM;;;mBAAd,KAAK,GAAG,MAAM;;;;;CAyLjE,CAAA"}
|
|
@@ -120,16 +120,22 @@ export const toFilter = (q) => {
|
|
|
120
120
|
select = t.propertySignatures.map((_) => _.name);
|
|
121
121
|
for (const prop of t.propertySignatures) {
|
|
122
122
|
if (S.AST.isTupleType(prop.type)) {
|
|
123
|
-
select
|
|
123
|
+
// make sure we only select when there are actually type literals in the tuple...
|
|
124
|
+
// otherwise we might be dealing with strings etc.
|
|
125
|
+
// TODO; be more strict, can't support arrays with unions that have non TypeLiteral members etc..
|
|
126
|
+
const arraySelect = {
|
|
124
127
|
key: prop.name,
|
|
125
128
|
subKeys: Array.flatMap(prop.type.rest, (x) => {
|
|
126
129
|
const t = walkTransformation(x.type);
|
|
127
130
|
return S.AST.isTypeLiteral(t) ? t.propertySignatures.map((y) => y.name) : [];
|
|
128
131
|
})
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
select
|
|
132
|
+
};
|
|
133
|
+
if (arraySelect.subKeys.length > 0) {
|
|
134
|
+
select.push(arraySelect);
|
|
135
|
+
// make sure we don't double select?
|
|
136
|
+
if (select.includes(prop.name)) {
|
|
137
|
+
select.splice(select.indexOf(prop.name), 1);
|
|
138
|
+
}
|
|
133
139
|
}
|
|
134
140
|
}
|
|
135
141
|
}
|
|
@@ -149,4 +155,4 @@ export const toFilter = (q) => {
|
|
|
149
155
|
: undefined
|
|
150
156
|
});
|
|
151
157
|
};
|
|
152
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
158
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV3LWtpZC1pbnRlcnByZXRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9Nb2RlbC9xdWVyeS9uZXcta2lkLWludGVycHJldGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCw0REFBNEQ7QUFDNUQsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBQ2xELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUlqRCxPQUFPLEVBQUUsSUFBSSxFQUFxQixNQUFNLGlCQUFpQixDQUFBO0FBWXpELE1BQU0sU0FBUyxHQUFHLENBS2hCLENBQWdELEVBQUUsRUFBRTtJQUNwRCxNQUFNLENBQUMsR0FBRyxDQUFvQixDQUFBO0lBRTlCLE1BQU0sSUFBSSxHQUFtQztRQUMzQyxNQUFNLEVBQUUsRUFBRTtRQUNWLE1BQU0sRUFBRSxTQUFTO1FBQ2pCLEtBQUssRUFBRSxTQUFTO1FBQ2hCLElBQUksRUFBRSxTQUFTO1FBQ2YsS0FBSyxFQUFFLEVBQUU7UUFDVCxLQUFLLEVBQUUsU0FBUztRQUNoQixJQUFJLEVBQUUsU0FBUztLQUNoQixDQUFBO0lBRUQsTUFBTSxHQUFHLEdBQUcsQ0FDVixDQUFpQyxFQUNqQyxFQUFFO1FBQ0YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDN0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDM0IsSUFBSSxDQUFDLENBQUMsS0FBSyxLQUFLLFNBQVM7WUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUE7UUFDL0MsSUFBSSxD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
|
|
@@ -13,6 +13,6 @@ export declare function makeSQLQueue<Evt extends {
|
|
|
13
13
|
_tag: string;
|
|
14
14
|
}, EvtE, DrainEvtE>(queueName: NonEmptyString255, queueDrainName: NonEmptyString255, schema: S.Schema<Evt, EvtE>, drainSchema: S.Schema<DrainEvt, DrainEvtE>): Effect.Effect<{
|
|
15
15
|
publish: (messages_0: Evt, ...messages: Evt[]) => Effect.Effect<void, never, never>;
|
|
16
|
-
drain: <DrainE, DrainR>(handleEvent: (ks: DrainEvt) => Effect<void, DrainE, DrainR>, sessionId?: string) => Effect.Effect<never, never, Exclude<Exclude<Exclude<DrainR, Tracer.ParentSpan>, import("../
|
|
16
|
+
drain: <DrainE, DrainR>(handleEvent: (ks: DrainEvt) => Effect<void, DrainE, DrainR>, sessionId?: string) => Effect.Effect<never, never, Exclude<Exclude<Exclude<DrainR, Tracer.ParentSpan>, import("../Store/ContextMapContainer.js").ContextMapContainer | import("../Store/Memory.js").storeId | import("../RequestContext.js").LocaleRef>, Tracer.ParentSpan>>;
|
|
17
17
|
}, never, SqlClient.SqlClient>;
|
|
18
18
|
//# sourceMappingURL=SQLQueue.d.ts.map
|
|
@@ -9,6 +9,6 @@ export declare function makeMemQueue<Evt extends {
|
|
|
9
9
|
_tag: string;
|
|
10
10
|
}, EvtE, DrainEvtE>(queueName: string, queueDrainName: string, schema: S.Schema<Evt, EvtE>, drainSchema: S.Schema<DrainEvt, DrainEvtE>): Effect.Effect<{
|
|
11
11
|
publish: (messages_0: Evt, ...messages: Evt[]) => Effect.Effect<void, never, never>;
|
|
12
|
-
drain: <DrainE, DrainR>(handleEvent: (ks: DrainEvt) => Effect<void, DrainE, DrainR>, sessionId?: string) => Effect.Effect<never, never, Exclude<Exclude<Exclude<DrainR, Tracer.ParentSpan>, import("../
|
|
12
|
+
drain: <DrainE, DrainR>(handleEvent: (ks: DrainEvt) => Effect<void, DrainE, DrainR>, sessionId?: string) => Effect.Effect<never, never, Exclude<Exclude<Exclude<DrainR, Tracer.ParentSpan>, import("../Store/ContextMapContainer.js").ContextMapContainer | import("../Store/Memory.js").storeId | import("../RequestContext.js").LocaleRef>, Tracer.ParentSpan>>;
|
|
13
13
|
}, never, MemQueue>;
|
|
14
14
|
//# sourceMappingURL=memQueue.d.ts.map
|
|
@@ -9,8 +9,8 @@ export declare function makeServiceBusQueue<Evt extends {
|
|
|
9
9
|
id: StringId;
|
|
10
10
|
_tag: string;
|
|
11
11
|
}, EvtE, DrainEvtE>(queueName: string, queueDrainName: string, schema: S.Schema<Evt, EvtE>, drainSchema: S.Schema<DrainEvt, DrainEvtE>): Effect.Effect<{
|
|
12
|
-
drain: <DrainE, DrainR>(handleEvent: (ks: DrainEvt) => Effect<void, DrainE, DrainR>, sessionId?: string) => Effect.Effect<never, never, import("effect/Scope").Scope | Exclude<Exclude<Exclude<DrainR, Tracer.ParentSpan>, import("../
|
|
12
|
+
drain: <DrainE, DrainR>(handleEvent: (ks: DrainEvt) => Effect<void, DrainE, DrainR>, sessionId?: string) => Effect.Effect<never, never, import("effect/Scope").Scope | Exclude<Exclude<Exclude<DrainR, Tracer.ParentSpan>, import("../Store/ContextMapContainer.js").ContextMapContainer | import("../Store/Memory.js").storeId | import("../RequestContext.js").LocaleRef>, ServiceBusReceiverFactory>>;
|
|
13
13
|
publish: (messages_0: Evt, ...messages: Evt[]) => Effect.Effect<void, never, never>;
|
|
14
|
-
}, never, import("@azure/service-bus").ServiceBusSender
|
|
15
|
-
export declare function makeServiceBusLayers(url: string, queueName: string, queueDrainName: string): Layer.Layer<import("@azure/service-bus").ServiceBusSender
|
|
14
|
+
}, never, ServiceBusReceiverFactory | import("@azure/service-bus").ServiceBusSender>;
|
|
15
|
+
export declare function makeServiceBusLayers(url: string, queueName: string, queueDrainName: string): Layer.Layer<ServiceBusReceiverFactory | import("@azure/service-bus").ServiceBusSender, never, never>;
|
|
16
16
|
//# sourceMappingURL=sbqueue.d.ts.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Context, Effect, Layer } from "effect-app";
|
|
2
2
|
import { ContextMap } from "./service.js";
|
|
3
|
-
declare const ContextMapContainer_base: Context.ReferenceClass<ContextMapContainer, "ContextMapContainer", "root"
|
|
3
|
+
declare const ContextMapContainer_base: Context.ReferenceClass<ContextMapContainer, "ContextMapContainer", ContextMap | "root">;
|
|
4
4
|
export declare class ContextMapContainer extends ContextMapContainer_base {
|
|
5
5
|
static readonly layer: Layer.Layer<ContextMapContainer, never, never>;
|
|
6
6
|
}
|
package/dist/Store/service.d.ts
CHANGED
|
@@ -92,7 +92,7 @@ declare const StoreMaker_base: (abstract new (service: {
|
|
|
92
92
|
} & Context.Tag<StoreMaker, StoreMaker> & {} & {
|
|
93
93
|
use: <X>(body: (_: {
|
|
94
94
|
make: <IdKey extends keyof Encoded, Encoded extends FieldValues, R = never, E = never>(name: string, idKey: IdKey, seed?: Effect<Iterable<Encoded>, E, R>, config?: StoreConfig<Encoded>) => Effect<Store<IdKey, Encoded>, E, R>;
|
|
95
|
-
}) => X) => X extends Effect.Effect<infer A_1, infer E_1, infer R_3> ? Effect.Effect<A_1, E_1,
|
|
95
|
+
}) => X) => X extends Effect.Effect<infer A_1, infer E_1, infer R_3> ? Effect.Effect<A_1, E_1, StoreMaker | R_3> : Effect.Effect<X, never, StoreMaker>;
|
|
96
96
|
};
|
|
97
97
|
export declare class StoreMaker extends StoreMaker_base {
|
|
98
98
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Effect } from "effect-app";
|
|
2
2
|
import { HttpServerRequest, HttpServerResponse } from "effect-app/http";
|
|
3
3
|
import { Locale } from "../../RequestContext.js";
|
|
4
|
-
export declare const RequestContextMiddleware: (defaultLocale?: Locale) => <E, R>(app: import("@effect/platform/HttpApp").Default<E, R>) => Effect.Effect<HttpServerResponse.HttpServerResponse, E, HttpServerRequest.HttpServerRequest | Exclude<Exclude<R, import("effect/Tracer").ParentSpan>, import("../../
|
|
4
|
+
export declare const RequestContextMiddleware: (defaultLocale?: Locale) => <E, R>(app: import("@effect/platform/HttpApp").Default<E, R>) => Effect.Effect<HttpServerResponse.HttpServerResponse, E, HttpServerRequest.HttpServerRequest | Exclude<Exclude<R, import("effect/Tracer").ParentSpan>, import("../../Store/ContextMapContainer.js").ContextMapContainer | import("../../Store/Memory.js").storeId | import("../../RequestContext.js").LocaleRef>>;
|
|
5
5
|
//# sourceMappingURL=RequestContextMiddleware.d.ts.map
|
|
@@ -9,6 +9,6 @@ export declare const getRC: Effect.Effect<{
|
|
|
9
9
|
namespace: NonEmptyString255;
|
|
10
10
|
}, never, never>;
|
|
11
11
|
export declare const setupRequestContextFromCurrent: (name?: string, options?: Tracer.SpanOptions) => <R, E, A>(self: Effect<A, E, R>) => Effect.Effect<A, E, Exclude<Exclude<R, Tracer.ParentSpan>, ContextMapContainer>>;
|
|
12
|
-
export declare function setupRequestContext<R, E, A>(self: Effect<A, E, R>, requestContext: RequestContext): Effect.Effect<A, E, Exclude<Exclude<R, Tracer.ParentSpan>,
|
|
13
|
-
export declare function setupRequestContextWithCustomSpan<R, E, A>(self: Effect<A, E, R>, requestContext: RequestContext, name: string, options?: Tracer.SpanOptions): Effect.Effect<A, E, Exclude<Exclude<R, Tracer.ParentSpan>,
|
|
12
|
+
export declare function setupRequestContext<R, E, A>(self: Effect<A, E, R>, requestContext: RequestContext): Effect.Effect<A, E, Exclude<Exclude<R, Tracer.ParentSpan>, ContextMapContainer | storeId | LocaleRef>>;
|
|
13
|
+
export declare function setupRequestContextWithCustomSpan<R, E, A>(self: Effect<A, E, R>, requestContext: RequestContext, name: string, options?: Tracer.SpanOptions): Effect.Effect<A, E, Exclude<Exclude<R, Tracer.ParentSpan>, ContextMapContainer | storeId | LocaleRef>>;
|
|
14
14
|
//# sourceMappingURL=setupRequest.d.ts.map
|
package/package.json
CHANGED
|
@@ -161,7 +161,10 @@ export const toFilter = <
|
|
|
161
161
|
select = t.propertySignatures.map((_) => _.name as string)
|
|
162
162
|
for (const prop of t.propertySignatures) {
|
|
163
163
|
if (S.AST.isTupleType(prop.type)) {
|
|
164
|
-
select
|
|
164
|
+
// make sure we only select when there are actually type literals in the tuple...
|
|
165
|
+
// otherwise we might be dealing with strings etc.
|
|
166
|
+
// TODO; be more strict, can't support arrays with unions that have non TypeLiteral members etc..
|
|
167
|
+
const arraySelect = {
|
|
165
168
|
key: prop.name as string,
|
|
166
169
|
subKeys: Array.flatMap(
|
|
167
170
|
prop.type.rest,
|
|
@@ -170,10 +173,13 @@ export const toFilter = <
|
|
|
170
173
|
return S.AST.isTypeLiteral(t) ? t.propertySignatures.map((y) => y.name as string) : []
|
|
171
174
|
}
|
|
172
175
|
)
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
176
|
+
}
|
|
177
|
+
if (arraySelect.subKeys.length > 0) {
|
|
178
|
+
select.push(arraySelect)
|
|
179
|
+
// make sure we don't double select?
|
|
180
|
+
if (select.includes(prop.name as string)) {
|
|
181
|
+
select.splice(select.indexOf(prop.name as string), 1)
|
|
182
|
+
}
|
|
177
183
|
}
|
|
178
184
|
}
|
|
179
185
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rawQuery.test.d.ts","sourceRoot":"","sources":["../rawQuery.test.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"rawQuery.test.d.ts","sourceRoot":"","sources":["../rawQuery.test.ts"],"names":[],"mappings":""}
|
package/test/rawQuery.test.ts
CHANGED
|
@@ -1,24 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { LogLevels } from "effect-app/utils"
|
|
1
|
+
import { expect, it } from "@effect/vitest"
|
|
2
|
+
import { Config, Effect, Layer, Redacted, S } from "effect-app"
|
|
4
3
|
import { setupRequestContextFromCurrent } from "../src/api/setupRequest.js"
|
|
5
|
-
import {
|
|
4
|
+
import { project } from "../src/Model/query.js"
|
|
6
5
|
import { makeRepo } from "../src/Model/Repository/makeRepo.js"
|
|
7
6
|
import { CosmosStoreLayer } from "../src/Store/Cosmos.js"
|
|
8
7
|
import { MemoryStoreLive } from "../src/Store/Memory.js"
|
|
9
8
|
|
|
10
|
-
export const rt = ManagedRuntime.make(Layer.mergeAll(
|
|
11
|
-
Layer.effect(
|
|
12
|
-
LogLevels,
|
|
13
|
-
LogLevels.pipe(Effect.map((_) => {
|
|
14
|
-
const m = new Map(_)
|
|
15
|
-
m.set("@effect-app/infra", "debug")
|
|
16
|
-
return m
|
|
17
|
-
}))
|
|
18
|
-
),
|
|
19
|
-
Logger.minimumLogLevel(LogLevel.Debug)
|
|
20
|
-
))
|
|
21
|
-
|
|
22
9
|
class Something extends S.Class<Something>()({
|
|
23
10
|
id: S.String,
|
|
24
11
|
name: S.String,
|
|
@@ -89,141 +76,58 @@ class SomethingRepo extends Effect.Service<SomethingRepo>()("SomethingRepo", {
|
|
|
89
76
|
)
|
|
90
77
|
}
|
|
91
78
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
const repo = yield* SomethingRepo
|
|
79
|
+
const test = Effect
|
|
80
|
+
.gen(function*() {
|
|
81
|
+
const repo = yield* SomethingRepo
|
|
96
82
|
|
|
97
|
-
|
|
83
|
+
const projected = S.Struct({ name: S.String, items: S.Array(S.Struct({ id: S.String, value: S.Number })) })
|
|
98
84
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
85
|
+
// ok crazy lol, "value" is a reserved word in CosmosDB, so we have to use t["value"] as a field name instead of t.value
|
|
86
|
+
const items = yield* repo.queryRaw(projected, {
|
|
87
|
+
// TODO
|
|
88
|
+
cosmos: () => ({
|
|
89
|
+
query: `
|
|
104
90
|
SELECT
|
|
105
91
|
f.name,
|
|
106
92
|
ARRAY (SELECT t.id,t["value"] FROM t in f.items) AS items
|
|
107
93
|
FROM Somethings f`,
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
})
|
|
116
|
-
|
|
117
|
-
const items2 = yield* repo.query(project(projected))
|
|
118
|
-
|
|
119
|
-
const expected = [
|
|
120
|
-
{
|
|
121
|
-
name: "Item 1",
|
|
122
|
-
items: [
|
|
123
|
-
{ id: "1-1", value: 10 },
|
|
124
|
-
{ id: "1-2", value: 20 }
|
|
125
|
-
]
|
|
126
|
-
},
|
|
127
|
-
{
|
|
128
|
-
name: "Item 2",
|
|
129
|
-
items: [
|
|
130
|
-
{ id: "2-1", value: 30 },
|
|
131
|
-
{ id: "2-2", value: 40 }
|
|
132
|
-
]
|
|
133
|
-
}
|
|
134
|
-
]
|
|
135
|
-
|
|
136
|
-
expect(items).toStrictEqual(expected)
|
|
137
|
-
expect(items2).toStrictEqual(expected)
|
|
94
|
+
parameters: []
|
|
95
|
+
}),
|
|
96
|
+
memory: (items) =>
|
|
97
|
+
items.map(({ items, name }) => ({
|
|
98
|
+
name,
|
|
99
|
+
items: items.map(({ id, value }) => ({ id, value }))
|
|
100
|
+
}))
|
|
138
101
|
})
|
|
139
|
-
.pipe(setupRequestContextFromCurrent())
|
|
140
|
-
|
|
141
|
-
it("works well in CosmosDB", () =>
|
|
142
|
-
test
|
|
143
|
-
.pipe(Effect.provide(SomethingRepo.TestCosmos), rt.runPromise))
|
|
144
|
-
|
|
145
|
-
it("works well in Memory", () =>
|
|
146
|
-
test
|
|
147
|
-
.pipe(Effect.provide(SomethingRepo.Test), rt.runPromise))
|
|
148
|
-
})
|
|
149
102
|
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
parameters: [{ name: "@v1", value: 20 }, { name: "@v2", value: "d item" }]
|
|
169
|
-
}),
|
|
170
|
-
memory: Array.filterMap(({ items, name }) =>
|
|
171
|
-
items.some((_) => _.value > 20 && _.description.includes("d item"))
|
|
172
|
-
? Option.some({
|
|
173
|
-
name,
|
|
174
|
-
items: items.map(({ id, value }) => ({ id, value }))
|
|
175
|
-
})
|
|
176
|
-
: Option.none()
|
|
177
|
-
)
|
|
178
|
-
})
|
|
179
|
-
|
|
180
|
-
// this sucks and is poorly implemented:
|
|
181
|
-
// in memory, only eq/neq operators are implemented for arrays.
|
|
182
|
-
// wait a minute, cosmos seems to work correctly already... even though a better api would be desirable..
|
|
183
|
-
// // in both: we don't properly group the filters. you want to express; find Something where some item has both value > 20 and description includes "d item"
|
|
184
|
-
// // but in reality, you find Something where at least an item has value > 20, and at least an item has a description that includes "d item".
|
|
185
|
-
const items2 = yield* repo.query(
|
|
186
|
-
where("items.-1.value", "gt", 20),
|
|
187
|
-
and("items.-1.description", "contains", "d item"),
|
|
188
|
-
project(projected)
|
|
189
|
-
)
|
|
190
|
-
// TODO: we need something like this instead:
|
|
191
|
-
/*
|
|
192
|
-
const subQuery = <T extends FieldValues>() => <TKey extends keyof T>(key: TKey) => make<T[TKey][number]>() // todo: mark that this is sub query on field "items"
|
|
193
|
-
|
|
194
|
-
const test = subQuery<typeof Something.Encoded>()("items")
|
|
195
|
-
.pipe(
|
|
196
|
-
where("value", "gt", 20),
|
|
197
|
-
and("description", "contains", "d item")
|
|
198
|
-
)
|
|
199
|
-
|
|
200
|
-
// ideally we can do stuff like:
|
|
201
|
-
where(subQuery("items")(
|
|
202
|
-
where("value", "gt", 10),
|
|
203
|
-
and("description", "contains", "d item")
|
|
204
|
-
))
|
|
205
|
-
*/
|
|
206
|
-
|
|
207
|
-
const expected = [
|
|
208
|
-
{
|
|
209
|
-
name: "Item 2",
|
|
210
|
-
items: [
|
|
211
|
-
{ id: "2-1", value: 30 },
|
|
212
|
-
{ id: "2-2", value: 40 }
|
|
213
|
-
]
|
|
214
|
-
}
|
|
215
|
-
]
|
|
103
|
+
const items2 = yield* repo.query(project(projected))
|
|
104
|
+
|
|
105
|
+
const expected = [
|
|
106
|
+
{
|
|
107
|
+
name: "Item 1",
|
|
108
|
+
items: [
|
|
109
|
+
{ id: "1-1", value: 10 },
|
|
110
|
+
{ id: "1-2", value: 20 }
|
|
111
|
+
]
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
name: "Item 2",
|
|
115
|
+
items: [
|
|
116
|
+
{ id: "2-1", value: 30 },
|
|
117
|
+
{ id: "2-2", value: 40 }
|
|
118
|
+
]
|
|
119
|
+
}
|
|
120
|
+
]
|
|
216
121
|
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
122
|
+
expect(items).toStrictEqual(expected)
|
|
123
|
+
expect(items2).toStrictEqual(expected)
|
|
124
|
+
})
|
|
125
|
+
.pipe(setupRequestContextFromCurrent())
|
|
221
126
|
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
127
|
+
it("works well in CosmosDB", () =>
|
|
128
|
+
test
|
|
129
|
+
.pipe(Effect.provide(SomethingRepo.TestCosmos), Effect.runPromise))
|
|
225
130
|
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
})
|
|
131
|
+
it("works well in Memory", () =>
|
|
132
|
+
test
|
|
133
|
+
.pipe(Effect.provide(SomethingRepo.Test), Effect.runPromise))
|