@effect-app/infra 0.196.6 → 0.197.0
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/_cjs/services/Store/Cosmos/query.cjs +3 -3
- package/_cjs/services/Store/Cosmos/query.cjs.map +1 -1
- package/_cjs/services/Store/Cosmos.cjs +1 -1
- package/_cjs/services/Store/Cosmos.cjs.map +1 -1
- package/_cjs/services/Store/Memory.cjs +56 -39
- package/_cjs/services/Store/Memory.cjs.map +1 -1
- package/_cjs/services/Store/service.cjs.map +1 -1
- package/_cjs/services/query.cjs +5 -2
- package/_cjs/services/query.cjs.map +1 -1
- package/dist/services/QueueMaker/service.d.ts +2 -2
- package/dist/services/Store/Cosmos/query.d.ts +4 -1
- package/dist/services/Store/Cosmos/query.d.ts.map +1 -1
- package/dist/services/Store/Cosmos/query.js +4 -4
- package/dist/services/Store/Cosmos.d.ts.map +1 -1
- package/dist/services/Store/Cosmos.js +2 -2
- package/dist/services/Store/Memory.d.ts.map +1 -1
- package/dist/services/Store/Memory.js +62 -45
- package/dist/services/Store/service.d.ts +6 -1
- package/dist/services/Store/service.d.ts.map +1 -1
- package/dist/services/Store/service.js +1 -1
- package/dist/services/query.d.ts +1 -1
- package/dist/services/query.d.ts.map +1 -1
- package/dist/services/query.js +6 -3
- package/dist/services/simpledb/cosmosdb.d.ts +2 -2
- package/dist/services/simpledb/diskdb.d.ts +1 -1
- package/dist/services/simpledb/memdb.d.ts +1 -1
- package/dist/services/simpledb/redisdb.d.ts +5 -5
- package/dist/services/simpledb/shared.d.ts +5 -5
- package/dist/services/simpledb/simpledb.d.ts +2 -2
- package/package.json +4 -4
- package/src/services/Store/Cosmos/query.ts +3 -3
- package/src/services/Store/Cosmos.ts +1 -0
- package/src/services/Store/Memory.ts +21 -1
- package/src/services/Store/service.ts +7 -1
- package/src/services/query.ts +7 -4
package/dist/services/query.js
CHANGED
|
@@ -37,7 +37,7 @@ const wh = (...operation) => (current) => new Where({ current, operation });
|
|
|
37
37
|
export const where = wh;
|
|
38
38
|
export const and = (...operation) => (current) => new And({ current, operation: typeof operation[0] === "function" ? operation[0] : operation });
|
|
39
39
|
export const or = (...operation) => (current) => new Or({ current, operation: typeof operation[0] === "function" ? operation[0] : operation });
|
|
40
|
-
export const order = (field, desc) => (current) => new Order({ current, field, desc });
|
|
40
|
+
export const order = (field, desc) => (current) => new Order({ current, field, direction: desc ? "DESC" : "ASC" });
|
|
41
41
|
export const page = ({ limit, skip }) => (current) => new Page({
|
|
42
42
|
current,
|
|
43
43
|
limit,
|
|
@@ -51,8 +51,10 @@ const interpret = (_) => {
|
|
|
51
51
|
let schema = undefined;
|
|
52
52
|
let limit = undefined;
|
|
53
53
|
let skip = undefined;
|
|
54
|
+
const order = [];
|
|
54
55
|
const upd = (v) => {
|
|
55
56
|
values.push(...v.filter);
|
|
57
|
+
order.push(...v.order);
|
|
56
58
|
limit = v.limit;
|
|
57
59
|
skip = v.skip;
|
|
58
60
|
schema = v.schema;
|
|
@@ -117,7 +119,8 @@ const interpret = (_) => {
|
|
|
117
119
|
filter: values,
|
|
118
120
|
limit,
|
|
119
121
|
skip,
|
|
120
|
-
schema
|
|
122
|
+
schema,
|
|
123
|
+
order
|
|
121
124
|
};
|
|
122
125
|
};
|
|
123
126
|
export const query = ((repo, q) => {
|
|
@@ -150,4 +153,4 @@ export const query = ((repo, q) => {
|
|
|
150
153
|
? repo.utils.parseMany2(_, schema)
|
|
151
154
|
: repo.utils.parseMany(_))));
|
|
152
155
|
});
|
|
153
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
156
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMvcXVlcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBT0EsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBc0NoRSxNQUFNLE9BQU8sT0FBMEMsU0FBUSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBdUI7SUFHbkcsR0FBRyxDQUFLO0lBQ1IsSUFBSSxDQUFLO0lBQ2xCO1FBQ0UsS0FBSyxDQUFDLEVBQUUsS0FBSyxFQUFFLFNBQWtCLEVBQUUsQ0FBQyxDQUFBO0lBQ3RDLENBQUM7Q0FDRjtBQUVELE1BQU0sT0FBTyxLQUF3QyxTQUFRLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUduRjtJQUNBLElBQUksQ0FBTTtJQUNWLEdBQUcsQ0FBSztJQUNDLElBQUksQ0FBSztDQUNuQjtBQUVELE1BQU0sT0FBTyxHQUFzQyxTQUFRLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUcvRTtJQUNBLElBQUksQ0FBTTtJQUNWLEdBQUcsQ0FBSztJQUNDLElBQUksQ0FBSztDQUNuQjtBQUVELE1BQU0sT0FBTyxFQUFxQyxTQUFRLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUc3RTtJQUNBLElBQUksQ0FBTTtJQUNWLEdBQUcsQ0FBSztJQUNDLElBQUksQ0FBSztDQUNuQjtBQUVELE1BQU0sT0FBTyxJQUF1QyxTQUFRLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUlqRjtJQUNBLElBQUksQ0FBTTtJQUNELElBQUksQ0FBSztDQUNuQjtBQUVELE1BQU0sT0FBTyxLQUNYLFNBQVEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBSTlCO0lBR0YsSUFBSSxDQUFNO0lBQ0QsSUFBSSxDQUFLO0NBQ25CO0FBRUQsTUFBTSxPQUFPLE9BQWdELFNBQVEs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
|
|
@@ -7,8 +7,8 @@ import type { DBRecord } from "./shared.js";
|
|
|
7
7
|
import { OptimisticLockException } from "./shared.js";
|
|
8
8
|
import * as simpledb from "./simpledb.js";
|
|
9
9
|
export declare function createContext<TKey extends string, EA, A extends DBRecord<TKey>>(): <REncode, RDecode, EDecode>(type: string, encode: (record: A) => Effect<EA, never, REncode>, decode: (d: EA) => Effect<A, EDecode, RDecode>, indexes: IndexingPolicy) => import("effect/Effect").Effect<{
|
|
10
|
-
find: (id: string) => import("effect/Effect").Effect<import("effect/Option").Option<A>, import("effect/Cause").UnknownException | simpledb.InvalidStateError, simpledb.RecordCache | RDecode
|
|
10
|
+
find: (id: string) => import("effect/Effect").Effect<import("effect/Option").Option<A>, import("effect/Cause").UnknownException | simpledb.InvalidStateError, Cosmos.CosmosClient | simpledb.RecordCache | RDecode>;
|
|
11
11
|
findBy: (parameters: Record<string, string>) => import("effect/Effect").Effect<import("effect/Option").Option<any>, import("effect/Cause").UnknownException, Cosmos.CosmosClient>;
|
|
12
|
-
save: (record: A) => import("effect/Effect").Effect<A, OptimisticLockException, simpledb.RecordCache | REncode
|
|
12
|
+
save: (record: A) => import("effect/Effect").Effect<A, OptimisticLockException, Cosmos.CosmosClient | simpledb.RecordCache | REncode>;
|
|
13
13
|
}, import("effect/Cause").UnknownException, Cosmos.CosmosClient>;
|
|
14
14
|
//# sourceMappingURL=cosmosdb.d.ts.map
|
|
@@ -6,7 +6,7 @@ import * as simpledb from "./simpledb.js";
|
|
|
6
6
|
export declare function createContext<TKey extends string, EA, A extends DBRecord<TKey>>(): <REncode, RDecode, EDecode>(type: string, encode: (record: A) => Effect<EA, never, REncode>, decode: (d: EA) => Effect<A, EDecode, RDecode>, schemaVersion: string, makeIndexKey: (r: A) => Index, dir?: string) => {
|
|
7
7
|
find: (id: string) => import("effect/Effect").Effect<import("effect/Option").Option<A>, simpledb.InvalidStateError, simpledb.RecordCache | RDecode>;
|
|
8
8
|
findByIndex: (index: Index) => import("effect/Effect").Effect<import("effect/Option").Option<TKey>, never, never>;
|
|
9
|
-
save: (record: A) => import("effect/Effect").Effect<A, CouldNotAquireDbLockException |
|
|
9
|
+
save: (record: A) => import("effect/Effect").Effect<A, CouldNotAquireDbLockException | import("./shared.js").OptimisticLockException | simpledb.InvalidStateError, simpledb.RecordCache | REncode>;
|
|
10
10
|
};
|
|
11
11
|
export declare function initialise(dir: string): void;
|
|
12
12
|
//# sourceMappingURL=diskdb.d.ts.map
|
|
@@ -6,6 +6,6 @@ import * as simpledb from "./simpledb.js";
|
|
|
6
6
|
export declare function createContext<TKey extends string, EA, A extends DBRecord<TKey>>(): <REncode, RDecode, EDecode>(type: string, encode: (record: A) => Effect<EA, never, REncode>, decode: (d: EA) => Effect<A, EDecode, RDecode>) => {
|
|
7
7
|
find: (id: string) => import("effect/Effect").Effect<import("effect/Option").Option<A>, import("@effect/schema/ParseResult").ParseError | simpledb.InvalidStateError, simpledb.RecordCache | RDecode>;
|
|
8
8
|
findBy: <V extends Partial<A>>(keys: V, eq: Equivalence<V>) => import("effect/Effect").Effect<import("effect/Option").Option<A & {}>, import("@effect/schema/ParseResult").ParseError, RDecode>;
|
|
9
|
-
save: (record: A) => import("effect/Effect").Effect<A, import("@effect/schema/ParseResult").ParseError |
|
|
9
|
+
save: (record: A) => import("effect/Effect").Effect<A, import("@effect/schema/ParseResult").ParseError | import("./shared.js").OptimisticLockException | simpledb.InvalidStateError, simpledb.RecordCache | REncode>;
|
|
10
10
|
};
|
|
11
11
|
//# sourceMappingURL=memdb.d.ts.map
|
|
@@ -6,22 +6,22 @@ import type { DBRecord, Index } from "./shared.js";
|
|
|
6
6
|
import { CouldNotAquireDbLockException } from "./shared.js";
|
|
7
7
|
import * as simpledb from "./simpledb.js";
|
|
8
8
|
export declare function createContext<TKey extends string, EA, A extends DBRecord<TKey>>(): <REncode, RDecode, EDecode>(type: string, encode: (record: A) => Effect<EA, never, REncode>, decode: (d: EA) => Effect<A, EDecode, RDecode>, schemaVersion: string, makeIndexKey: (r: A) => Index) => {
|
|
9
|
-
find: (id: string) => import("effect/Effect").Effect<import("effect/Option").Option<A>, simpledb.InvalidStateError,
|
|
9
|
+
find: (id: string) => import("effect/Effect").Effect<import("effect/Option").Option<A>, simpledb.InvalidStateError, RedisClient | simpledb.RecordCache | RDecode>;
|
|
10
10
|
findByIndex: (index: Index) => import("effect/Effect").Effect<import("effect/Option").Option<TKey>, import("@effect-app/infra-adapters/redis-client").ConnectionException, RedisClient>;
|
|
11
|
-
save: (record: A) => import("effect/Effect").Effect<A, CouldNotAquireDbLockException |
|
|
11
|
+
save: (record: A) => import("effect/Effect").Effect<A, CouldNotAquireDbLockException | import("./shared.js").OptimisticLockException | simpledb.InvalidStateError, RedisClient | simpledb.RecordCache | REncode>;
|
|
12
12
|
};
|
|
13
13
|
declare const RedisSerializedDBRecord_base: S.EnhancedClass<{
|
|
14
|
+
readonly data: string;
|
|
14
15
|
readonly version: string;
|
|
15
16
|
readonly timestamp: Date;
|
|
16
|
-
readonly data: string;
|
|
17
17
|
}, {
|
|
18
|
+
readonly data: string;
|
|
18
19
|
readonly version: string;
|
|
19
20
|
readonly timestamp: string;
|
|
20
|
-
readonly data: string;
|
|
21
21
|
}, never, {
|
|
22
|
+
readonly data: string;
|
|
22
23
|
readonly version: string;
|
|
23
24
|
readonly timestamp: Date;
|
|
24
|
-
readonly data: string;
|
|
25
25
|
}, RedisSerializedDBRecord, {
|
|
26
26
|
version: S.Schema<string, string, never>;
|
|
27
27
|
timestamp: S.Schema<Date, string, never> & {
|
|
@@ -38,17 +38,17 @@ export interface DBRecord<TKey extends string> {
|
|
|
38
38
|
id: TKey;
|
|
39
39
|
}
|
|
40
40
|
declare const SerializedDBRecord_base: S.EnhancedClass<{
|
|
41
|
+
readonly data: string;
|
|
41
42
|
readonly version: string;
|
|
42
43
|
readonly timestamp: Date;
|
|
43
|
-
readonly data: string;
|
|
44
44
|
}, {
|
|
45
|
+
readonly data: string;
|
|
45
46
|
readonly version: string;
|
|
46
47
|
readonly timestamp: string;
|
|
47
|
-
readonly data: string;
|
|
48
48
|
}, never, {
|
|
49
|
+
readonly data: string;
|
|
49
50
|
readonly version: string;
|
|
50
51
|
readonly timestamp: Date;
|
|
51
|
-
readonly data: string;
|
|
52
52
|
}, SerializedDBRecord, {
|
|
53
53
|
version: S.Schema<string, string, never>;
|
|
54
54
|
timestamp: S.Schema<Date, string, never> & {
|
|
@@ -59,13 +59,13 @@ declare const SerializedDBRecord_base: S.EnhancedClass<{
|
|
|
59
59
|
export declare class SerializedDBRecord extends SerializedDBRecord_base {
|
|
60
60
|
}
|
|
61
61
|
export declare function makeSerialisedDBRecord(s: Schema<any>): S.Schema<{
|
|
62
|
+
readonly data: any;
|
|
62
63
|
readonly version: number;
|
|
63
64
|
readonly timestamp: Date;
|
|
64
|
-
readonly data: any;
|
|
65
65
|
}, {
|
|
66
|
+
readonly data: any;
|
|
66
67
|
readonly version: number;
|
|
67
68
|
readonly timestamp: string;
|
|
68
|
-
readonly data: any;
|
|
69
69
|
}, never>;
|
|
70
70
|
export interface CachedRecord<T> {
|
|
71
71
|
version: string;
|
|
@@ -17,7 +17,7 @@ export interface RecordCache extends ReturnType<typeof makeLiveRecordCache> {
|
|
|
17
17
|
}
|
|
18
18
|
export declare const RecordCache: import("effect/Context").Tag<RecordCache, RecordCache>;
|
|
19
19
|
export declare const LiveRecordCache: import("effect/Layer").Layer<RecordCache, never, never>;
|
|
20
|
-
export declare function find<R, RDecode, EDecode, E, EA, A>(tryRead: (id: string) => Effect<Option<CachedRecord<EA>>, E, R>, decode: (d: EA) => Effect<A, EDecode, RDecode>, type: string): (id: string) => import("effect/Effect").Effect<import("effect/Option").Option<A>,
|
|
20
|
+
export declare function find<R, RDecode, EDecode, E, EA, A>(tryRead: (id: string) => Effect<Option<CachedRecord<EA>>, E, R>, decode: (d: EA) => Effect<A, EDecode, RDecode>, type: string): (id: string) => import("effect/Effect").Effect<import("effect/Option").Option<A>, InvalidStateError | E, RecordCache | R | RDecode>;
|
|
21
21
|
export declare function storeDirectly<R, E, TKey extends string, A extends DBRecord<TKey>>(save: (r: A, version: Option<Version>) => Effect<CachedRecord<A>, E, R>, type: string): (record: A) => import("effect/Effect").Effect<A, E, RecordCache | R>;
|
|
22
|
-
export declare function store<R, E, R2, E2, TKey extends string, EA, A extends DBRecord<TKey>>(tryRead: (id: string) => Effect<Option<CachedRecord<EA>>, E, R>, save: (r: A, version: Option<Version>) => Effect<CachedRecord<A>, E, R>, lock: (id: string) => Effect<unknown, E2, R2 | Scope>, type: string): (record: A) => import("effect/Effect").Effect<A,
|
|
22
|
+
export declare function store<R, E, R2, E2, TKey extends string, EA, A extends DBRecord<TKey>>(tryRead: (id: string) => Effect<Option<CachedRecord<EA>>, E, R>, save: (r: A, version: Option<Version>) => Effect<CachedRecord<A>, E, R>, lock: (id: string) => Effect<unknown, E2, R2 | Scope>, type: string): (record: A) => import("effect/Effect").Effect<A, OptimisticLockException | InvalidStateError | E | E2, RecordCache | R | Exclude<R2, import("effect/Scope").Scope>>;
|
|
23
23
|
//# sourceMappingURL=simpledb.d.ts.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@effect-app/infra",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.197.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"dependencies": {
|
|
@@ -19,10 +19,10 @@
|
|
|
19
19
|
"pure-rand": "6.0.4",
|
|
20
20
|
"redlock": "^4.2.0",
|
|
21
21
|
"@effect-app/core": "0.146.1",
|
|
22
|
-
"@effect-app/fluent-extensions": "0.139.0",
|
|
23
22
|
"@effect-app/infra-adapters": "0.133.3",
|
|
24
|
-
"effect-app": "0.
|
|
25
|
-
"@effect-app/schema": "0.197.1"
|
|
23
|
+
"@effect-app/fluent-extensions": "0.139.0",
|
|
24
|
+
"@effect-app/schema": "0.197.1",
|
|
25
|
+
"effect-app": "0.173.3"
|
|
26
26
|
},
|
|
27
27
|
"devDependencies": {
|
|
28
28
|
"@babel/cli": "^7.23.9",
|
|
@@ -230,11 +230,10 @@ export function buildWhereCosmosQuery3(
|
|
|
230
230
|
importedMarkerId: string,
|
|
231
231
|
defaultValues: Record<string, unknown>,
|
|
232
232
|
select?: NonEmptyReadonlyArray<string>,
|
|
233
|
+
order?: NonEmptyReadonlyArray<{ key: string; direction: "ASC" | "DESC" }>,
|
|
233
234
|
skip?: number,
|
|
234
235
|
limit?: number
|
|
235
236
|
) {
|
|
236
|
-
const lm = skip !== undefined || limit !== undefined ? `OFFSET ${skip ?? 0} LIMIT ${limit ?? 999999}` : ""
|
|
237
|
-
|
|
238
237
|
const statement = (x: FilterR, i: number) => {
|
|
239
238
|
let k = x.path.includes(".-1.")
|
|
240
239
|
? `${x.path.split(".-1.")[0]}.${x.path.split(".-1.")[1]!}`
|
|
@@ -378,7 +377,8 @@ export function buildWhereCosmosQuery3(
|
|
|
378
377
|
}
|
|
379
378
|
|
|
380
379
|
WHERE f.id != @id ${filter.length ? `AND ${print(filter)}` : ""}
|
|
381
|
-
${
|
|
380
|
+
${order ? `ORDER BY ${order.map((_) => `f.${_.key} ${_.direction}`).join(", ")}` : ""}
|
|
381
|
+
${skip !== undefined || limit !== undefined ? `OFFSET ${skip ?? 0} LIMIT ${limit ?? 999999}` : ""}`,
|
|
382
382
|
parameters: [
|
|
383
383
|
{ name: "@id", value: importedMarkerId },
|
|
384
384
|
...values
|
|
@@ -291,6 +291,7 @@ function makeCosmosStore({ prefix }: StorageConfig) {
|
|
|
291
291
|
importedMarkerId,
|
|
292
292
|
defaultValues,
|
|
293
293
|
f.select as NonEmptyReadonlyArray<string> | undefined,
|
|
294
|
+
f.order as NonEmptyReadonlyArray<{ key: string; direction: "ASC" | "DESC" }> | undefined,
|
|
294
295
|
skip,
|
|
295
296
|
limit
|
|
296
297
|
)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
2
|
|
|
3
|
-
import { pick } from "effect-app/utils"
|
|
3
|
+
import { get, pick } from "effect-app/utils"
|
|
4
4
|
import type { RequestContext } from "../../RequestContext.js"
|
|
5
5
|
import type { FilterArgs, FilterJoinSelect, PersistenceModelType, Store, StoreConfig } from "./service.js"
|
|
6
6
|
import { StoreMaker } from "./service.js"
|
|
@@ -12,6 +12,25 @@ export function memFilter<T extends PersistenceModelType<string>, U extends keyo
|
|
|
12
12
|
const select = (r: T[]): M[] => (f.select ? r.map((_) => pick(_, f.select!)) : r) as any
|
|
13
13
|
const skip = f?.skip
|
|
14
14
|
const limit = f?.limit
|
|
15
|
+
const ords = Option.fromNullable(f.order).map((_) =>
|
|
16
|
+
_.map((_) =>
|
|
17
|
+
Order.make<T>((self, that) => {
|
|
18
|
+
// TODO: inspect data types for the right comparison?
|
|
19
|
+
const selfV = get(self, _.key) ?? false
|
|
20
|
+
const thatV = get(that, _.key) ?? false
|
|
21
|
+
if (selfV === thatV) {
|
|
22
|
+
return 0
|
|
23
|
+
}
|
|
24
|
+
if (_.direction === "ASC") {
|
|
25
|
+
return selfV < thatV ? -1 : 1
|
|
26
|
+
}
|
|
27
|
+
return selfV < thatV ? 1 : -1
|
|
28
|
+
})
|
|
29
|
+
)
|
|
30
|
+
)
|
|
31
|
+
if (ords.value) {
|
|
32
|
+
c = c.sortBy(...ords.value)
|
|
33
|
+
}
|
|
15
34
|
if (!skip && limit === 1) {
|
|
16
35
|
return select(
|
|
17
36
|
c.findFirstMap(f.filter ? codeFilter(f.filter) : (_) => Option.some(_)).map(ReadonlyArray.make).getOrElse(
|
|
@@ -47,6 +66,7 @@ function logQuery(f: FilterArgs<any, any>, defaultValues?: any) {
|
|
|
47
66
|
undefined,
|
|
48
67
|
2
|
|
49
68
|
),
|
|
69
|
+
order: JSON.stringify(f.order, undefined, 2),
|
|
50
70
|
select: JSON.stringify(f.select, undefined, 2),
|
|
51
71
|
defaultValues: JSON.stringify(defaultValues, undefined, 2),
|
|
52
72
|
skip: f.skip,
|
|
@@ -63,9 +63,15 @@ export type FilterJoinSelect = {
|
|
|
63
63
|
value: any /* value path[valueKey] of E */
|
|
64
64
|
}
|
|
65
65
|
|
|
66
|
+
export interface O<PM extends PersistenceModelType<unknown>> {
|
|
67
|
+
key: keyof PM
|
|
68
|
+
direction: "ASC" | "DESC"
|
|
69
|
+
}
|
|
70
|
+
|
|
66
71
|
export interface FilterArgs<PM extends PersistenceModelType<unknown>, U extends keyof PM = never> {
|
|
67
72
|
filter?: Filter<PM> | undefined
|
|
68
73
|
select?: NonEmptyReadonlyArray<U> | undefined
|
|
74
|
+
order?: NonEmptyReadonlyArray<O<PM>>
|
|
69
75
|
limit?: number | undefined
|
|
70
76
|
skip?: number | undefined
|
|
71
77
|
}
|
|
@@ -182,7 +188,7 @@ const makeMap = Effect.sync(() => makeContextMap())
|
|
|
182
188
|
export class ContextMap extends TagClassMakeId("effect-app/ContextMap", makeMap)<ContextMap>() {
|
|
183
189
|
}
|
|
184
190
|
|
|
185
|
-
export interface PersistenceModelType<Id> {
|
|
191
|
+
export interface PersistenceModelType<Id> extends Record<string, any> {
|
|
186
192
|
id: Id
|
|
187
193
|
_etag: string | undefined
|
|
188
194
|
}
|
package/src/services/query.ts
CHANGED
|
@@ -93,7 +93,7 @@ export class Order<TFieldValues extends FieldValues, TFieldName extends FieldPat
|
|
|
93
93
|
extends Data.TaggedClass("order")<{
|
|
94
94
|
current: Query<TFieldValues> | QueryEnd<TFieldValues>
|
|
95
95
|
field: TFieldName
|
|
96
|
-
|
|
96
|
+
direction: "ASC" | "DESC"
|
|
97
97
|
}>
|
|
98
98
|
implements QueryEnd<TFieldValues>
|
|
99
99
|
{
|
|
@@ -122,7 +122,7 @@ export const order: <TFieldValues extends FieldValues, TFieldName extends FieldP
|
|
|
122
122
|
field: TFieldName,
|
|
123
123
|
desc?: boolean
|
|
124
124
|
) => (current: Query<TFieldValues> | QueryEnd<TFieldValues>) => QueryEnd<TFieldValues> = (field, desc) => (current) =>
|
|
125
|
-
new Order({ current, field, desc })
|
|
125
|
+
new Order({ current, field, direction: desc ? "DESC" : "ASC" })
|
|
126
126
|
|
|
127
127
|
export const page: <TFieldValues extends FieldValues>(
|
|
128
128
|
page: { limit?: number; skip?: number }
|
|
@@ -304,9 +304,11 @@ const interpret = <TFieldValues extends FieldValues, A = TFieldValues, R = never
|
|
|
304
304
|
let schema: S.Schema<A, TFieldValues, R> | undefined = undefined as any
|
|
305
305
|
let limit: number | undefined = undefined as any
|
|
306
306
|
let skip: number | undefined = undefined as any
|
|
307
|
+
const order: { field: FieldPath<TFieldValues>; direction: "ASC" | "DESC" }[] = []
|
|
307
308
|
|
|
308
|
-
const upd = (v: { schema: any; limit: any; skip: any; filter: readonly FilterResult[] }) => {
|
|
309
|
+
const upd = (v: { schema: any; limit: any; skip: any; filter: readonly FilterResult[]; order: any[] }) => {
|
|
309
310
|
values.push(...v.filter)
|
|
311
|
+
order.push(...v.order)
|
|
310
312
|
limit = v.limit
|
|
311
313
|
skip = v.skip
|
|
312
314
|
schema = v.schema
|
|
@@ -384,7 +386,8 @@ const interpret = <TFieldValues extends FieldValues, A = TFieldValues, R = never
|
|
|
384
386
|
filter: values,
|
|
385
387
|
limit,
|
|
386
388
|
skip,
|
|
387
|
-
schema
|
|
389
|
+
schema,
|
|
390
|
+
order
|
|
388
391
|
}
|
|
389
392
|
}
|
|
390
393
|
|