@casekit/orm2 0.0.0-20250331202540 → 1.0.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/build/builders/buildCount.d.ts +2 -1
- package/build/builders/buildCount.js +5 -8
- package/build/builders/buildCount.test.js +5 -5
- package/build/builders/buildCreate.d.ts +2 -1
- package/build/builders/buildCreate.js +6 -3
- package/build/builders/buildCreate.test.js +4 -4
- package/build/builders/buildDelete.d.ts +2 -1
- package/build/builders/buildDelete.js +2 -2
- package/build/builders/buildDelete.test.js +8 -8
- package/build/builders/buildFind.d.ts +2 -1
- package/build/builders/buildFind.js +5 -8
- package/build/builders/buildFind.test.js +4 -4
- package/build/builders/buildUpdate.d.ts +2 -1
- package/build/builders/buildUpdate.js +6 -3
- package/build/builders/buildUpdate.test.js +8 -8
- package/build/builders/buildWhere.d.ts +2 -1
- package/build/builders/buildWhere.js +30 -8
- package/build/builders/buildWhere.test.js +39 -24
- package/build/connection.d.ts +2 -2
- package/build/index.d.ts +1 -1
- package/build/index.js +1 -1
- package/build/orm.count.d.ts +2 -10
- package/build/orm.count.js +2 -11
- package/build/orm.createMany.d.ts +2 -1
- package/build/orm.createMany.js +2 -2
- package/build/orm.createOne.d.ts +2 -1
- package/build/orm.createOne.js +2 -2
- package/build/orm.d.ts +3 -3
- package/build/orm.deleteMany.d.ts +2 -1
- package/build/orm.deleteMany.js +2 -2
- package/build/orm.deleteOne.d.ts +2 -1
- package/build/orm.deleteOne.js +2 -2
- package/build/orm.findMany.d.ts +2 -1
- package/build/orm.findMany.js +3 -3
- package/build/orm.findOne.d.ts +2 -1
- package/build/orm.findOne.js +11 -19
- package/build/orm.js +13 -13
- package/build/orm.restrict.d.ts +2 -1
- package/build/orm.restrict.js +2 -2
- package/build/orm.updateMany.d.ts +2 -1
- package/build/orm.updateMany.js +3 -3
- package/build/orm.updateOne.d.ts +2 -1
- package/build/orm.updateOne.js +2 -2
- package/build/tests/orm.findMany.includeManyToOne.test.js +21 -5
- package/build/tests/orm.findOne.includeManyToMany.test.js +270 -0
- package/build/tests/orm.findOne.includeManyToOne.test.js +280 -0
- package/build/tests/orm.findOne.includeOneToMany.test.js +454 -0
- package/build/tests/orm.findOne.select.test.js +205 -0
- package/build/tests/orm.findOne.where.test.js +471 -0
- package/build/tests/orm.middleware.findOne.test.d.ts +1 -0
- package/build/tests/orm.middleware.set.test.d.ts +1 -0
- package/build/tests/orm.middleware.set.test.js +100 -0
- package/build/tests/orm.middleware.updateMany.test.d.ts +1 -0
- package/build/tests/orm.middleware.updateOne.test.d.ts +1 -0
- package/build/tests/orm.middleware.values.test.d.ts +1 -0
- package/build/tests/orm.middleware.values.test.js +126 -0
- package/build/tests/orm.middleware.where.test.d.ts +1 -0
- package/build/tests/orm.middleware.where.test.js +1054 -0
- package/build/tests/util/db.d.ts +53 -71
- package/build/types/CreateOneResult.d.ts +6 -2
- package/build/types/CreateOneResult.test-d.js +3 -0
- package/build/types/Middleware.d.ts +14 -0
- package/build/types/Middleware.js +37 -1
- package/build/types/WhereClause.d.ts +8 -8
- package/build/util/applySetMiddleware.d.ts +5 -0
- package/build/util/applySetMiddleware.js +7 -0
- package/build/util/applyValuesMiddleware.d.ts +5 -0
- package/build/util/applyValuesMiddleware.js +7 -0
- package/build/util/applyWhereMiddleware.d.ts +5 -0
- package/build/util/applyWhereMiddleware.js +7 -0
- package/build/util/applyWhereMiddleware.test.d.ts +1 -0
- package/build/util/applyWhereMiddleware.test.js +88 -0
- package/build/util/resultSchema.d.ts +6 -6
- package/package.json +23 -24
- /package/build/tests/{orm.count.middleware.test.d.ts → orm.findOne.includeManyToMany.test.d.ts} +0 -0
- /package/build/tests/{orm.createMany.middleware.test.d.ts → orm.findOne.includeManyToOne.test.d.ts} +0 -0
- /package/build/tests/{orm.createOne.middleware.test.d.ts → orm.findOne.includeOneToMany.test.d.ts} +0 -0
- /package/build/tests/{orm.deleteMany.middleware.test.d.ts → orm.findOne.select.test.d.ts} +0 -0
- /package/build/tests/{orm.deleteOne.middleware.test.d.ts → orm.findOne.where.test.d.ts} +0 -0
- /package/build/tests/{orm.findMany.middleware.test.d.ts → orm.middleware.count.test.d.ts} +0 -0
- /package/build/tests/{orm.count.middleware.test.js → orm.middleware.count.test.js} +0 -0
- /package/build/tests/{orm.findOne.middleware.test.d.ts → orm.middleware.createMany.test.d.ts} +0 -0
- /package/build/tests/{orm.createMany.middleware.test.js → orm.middleware.createMany.test.js} +0 -0
- /package/build/tests/{orm.updateMany.middleware.test.d.ts → orm.middleware.createOne.test.d.ts} +0 -0
- /package/build/tests/{orm.createOne.middleware.test.js → orm.middleware.createOne.test.js} +0 -0
- /package/build/tests/{orm.updateOne.middleware.test.d.ts → orm.middleware.deleteMany.test.d.ts} +0 -0
- /package/build/tests/{orm.deleteMany.middleware.test.js → orm.middleware.deleteMany.test.js} +0 -0
- /package/build/{types/BaseFindParams.d.ts → tests/orm.middleware.deleteOne.test.d.ts} +0 -0
- /package/build/tests/{orm.deleteOne.middleware.test.js → orm.middleware.deleteOne.test.js} +0 -0
- /package/build/{types/BaseFindParams.js → tests/orm.middleware.findMany.test.d.ts} +0 -0
- /package/build/tests/{orm.findMany.middleware.test.js → orm.middleware.findMany.test.js} +0 -0
- /package/build/tests/{orm.findOne.middleware.test.js → orm.middleware.findOne.test.js} +0 -0
- /package/build/tests/{orm.updateMany.middleware.test.js → orm.middleware.updateMany.test.js} +0 -0
- /package/build/tests/{orm.updateOne.middleware.test.js → orm.middleware.updateOne.test.js} +0 -0
package/build/tests/util/db.d.ts
CHANGED
|
@@ -2,9 +2,9 @@ import { Config } from "@casekit/orm2-schema";
|
|
|
2
2
|
export declare const createTestDB: (overrides?: Partial<Omit<Config, "models">>) => {
|
|
3
3
|
db: import("#orm.js").Orm<{
|
|
4
4
|
schema: string;
|
|
5
|
-
readonly operators?: import("@casekit/orm2-schema").OperatorDefinitions
|
|
5
|
+
readonly operators?: import("@casekit/orm2-schema").OperatorDefinitions;
|
|
6
6
|
extensions: readonly string[];
|
|
7
|
-
readonly connection?:
|
|
7
|
+
readonly connection?: import("pg").default.ConnectionConfig | import("pg").default.PoolConfig | import("pg").default.PoolOptions | null;
|
|
8
8
|
pool: boolean;
|
|
9
9
|
logger: import("@casekit/orm2-schema").Logger;
|
|
10
10
|
naming: {
|
|
@@ -46,10 +46,14 @@ export declare const createTestDB: (overrides?: Partial<Omit<Config, "models">>)
|
|
|
46
46
|
};
|
|
47
47
|
readonly email: {
|
|
48
48
|
readonly type: "text";
|
|
49
|
+
readonly zodSchema: import("zod").ZodEmail;
|
|
49
50
|
};
|
|
50
51
|
readonly role: {
|
|
51
52
|
readonly type: "text";
|
|
52
|
-
readonly zodSchema: import("zod").ZodEnum<
|
|
53
|
+
readonly zodSchema: import("zod").ZodEnum<{
|
|
54
|
+
user: "user";
|
|
55
|
+
admin: "admin";
|
|
56
|
+
}>;
|
|
53
57
|
};
|
|
54
58
|
readonly preferences: {
|
|
55
59
|
readonly type: "jsonb";
|
|
@@ -128,30 +132,20 @@ export declare const createTestDB: (overrides?: Partial<Omit<Config, "models">>)
|
|
|
128
132
|
readonly type: "jsonb";
|
|
129
133
|
readonly default: "{}";
|
|
130
134
|
readonly zodSchema: import("zod").ZodObject<{
|
|
131
|
-
foo: import("zod").ZodEnum<
|
|
135
|
+
foo: import("zod").ZodEnum<{
|
|
136
|
+
a: "a";
|
|
137
|
+
b: "b";
|
|
138
|
+
c: "c";
|
|
139
|
+
}>;
|
|
132
140
|
bar: import("zod").ZodArray<import("zod").ZodObject<{
|
|
133
|
-
baz: import("zod").ZodEnum<
|
|
141
|
+
baz: import("zod").ZodEnum<{
|
|
142
|
+
good: "good";
|
|
143
|
+
bad: "bad";
|
|
144
|
+
indifferent: "indifferent";
|
|
145
|
+
}>;
|
|
134
146
|
quux: import("zod").ZodBoolean;
|
|
135
|
-
},
|
|
136
|
-
|
|
137
|
-
quux: boolean;
|
|
138
|
-
}, {
|
|
139
|
-
baz: "good" | "bad" | "indifferent";
|
|
140
|
-
quux: boolean;
|
|
141
|
-
}>, "many">;
|
|
142
|
-
}, "strip", import("zod").ZodTypeAny, {
|
|
143
|
-
foo: "b" | "a" | "c";
|
|
144
|
-
bar: {
|
|
145
|
-
baz: "good" | "bad" | "indifferent";
|
|
146
|
-
quux: boolean;
|
|
147
|
-
}[];
|
|
148
|
-
}, {
|
|
149
|
-
foo: "b" | "a" | "c";
|
|
150
|
-
bar: {
|
|
151
|
-
baz: "good" | "bad" | "indifferent";
|
|
152
|
-
quux: boolean;
|
|
153
|
-
}[];
|
|
154
|
-
}>;
|
|
147
|
+
}, import("zod/v4/core").$strip>>;
|
|
148
|
+
}, import("zod/v4/core").$strip>;
|
|
155
149
|
};
|
|
156
150
|
readonly createdAt: {
|
|
157
151
|
readonly type: "timestamp";
|
|
@@ -564,10 +558,14 @@ export declare const createTestDB: (overrides?: Partial<Omit<Config, "models">>)
|
|
|
564
558
|
};
|
|
565
559
|
readonly email: {
|
|
566
560
|
readonly type: "text";
|
|
561
|
+
readonly zodSchema: import("zod").ZodEmail;
|
|
567
562
|
};
|
|
568
563
|
readonly role: {
|
|
569
564
|
readonly type: "text";
|
|
570
|
-
readonly zodSchema: import("zod").ZodEnum<
|
|
565
|
+
readonly zodSchema: import("zod").ZodEnum<{
|
|
566
|
+
user: "user";
|
|
567
|
+
admin: "admin";
|
|
568
|
+
}>;
|
|
571
569
|
};
|
|
572
570
|
readonly preferences: {
|
|
573
571
|
readonly type: "jsonb";
|
|
@@ -646,30 +644,20 @@ export declare const createTestDB: (overrides?: Partial<Omit<Config, "models">>)
|
|
|
646
644
|
readonly type: "jsonb";
|
|
647
645
|
readonly default: "{}";
|
|
648
646
|
readonly zodSchema: import("zod").ZodObject<{
|
|
649
|
-
foo: import("zod").ZodEnum<
|
|
647
|
+
foo: import("zod").ZodEnum<{
|
|
648
|
+
a: "a";
|
|
649
|
+
b: "b";
|
|
650
|
+
c: "c";
|
|
651
|
+
}>;
|
|
650
652
|
bar: import("zod").ZodArray<import("zod").ZodObject<{
|
|
651
|
-
baz: import("zod").ZodEnum<
|
|
653
|
+
baz: import("zod").ZodEnum<{
|
|
654
|
+
good: "good";
|
|
655
|
+
bad: "bad";
|
|
656
|
+
indifferent: "indifferent";
|
|
657
|
+
}>;
|
|
652
658
|
quux: import("zod").ZodBoolean;
|
|
653
|
-
},
|
|
654
|
-
|
|
655
|
-
quux: boolean;
|
|
656
|
-
}, {
|
|
657
|
-
baz: "good" | "bad" | "indifferent";
|
|
658
|
-
quux: boolean;
|
|
659
|
-
}>, "many">;
|
|
660
|
-
}, "strip", import("zod").ZodTypeAny, {
|
|
661
|
-
foo: "b" | "a" | "c";
|
|
662
|
-
bar: {
|
|
663
|
-
baz: "good" | "bad" | "indifferent";
|
|
664
|
-
quux: boolean;
|
|
665
|
-
}[];
|
|
666
|
-
}, {
|
|
667
|
-
foo: "b" | "a" | "c";
|
|
668
|
-
bar: {
|
|
669
|
-
baz: "good" | "bad" | "indifferent";
|
|
670
|
-
quux: boolean;
|
|
671
|
-
}[];
|
|
672
|
-
}>;
|
|
659
|
+
}, import("zod/v4/core").$strip>>;
|
|
660
|
+
}, import("zod/v4/core").$strip>;
|
|
673
661
|
};
|
|
674
662
|
readonly createdAt: {
|
|
675
663
|
readonly type: "timestamp";
|
|
@@ -1085,10 +1073,14 @@ export declare const createTestDB: (overrides?: Partial<Omit<Config, "models">>)
|
|
|
1085
1073
|
};
|
|
1086
1074
|
readonly email: {
|
|
1087
1075
|
readonly type: "text";
|
|
1076
|
+
readonly zodSchema: import("zod").ZodEmail;
|
|
1088
1077
|
};
|
|
1089
1078
|
readonly role: {
|
|
1090
1079
|
readonly type: "text";
|
|
1091
|
-
readonly zodSchema: import("zod").ZodEnum<
|
|
1080
|
+
readonly zodSchema: import("zod").ZodEnum<{
|
|
1081
|
+
user: "user";
|
|
1082
|
+
admin: "admin";
|
|
1083
|
+
}>;
|
|
1092
1084
|
};
|
|
1093
1085
|
readonly preferences: {
|
|
1094
1086
|
readonly type: "jsonb";
|
|
@@ -1167,30 +1159,20 @@ export declare const createTestDB: (overrides?: Partial<Omit<Config, "models">>)
|
|
|
1167
1159
|
readonly type: "jsonb";
|
|
1168
1160
|
readonly default: "{}";
|
|
1169
1161
|
readonly zodSchema: import("zod").ZodObject<{
|
|
1170
|
-
foo: import("zod").ZodEnum<
|
|
1162
|
+
foo: import("zod").ZodEnum<{
|
|
1163
|
+
a: "a";
|
|
1164
|
+
b: "b";
|
|
1165
|
+
c: "c";
|
|
1166
|
+
}>;
|
|
1171
1167
|
bar: import("zod").ZodArray<import("zod").ZodObject<{
|
|
1172
|
-
baz: import("zod").ZodEnum<
|
|
1168
|
+
baz: import("zod").ZodEnum<{
|
|
1169
|
+
good: "good";
|
|
1170
|
+
bad: "bad";
|
|
1171
|
+
indifferent: "indifferent";
|
|
1172
|
+
}>;
|
|
1173
1173
|
quux: import("zod").ZodBoolean;
|
|
1174
|
-
},
|
|
1175
|
-
|
|
1176
|
-
quux: boolean;
|
|
1177
|
-
}, {
|
|
1178
|
-
baz: "good" | "bad" | "indifferent";
|
|
1179
|
-
quux: boolean;
|
|
1180
|
-
}>, "many">;
|
|
1181
|
-
}, "strip", import("zod").ZodTypeAny, {
|
|
1182
|
-
foo: "b" | "a" | "c";
|
|
1183
|
-
bar: {
|
|
1184
|
-
baz: "good" | "bad" | "indifferent";
|
|
1185
|
-
quux: boolean;
|
|
1186
|
-
}[];
|
|
1187
|
-
}, {
|
|
1188
|
-
foo: "b" | "a" | "c";
|
|
1189
|
-
bar: {
|
|
1190
|
-
baz: "good" | "bad" | "indifferent";
|
|
1191
|
-
quux: boolean;
|
|
1192
|
-
}[];
|
|
1193
|
-
}>;
|
|
1174
|
+
}, import("zod/v4/core").$strip>>;
|
|
1175
|
+
}, import("zod/v4/core").$strip>;
|
|
1194
1176
|
};
|
|
1195
1177
|
readonly createdAt: {
|
|
1196
1178
|
readonly type: "timestamp";
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import { FieldType, ModelDefinitions, ModelName } from "@casekit/orm2-schema";
|
|
2
2
|
import { CreateOneParams } from "./CreateOneParams.js";
|
|
3
|
-
export type CreateOneResult<Models extends ModelDefinitions, M extends ModelName<Models>, Q extends CreateOneParams<Models, M>> = Q["returning"] extends NonNullable<Q["returning"]> ? {
|
|
3
|
+
export type CreateOneResult<Models extends ModelDefinitions, M extends ModelName<Models>, Q extends CreateOneParams<Models, M>> = Q["returning"] extends NonNullable<Q["returning"]> ? Q["onConflict"] extends {
|
|
4
|
+
do: "nothing";
|
|
5
|
+
} ? {
|
|
4
6
|
[C in Q["returning"][number]]: FieldType<Models[M], C>;
|
|
5
|
-
} | null :
|
|
7
|
+
} | null : {
|
|
8
|
+
[C in Q["returning"][number]]: FieldType<Models[M], C>;
|
|
9
|
+
} : number;
|
|
@@ -23,6 +23,7 @@ export type CreateManyMiddleware = (db: Orm, modelName: string, query: CreateMan
|
|
|
23
23
|
export type UpdateOneMiddleware = (db: Orm, modelName: string, query: UpdateParams<ModelDefinitions, OperatorDefinitions, string>) => Promise<Record<string, unknown> | number | null>;
|
|
24
24
|
export type UpdateManyMiddleware = (db: Orm, modelName: string, query: UpdateParams<ModelDefinitions, OperatorDefinitions, string>) => Promise<Record<string, unknown>[] | number | null>;
|
|
25
25
|
export type Middleware = {
|
|
26
|
+
name?: string;
|
|
26
27
|
where?: WhereMiddleware;
|
|
27
28
|
set?: SetMiddleware;
|
|
28
29
|
values?: ValuesMiddleware;
|
|
@@ -36,3 +37,16 @@ export type Middleware = {
|
|
|
36
37
|
deleteOne?: DeleteOneMiddleware;
|
|
37
38
|
deleteMany?: DeleteManyMiddleware;
|
|
38
39
|
};
|
|
40
|
+
type Organisation = {
|
|
41
|
+
id: string;
|
|
42
|
+
};
|
|
43
|
+
type User = {
|
|
44
|
+
id: string;
|
|
45
|
+
};
|
|
46
|
+
export declare const tenancy: ({ org }: {
|
|
47
|
+
org: Organisation;
|
|
48
|
+
}) => Middleware;
|
|
49
|
+
export declare const userstamps: ({ user }: {
|
|
50
|
+
user: User;
|
|
51
|
+
}) => Middleware;
|
|
52
|
+
export {};
|
|
@@ -1 +1,37 @@
|
|
|
1
|
-
|
|
1
|
+
import { getModel } from "@casekit/orm2-config";
|
|
2
|
+
export const tenancy = ({ org }) => ({
|
|
3
|
+
where: (config, modelName, where) => {
|
|
4
|
+
if ("organisationId" in getModel(config.models, modelName).fields) {
|
|
5
|
+
return { ...where, organisaitonId: org.id };
|
|
6
|
+
}
|
|
7
|
+
else {
|
|
8
|
+
return where;
|
|
9
|
+
}
|
|
10
|
+
},
|
|
11
|
+
values: (config, modelName, values) => {
|
|
12
|
+
if ("organisationId" in getModel(config.models, modelName).fields) {
|
|
13
|
+
return { ...values, organisationId: org.id };
|
|
14
|
+
}
|
|
15
|
+
else {
|
|
16
|
+
return values;
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
});
|
|
20
|
+
export const userstamps = ({ user }) => ({
|
|
21
|
+
values: (config, modelName, values) => {
|
|
22
|
+
if ("createdById" in getModel(config.models, modelName).fields) {
|
|
23
|
+
return { ...values, updatedById: values["createdById"] ?? user.id };
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
return values;
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
set: (config, modelName, set) => {
|
|
30
|
+
if ("updatedById" in getModel(config.models, modelName).fields) {
|
|
31
|
+
return { ...set, updatedById: set["updatedById"] ?? user.id };
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
return set;
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
});
|
|
@@ -2,22 +2,22 @@ import { DeepReadonly } from "ts-essentials";
|
|
|
2
2
|
import { FieldName, FieldType, ModelDefinition, ModelDefinitions, ModelName, OperatorDefinitions } from "@casekit/orm2-schema";
|
|
3
3
|
import { $and, $eq, $gt, $gte, $ilike, $in, $is, $like, $lt, $lte, $ne, $not, $or } from "#operators.js";
|
|
4
4
|
export interface DefaultOperators<T> {
|
|
5
|
-
[$eq]?: T
|
|
6
|
-
[$ne]?: T
|
|
5
|
+
[$eq]?: DeepReadonly<T>;
|
|
6
|
+
[$ne]?: DeepReadonly<T>;
|
|
7
7
|
[$not]?: null | true | false;
|
|
8
8
|
[$is]?: null | true | false;
|
|
9
|
-
[$gt]?: T
|
|
10
|
-
[$gte]?: T
|
|
11
|
-
[$lt]?: T
|
|
12
|
-
[$lte]?: T
|
|
13
|
-
[$in]?: T[]
|
|
9
|
+
[$gt]?: DeepReadonly<T>;
|
|
10
|
+
[$gte]?: DeepReadonly<T>;
|
|
11
|
+
[$lt]?: DeepReadonly<T>;
|
|
12
|
+
[$lte]?: DeepReadonly<T>;
|
|
13
|
+
[$in]?: DeepReadonly<T[]>;
|
|
14
14
|
[$like]?: string;
|
|
15
15
|
[$ilike]?: string;
|
|
16
16
|
}
|
|
17
17
|
export type ReadonlyArrays<T> = T extends (infer E)[] ? readonly E[] : T extends Date ? Date : T extends object ? {
|
|
18
18
|
readonly [K in keyof T]: ReadonlyArrays<T[K]>;
|
|
19
19
|
} : T;
|
|
20
|
-
export type WhereClauseValue<Model extends ModelDefinition, Operators extends OperatorDefinitions, C extends FieldName<Model>, T = DeepReadonly<FieldType<Model, C>>> = T | null | DefaultOperators<T> | (Operators["where"] extends never ? never : {
|
|
20
|
+
export type WhereClauseValue<Model extends ModelDefinition, Operators extends OperatorDefinitions, C extends FieldName<Model>, T = DeepReadonly<FieldType<Model, C>>> = DeepReadonly<T> | null | DefaultOperators<T> | (Operators["where"] extends never ? never : {
|
|
21
21
|
[K in Extract<keyof Operators["where"], symbol>]?: Parameters<NonNullable<Operators["where"]>[K]>[1];
|
|
22
22
|
});
|
|
23
23
|
export type WhereClause<Models extends ModelDefinitions, Operators extends OperatorDefinitions, M extends ModelName<Models>, _Model extends ModelDefinition = Models[M]> = {
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { NormalizedConfig } from "@casekit/orm2-config";
|
|
2
|
+
import { ModelDefinition } from "@casekit/orm2-schema";
|
|
3
|
+
import { Middleware } from "../types/Middleware.js";
|
|
4
|
+
import { UpdateValues } from "../types/UpdateValues.js";
|
|
5
|
+
export declare const applySetMiddleware: (config: NormalizedConfig, middleware: Middleware[], modelName: string, set: UpdateValues<ModelDefinition>) => UpdateValues<ModelDefinition>;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { NormalizedConfig } from "@casekit/orm2-config";
|
|
2
|
+
import { ModelDefinition } from "@casekit/orm2-schema";
|
|
3
|
+
import { CreateValues } from "../types/CreateValues.js";
|
|
4
|
+
import { Middleware } from "../types/Middleware.js";
|
|
5
|
+
export declare const applyValuesMiddleware: (config: NormalizedConfig, middleware: Middleware[], modelName: string, values: CreateValues<ModelDefinition>) => CreateValues<ModelDefinition>;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { NormalizedConfig } from "@casekit/orm2-config";
|
|
2
|
+
import { ModelDefinitions, OperatorDefinitions } from "@casekit/orm2-schema";
|
|
3
|
+
import { Middleware } from "../types/Middleware.js";
|
|
4
|
+
import { WhereClause } from "../types/WhereClause.js";
|
|
5
|
+
export declare const applyWhereMiddleware: (config: NormalizedConfig, middleware: Middleware[], modelName: string, where: WhereClause<ModelDefinitions, OperatorDefinitions, string> | undefined) => WhereClause<ModelDefinitions, OperatorDefinitions, string> | undefined;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { beforeEach, describe, expect, test, vi } from "vitest";
|
|
2
|
+
import { $eq } from "#operators.js";
|
|
3
|
+
import { createTestDB } from "../tests/util/db.js";
|
|
4
|
+
import { mockLogger } from "../tests/util/logger.js";
|
|
5
|
+
import { applyWhereMiddleware } from "./applyWhereMiddleware.js";
|
|
6
|
+
describe("applyWhereMiddleware", () => {
|
|
7
|
+
const logger = mockLogger();
|
|
8
|
+
let config;
|
|
9
|
+
beforeEach(() => {
|
|
10
|
+
logger.clear();
|
|
11
|
+
const { db } = createTestDB();
|
|
12
|
+
config = db.config;
|
|
13
|
+
});
|
|
14
|
+
test("returns original where clause when no middleware exists", () => {
|
|
15
|
+
const middleware = [];
|
|
16
|
+
const modelName = "user";
|
|
17
|
+
const whereClause = { id: 1 };
|
|
18
|
+
const result = applyWhereMiddleware(config, middleware, modelName, whereClause);
|
|
19
|
+
expect(result).toBe(whereClause);
|
|
20
|
+
});
|
|
21
|
+
test("returns original where clause when middleware has no where function", () => {
|
|
22
|
+
const middleware = [{}];
|
|
23
|
+
const modelName = "user";
|
|
24
|
+
const whereClause = { id: 1 };
|
|
25
|
+
const result = applyWhereMiddleware(config, middleware, modelName, whereClause);
|
|
26
|
+
expect(result).toBe(whereClause);
|
|
27
|
+
});
|
|
28
|
+
test("applies a single middleware to the where clause", () => {
|
|
29
|
+
const modelName = "user";
|
|
30
|
+
const modifiedWhere = { id: 2 };
|
|
31
|
+
const whereMiddlewareFn = vi.fn().mockReturnValue(modifiedWhere);
|
|
32
|
+
const middleware = [
|
|
33
|
+
{
|
|
34
|
+
where: whereMiddlewareFn,
|
|
35
|
+
},
|
|
36
|
+
];
|
|
37
|
+
const originalWhere = { id: 1 };
|
|
38
|
+
const result = applyWhereMiddleware(config, middleware, modelName, originalWhere);
|
|
39
|
+
expect(whereMiddlewareFn).toHaveBeenCalledWith(config, modelName, originalWhere);
|
|
40
|
+
expect(result).toBe(modifiedWhere);
|
|
41
|
+
});
|
|
42
|
+
test("applies multiple middleware to the where clause in order", () => {
|
|
43
|
+
const modelName = "user";
|
|
44
|
+
const middleware1Result = { id: 2 };
|
|
45
|
+
const middleware2Result = { id: 3 };
|
|
46
|
+
const whereMiddlewareFn1 = vi.fn().mockReturnValue(middleware1Result);
|
|
47
|
+
const whereMiddlewareFn2 = vi.fn().mockReturnValue(middleware2Result);
|
|
48
|
+
const middleware = [
|
|
49
|
+
{
|
|
50
|
+
where: whereMiddlewareFn1,
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
where: whereMiddlewareFn2,
|
|
54
|
+
},
|
|
55
|
+
];
|
|
56
|
+
const originalWhere = { id: 1 };
|
|
57
|
+
const result = applyWhereMiddleware(config, middleware, modelName, originalWhere);
|
|
58
|
+
expect(whereMiddlewareFn1).toHaveBeenCalledWith(config, modelName, originalWhere);
|
|
59
|
+
expect(whereMiddlewareFn2).toHaveBeenCalledWith(config, modelName, middleware1Result);
|
|
60
|
+
expect(result).toBe(middleware2Result);
|
|
61
|
+
});
|
|
62
|
+
test("applies complex where clause with operators", () => {
|
|
63
|
+
const modelName = "user";
|
|
64
|
+
const originalWhere = {
|
|
65
|
+
name: { [$eq]: "John" },
|
|
66
|
+
};
|
|
67
|
+
const modifiedWhere = {
|
|
68
|
+
name: { [$eq]: "John" },
|
|
69
|
+
active: true,
|
|
70
|
+
};
|
|
71
|
+
const whereMiddlewareFn = vi
|
|
72
|
+
.fn()
|
|
73
|
+
.mockImplementation((config, model, where) => {
|
|
74
|
+
return {
|
|
75
|
+
...where,
|
|
76
|
+
active: true,
|
|
77
|
+
};
|
|
78
|
+
});
|
|
79
|
+
const middleware = [
|
|
80
|
+
{
|
|
81
|
+
where: whereMiddlewareFn,
|
|
82
|
+
},
|
|
83
|
+
];
|
|
84
|
+
const result = applyWhereMiddleware(config, middleware, modelName, originalWhere);
|
|
85
|
+
expect(whereMiddlewareFn).toHaveBeenCalledWith(config, modelName, originalWhere);
|
|
86
|
+
expect(result).toEqual(modifiedWhere);
|
|
87
|
+
});
|
|
88
|
+
});
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ZodType } from "zod";
|
|
2
2
|
import { NormalizedConfig, NormalizedModelDefinition } from "@casekit/orm2-config";
|
|
3
3
|
import { ModelDefinition, OperatorDefinitions } from "@casekit/orm2-schema";
|
|
4
4
|
import { FindParams } from "../types/FindParams.js";
|
|
5
5
|
import { ReturningClause } from "../types/ReturningClause.js";
|
|
6
|
-
export declare const resultFields: (model: NormalizedModelDefinition, fields: string[]) => Record<string,
|
|
7
|
-
export declare const findOneResultSchema: (config: NormalizedConfig, m: string, query: FindParams<Record<string, Required<ModelDefinition>>, OperatorDefinitions, string>) =>
|
|
8
|
-
export declare const findManyResultSchema: (config: NormalizedConfig, m: string, query: FindParams<Record<string, Required<ModelDefinition>>, OperatorDefinitions, string>) =>
|
|
9
|
-
export declare const returningOneResultSchema: (model: NormalizedModelDefinition, fields?: string[]) =>
|
|
10
|
-
export declare const returningManyResultSchema: (model: NormalizedModelDefinition, returning?: ReturningClause<ModelDefinition>) =>
|
|
6
|
+
export declare const resultFields: (model: NormalizedModelDefinition, fields: string[]) => Record<string, ZodType>;
|
|
7
|
+
export declare const findOneResultSchema: (config: NormalizedConfig, m: string, query: FindParams<Record<string, Required<ModelDefinition>>, OperatorDefinitions, string>) => ZodType;
|
|
8
|
+
export declare const findManyResultSchema: (config: NormalizedConfig, m: string, query: FindParams<Record<string, Required<ModelDefinition>>, OperatorDefinitions, string>) => ZodType;
|
|
9
|
+
export declare const returningOneResultSchema: (model: NormalizedModelDefinition, fields?: string[]) => ZodType;
|
|
10
|
+
export declare const returningManyResultSchema: (model: NormalizedModelDefinition, returning?: ReturningClause<ModelDefinition>) => ZodType;
|
package/package.json
CHANGED
|
@@ -1,40 +1,40 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@casekit/orm2",
|
|
3
3
|
"description": "",
|
|
4
|
-
"version": "
|
|
4
|
+
"version": "1.0.0",
|
|
5
5
|
"author": "",
|
|
6
6
|
"dependencies": {
|
|
7
|
-
"es-toolkit": "^1.
|
|
7
|
+
"es-toolkit": "^1.39.3",
|
|
8
8
|
"object-hash": "^3.0.0",
|
|
9
|
-
"pino": "^9.
|
|
9
|
+
"pino": "^9.7.0",
|
|
10
10
|
"uuid": "^11.1.0",
|
|
11
|
-
"@casekit/orm2-
|
|
12
|
-
"@casekit/
|
|
13
|
-
"@casekit/
|
|
14
|
-
"@casekit/
|
|
11
|
+
"@casekit/orm2-config": "1.0.0",
|
|
12
|
+
"@casekit/toolbox": "1.0.0",
|
|
13
|
+
"@casekit/orm2-schema": "1.0.0",
|
|
14
|
+
"@casekit/sql": "1.0.0"
|
|
15
15
|
},
|
|
16
16
|
"devDependencies": {
|
|
17
17
|
"@casekit/unindent": "^1.0.5",
|
|
18
|
-
"@eslint/js": "^9.
|
|
19
|
-
"@faker-js/faker": "^9.
|
|
18
|
+
"@eslint/js": "^9.29.0",
|
|
19
|
+
"@faker-js/faker": "^9.8.0",
|
|
20
20
|
"@trivago/prettier-plugin-sort-imports": "^5.2.2",
|
|
21
|
-
"@types/node": "^
|
|
21
|
+
"@types/node": "^24.0.3",
|
|
22
22
|
"@types/object-hash": "^3.0.6",
|
|
23
|
-
"@types/pg": "^8.
|
|
23
|
+
"@types/pg": "^8.15.4",
|
|
24
24
|
"@types/uuid": "^10.0.0",
|
|
25
|
-
"@vitest/coverage-v8": "^3.
|
|
26
|
-
"dotenv": "^16.
|
|
25
|
+
"@vitest/coverage-v8": "^3.2.4",
|
|
26
|
+
"dotenv": "^16.5.0",
|
|
27
27
|
"prettier": "^3.5.3",
|
|
28
|
-
"prettier-plugin-svelte": "^3.
|
|
29
|
-
"ts-essentials": "^10.
|
|
30
|
-
"typescript": "^5.8.
|
|
31
|
-
"typescript-eslint": "^8.
|
|
28
|
+
"prettier-plugin-svelte": "^3.4.0",
|
|
29
|
+
"ts-essentials": "^10.1.1",
|
|
30
|
+
"typescript": "^5.8.3",
|
|
31
|
+
"typescript-eslint": "^8.34.1",
|
|
32
32
|
"vite-tsconfig-paths": "^5.1.4",
|
|
33
|
-
"vitest": "^3.
|
|
34
|
-
"@casekit/orm2-fixtures": "
|
|
35
|
-
"@casekit/
|
|
36
|
-
"@casekit/
|
|
37
|
-
"@casekit/
|
|
33
|
+
"vitest": "^3.2.4",
|
|
34
|
+
"@casekit/orm2-fixtures": "1.0.0",
|
|
35
|
+
"@casekit/prettier-config": "1.0.0",
|
|
36
|
+
"@casekit/orm2-testing": "1.0.0",
|
|
37
|
+
"@casekit/tsconfig": "1.0.0"
|
|
38
38
|
},
|
|
39
39
|
"exports": {
|
|
40
40
|
".": "./build/index.js"
|
|
@@ -47,10 +47,9 @@
|
|
|
47
47
|
},
|
|
48
48
|
"keywords": [],
|
|
49
49
|
"license": "ISC",
|
|
50
|
-
"main": "index.js",
|
|
51
50
|
"peerDependencies": {
|
|
52
51
|
"pg": "^8.13.1",
|
|
53
|
-
"zod": "^
|
|
52
|
+
"zod": "^4.0.17"
|
|
54
53
|
},
|
|
55
54
|
"prettier": "@casekit/prettier-config",
|
|
56
55
|
"type": "module",
|
/package/build/tests/{orm.count.middleware.test.d.ts → orm.findOne.includeManyToMany.test.d.ts}
RENAMED
|
File without changes
|
/package/build/tests/{orm.createMany.middleware.test.d.ts → orm.findOne.includeManyToOne.test.d.ts}
RENAMED
|
File without changes
|
/package/build/tests/{orm.createOne.middleware.test.d.ts → orm.findOne.includeOneToMany.test.d.ts}
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/build/tests/{orm.findOne.middleware.test.d.ts → orm.middleware.createMany.test.d.ts}
RENAMED
|
File without changes
|
/package/build/tests/{orm.createMany.middleware.test.js → orm.middleware.createMany.test.js}
RENAMED
|
File without changes
|
/package/build/tests/{orm.updateMany.middleware.test.d.ts → orm.middleware.createOne.test.d.ts}
RENAMED
|
File without changes
|
|
File without changes
|
/package/build/tests/{orm.updateOne.middleware.test.d.ts → orm.middleware.deleteMany.test.d.ts}
RENAMED
|
File without changes
|
/package/build/tests/{orm.deleteMany.middleware.test.js → orm.middleware.deleteMany.test.js}
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/build/tests/{orm.updateMany.middleware.test.js → orm.middleware.updateMany.test.js}
RENAMED
|
File without changes
|
|
File without changes
|