@casekit/orm2-schema 1.0.0 → 1.0.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/{src/Config.ts → build/Config.d.ts} +1 -7
- package/build/Config.js +1 -0
- package/build/Logger.js +1 -0
- package/{src/definition/FieldDefinition.ts → build/definition/FieldDefinition.d.ts} +5 -18
- package/build/definition/FieldDefinition.js +1 -0
- package/build/definition/ForeignKeyDefinition.js +1 -0
- package/{src/definition/ModelDefinition.ts → build/definition/ModelDefinition.d.ts} +0 -7
- package/build/definition/ModelDefinition.js +1 -0
- package/{src/definition/ModelDefinitions.ts → build/definition/ModelDefinitions.d.ts} +0 -1
- package/build/definition/ModelDefinitions.js +1 -0
- package/{src/definition/OperatorDefinitions.ts → build/definition/OperatorDefinitions.d.ts} +0 -1
- package/build/definition/OperatorDefinitions.js +1 -0
- package/{src/definition/PostgresDataTypes.ts → build/definition/PostgresDataTypes.d.ts} +0 -3
- package/build/definition/PostgresDataTypes.js +1 -0
- package/{src/definition/RelationDefinition.ts → build/definition/RelationDefinition.d.ts} +1 -7
- package/build/definition/RelationDefinition.js +1 -0
- package/{src/definition/RelationDefinitions.ts → build/definition/RelationDefinitions.d.ts} +0 -1
- package/build/definition/RelationDefinitions.js +1 -0
- package/{src/definition/UniqueConstraintDefinition.ts → build/definition/UniqueConstraintDefinition.d.ts} +0 -1
- package/build/definition/UniqueConstraintDefinition.js +1 -0
- package/build/definition/WhereOperator.d.ts +5 -0
- package/build/definition/WhereOperator.js +1 -0
- package/build/helper/DefaultFieldType.d.ts +7 -0
- package/build/helper/DefaultFieldType.js +1 -0
- package/build/helper/DefaultFieldType.test-d.d.ts +1 -0
- package/build/helper/DefaultFieldType.test-d.js +57 -0
- package/{src/helper/FieldName.ts → build/helper/FieldName.d.ts} +0 -1
- package/build/helper/FieldName.js +1 -0
- package/build/helper/FieldName.test-d.d.ts +1 -0
- package/{src/helper/FieldName.test-d.ts → build/helper/FieldName.test-d.js} +2 -9
- package/build/helper/FieldType.d.ts +5 -0
- package/build/helper/FieldType.js +1 -0
- package/build/helper/FieldType.test-d.d.ts +1 -0
- package/build/helper/FieldType.test-d.js +59 -0
- package/{src/helper/FieldWithDefault.ts → build/helper/FieldWithDefault.d.ts} +1 -6
- package/build/helper/FieldWithDefault.js +1 -0
- package/build/helper/FieldWithDefault.test-d.d.ts +1 -0
- package/{src/helper/FieldWithDefault.test-d.ts → build/helper/FieldWithDefault.test-d.js} +6 -17
- package/{src/helper/ModelName.ts → build/helper/ModelName.d.ts} +1 -5
- package/build/helper/ModelName.js +1 -0
- package/build/helper/ModelName.test-d.d.ts +1 -0
- package/{src/helper/ModelName.test-d.ts → build/helper/ModelName.test-d.js} +2 -9
- package/{src/helper/ModelType.ts → build/helper/ModelType.d.ts} +0 -2
- package/build/helper/ModelType.js +1 -0
- package/build/helper/ModelType.test-d.d.ts +1 -0
- package/{src/helper/ModelType.test-d.ts → build/helper/ModelType.test-d.js} +2 -17
- package/{src/helper/NullableField.ts → build/helper/NullableField.d.ts} +1 -4
- package/build/helper/NullableField.js +1 -0
- package/build/helper/NullableField.test-d.d.ts +1 -0
- package/{src/helper/NullableField.test-d.ts → build/helper/NullableField.test-d.js} +6 -17
- package/{src/helper/OptionalField.ts → build/helper/OptionalField.d.ts} +1 -5
- package/build/helper/OptionalField.js +1 -0
- package/build/helper/OptionalField.test-d.d.ts +1 -0
- package/{src/helper/OptionalField.test-d.ts → build/helper/OptionalField.test-d.js} +6 -21
- package/{src/helper/ProvidedField.ts → build/helper/ProvidedField.d.ts} +1 -4
- package/build/helper/ProvidedField.js +1 -0
- package/build/helper/ProvidedField.test-d.d.ts +1 -0
- package/{src/helper/ProvidedField.test-d.ts → build/helper/ProvidedField.test-d.js} +6 -17
- package/build/helper/RelationModel.d.ts +4 -0
- package/build/helper/RelationModel.js +1 -0
- package/build/helper/RelationModel.test-d.d.ts +1 -0
- package/{src/helper/RelationModel.test-d.ts → build/helper/RelationModel.test-d.js} +6 -27
- package/build/helper/RelationName.d.ts +2 -0
- package/build/helper/RelationName.js +1 -0
- package/build/helper/RelationName.test-d.d.ts +1 -0
- package/{src/helper/RelationName.test-d.ts → build/helper/RelationName.test-d.js} +4 -14
- package/{src/helper/RequiredField.ts → build/helper/RequiredField.d.ts} +1 -8
- package/build/helper/RequiredField.js +1 -0
- package/build/helper/RequiredField.test-d.d.ts +1 -0
- package/{src/helper/RequiredField.test-d.ts → build/helper/RequiredField.test-d.js} +6 -19
- package/{src/helper/SerialField.ts → build/helper/SerialField.d.ts} +1 -7
- package/build/helper/SerialField.js +1 -0
- package/build/helper/SerialField.test-d.d.ts +1 -0
- package/{src/helper/SerialField.test-d.ts → build/helper/SerialField.test-d.js} +8 -23
- package/{src/index.ts → build/index.d.ts} +1 -8
- package/build/index.js +1 -0
- package/package.json +8 -8
- package/src/definition/WhereOperator.ts +0 -6
- package/src/helper/DefaultFieldType.test-d.ts +0 -60
- package/src/helper/DefaultFieldType.ts +0 -99
- package/src/helper/FieldType.test-d.ts +0 -81
- package/src/helper/FieldType.ts +0 -16
- package/src/helper/RelationModel.ts +0 -9
- package/src/helper/RelationName.ts +0 -4
- /package/{src/Logger.ts → build/Logger.d.ts} +0 -0
- /package/{src/definition/ForeignKeyDefinition.ts → build/definition/ForeignKeyDefinition.d.ts} +0 -0
|
@@ -1,8 +1,4 @@
|
|
|
1
1
|
import { describe, expectTypeOf, test } from "vitest";
|
|
2
|
-
|
|
3
|
-
import type { ModelDefinition } from "../definition/ModelDefinition.js";
|
|
4
|
-
import type { NullableField } from "./NullableField.js";
|
|
5
|
-
|
|
6
2
|
describe("NullableField", () => {
|
|
7
3
|
test("extracts just the nullable fields from the model", () => {
|
|
8
4
|
const user = {
|
|
@@ -12,13 +8,9 @@ describe("NullableField", () => {
|
|
|
12
8
|
email: { type: "text", nullable: true },
|
|
13
9
|
age: { type: "integer", nullable: false },
|
|
14
10
|
},
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
expectTypeOf<NullableField<typeof user>>().toEqualTypeOf<
|
|
18
|
-
"name" | "email"
|
|
19
|
-
>();
|
|
11
|
+
};
|
|
12
|
+
expectTypeOf().toEqualTypeOf();
|
|
20
13
|
});
|
|
21
|
-
|
|
22
14
|
test("returns never if there are no nullable fields", () => {
|
|
23
15
|
const user = {
|
|
24
16
|
fields: {
|
|
@@ -26,11 +18,9 @@ describe("NullableField", () => {
|
|
|
26
18
|
name: { type: "text", nullable: false },
|
|
27
19
|
age: { type: "integer", nullable: false },
|
|
28
20
|
},
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
expectTypeOf<NullableField<typeof user>>().toEqualTypeOf<never>();
|
|
21
|
+
};
|
|
22
|
+
expectTypeOf().toEqualTypeOf();
|
|
32
23
|
});
|
|
33
|
-
|
|
34
24
|
test("treats fields without nullable property as non-nullable", () => {
|
|
35
25
|
const user = {
|
|
36
26
|
fields: {
|
|
@@ -38,8 +28,7 @@ describe("NullableField", () => {
|
|
|
38
28
|
name: { type: "text", nullable: true },
|
|
39
29
|
age: { type: "integer" },
|
|
40
30
|
},
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
expectTypeOf<NullableField<typeof user>>().toEqualTypeOf<"name">();
|
|
31
|
+
};
|
|
32
|
+
expectTypeOf().toEqualTypeOf();
|
|
44
33
|
});
|
|
45
34
|
});
|
|
@@ -1,8 +1,4 @@
|
|
|
1
1
|
import { ModelDefinition } from "#definition/ModelDefinition.js";
|
|
2
2
|
import { FieldName } from "./FieldName.js";
|
|
3
3
|
import { RequiredField } from "./RequiredField.js";
|
|
4
|
-
|
|
5
|
-
export type OptionalField<Model extends ModelDefinition> = Exclude<
|
|
6
|
-
FieldName<Model>,
|
|
7
|
-
RequiredField<Model>
|
|
8
|
-
>;
|
|
4
|
+
export type OptionalField<Model extends ModelDefinition> = Exclude<FieldName<Model>, RequiredField<Model>>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,8 +1,4 @@
|
|
|
1
1
|
import { describe, expectTypeOf, test } from "vitest";
|
|
2
|
-
|
|
3
|
-
import type { ModelDefinition } from "../definition/ModelDefinition.js";
|
|
4
|
-
import type { OptionalField } from "./OptionalField.js";
|
|
5
|
-
|
|
6
2
|
describe("OptionalField", () => {
|
|
7
3
|
test("extracts fields that are optional for insert", () => {
|
|
8
4
|
const user = {
|
|
@@ -13,13 +9,9 @@ describe("OptionalField", () => {
|
|
|
13
9
|
age: { type: "integer", nullable: false, default: 18 },
|
|
14
10
|
role: { type: "text", nullable: false, provided: true },
|
|
15
11
|
},
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
expectTypeOf<OptionalField<typeof user>>().toEqualTypeOf<
|
|
19
|
-
"id" | "age" | "role"
|
|
20
|
-
>();
|
|
12
|
+
};
|
|
13
|
+
expectTypeOf().toEqualTypeOf();
|
|
21
14
|
});
|
|
22
|
-
|
|
23
15
|
test("returns all fields if none are required", () => {
|
|
24
16
|
const user = {
|
|
25
17
|
fields: {
|
|
@@ -28,13 +20,9 @@ describe("OptionalField", () => {
|
|
|
28
20
|
age: { type: "integer", default: 18 },
|
|
29
21
|
role: { type: "text", provided: true },
|
|
30
22
|
},
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
expectTypeOf<OptionalField<typeof user>>().toEqualTypeOf<
|
|
34
|
-
"id" | "name" | "age" | "role"
|
|
35
|
-
>();
|
|
23
|
+
};
|
|
24
|
+
expectTypeOf().toEqualTypeOf();
|
|
36
25
|
});
|
|
37
|
-
|
|
38
26
|
test("includes fields with defaults, serial fields, nullable fields and provided fields", () => {
|
|
39
27
|
const user = {
|
|
40
28
|
fields: {
|
|
@@ -45,10 +33,7 @@ describe("OptionalField", () => {
|
|
|
45
33
|
role: { type: "text", provided: true },
|
|
46
34
|
score: { type: "integer", nullable: false },
|
|
47
35
|
},
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
expectTypeOf<OptionalField<typeof user>>().toEqualTypeOf<
|
|
51
|
-
"id" | "email" | "age" | "role"
|
|
52
|
-
>();
|
|
36
|
+
};
|
|
37
|
+
expectTypeOf().toEqualTypeOf();
|
|
53
38
|
});
|
|
54
39
|
});
|
|
@@ -1,7 +1,4 @@
|
|
|
1
1
|
import { ModelDefinition } from "../definition/ModelDefinition.js";
|
|
2
|
-
|
|
3
2
|
export type ProvidedField<Model extends ModelDefinition> = {
|
|
4
|
-
[K in keyof Model["fields"]]: Model["fields"][K]["provided"] extends true
|
|
5
|
-
? K
|
|
6
|
-
: never;
|
|
3
|
+
[K in keyof Model["fields"]]: Model["fields"][K]["provided"] extends true ? K : never;
|
|
7
4
|
}[keyof Model["fields"]];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,8 +1,4 @@
|
|
|
1
1
|
import { describe, expectTypeOf, test } from "vitest";
|
|
2
|
-
|
|
3
|
-
import type { ModelDefinition } from "../definition/ModelDefinition.js";
|
|
4
|
-
import type { ProvidedField } from "./ProvidedField.js";
|
|
5
|
-
|
|
6
2
|
describe("ProvidedField", () => {
|
|
7
3
|
test("extracts just the provided fields from the model", () => {
|
|
8
4
|
const user = {
|
|
@@ -12,13 +8,9 @@ describe("ProvidedField", () => {
|
|
|
12
8
|
updatedAt: { type: "timestamp", provided: true },
|
|
13
9
|
name: { type: "text", provided: false },
|
|
14
10
|
},
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
expectTypeOf<ProvidedField<typeof user>>().toEqualTypeOf<
|
|
18
|
-
"createdAt" | "updatedAt"
|
|
19
|
-
>();
|
|
11
|
+
};
|
|
12
|
+
expectTypeOf().toEqualTypeOf();
|
|
20
13
|
});
|
|
21
|
-
|
|
22
14
|
test("returns never if there are no provided fields", () => {
|
|
23
15
|
const user = {
|
|
24
16
|
fields: {
|
|
@@ -26,11 +18,9 @@ describe("ProvidedField", () => {
|
|
|
26
18
|
name: { type: "text", provided: false },
|
|
27
19
|
age: { type: "integer", provided: false },
|
|
28
20
|
},
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
expectTypeOf<ProvidedField<typeof user>>().toEqualTypeOf<never>();
|
|
21
|
+
};
|
|
22
|
+
expectTypeOf().toEqualTypeOf();
|
|
32
23
|
});
|
|
33
|
-
|
|
34
24
|
test("treats fields without provided property as non-provided", () => {
|
|
35
25
|
const user = {
|
|
36
26
|
fields: {
|
|
@@ -38,8 +28,7 @@ describe("ProvidedField", () => {
|
|
|
38
28
|
createdAt: { type: "timestamp", provided: true },
|
|
39
29
|
name: { type: "text" },
|
|
40
30
|
},
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
expectTypeOf<ProvidedField<typeof user>>().toEqualTypeOf<"createdAt">();
|
|
31
|
+
};
|
|
32
|
+
expectTypeOf().toEqualTypeOf();
|
|
44
33
|
});
|
|
45
34
|
});
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { ModelDefinitions } from "#definition/ModelDefinitions.js";
|
|
2
|
+
import { ModelName } from "./ModelName.js";
|
|
3
|
+
import { RelationName } from "./RelationName.js";
|
|
4
|
+
export type RelationModel<Models extends ModelDefinitions, M extends ModelName<Models>, R extends RelationName<Models[M]>> = Models[NonNullable<Models[M]["relations"]>[R]["model"]];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,8 +1,4 @@
|
|
|
1
1
|
import { describe, expectTypeOf, test } from "vitest";
|
|
2
|
-
|
|
3
|
-
import { ModelDefinitions } from "../definition/ModelDefinitions.js";
|
|
4
|
-
import { RelationModel } from "./RelationModel.js";
|
|
5
|
-
|
|
6
2
|
describe("RelationModel", () => {
|
|
7
3
|
const models = {
|
|
8
4
|
user: {
|
|
@@ -43,39 +39,22 @@ describe("RelationModel", () => {
|
|
|
43
39
|
},
|
|
44
40
|
},
|
|
45
41
|
like: { fields: {} },
|
|
46
|
-
}
|
|
47
|
-
|
|
42
|
+
};
|
|
48
43
|
test("looks up the correct relation model in the schema for N:1 relations", () => {
|
|
49
|
-
expectTypeOf
|
|
50
|
-
typeof models.user
|
|
51
|
-
>();
|
|
44
|
+
expectTypeOf().toExtend();
|
|
52
45
|
});
|
|
53
|
-
|
|
54
46
|
test("looks up the correct relation model in the schema for 1:N relations", () => {
|
|
55
|
-
expectTypeOf
|
|
56
|
-
typeof models.like
|
|
57
|
-
>();
|
|
47
|
+
expectTypeOf().toExtend();
|
|
58
48
|
});
|
|
59
|
-
|
|
60
49
|
test("looks up the correct relation model in the schema for N:N relations", () => {
|
|
61
|
-
expectTypeOf
|
|
62
|
-
RelationModel<typeof models, "user", "likedPosts">
|
|
63
|
-
>().toExtend<typeof models.post>();
|
|
50
|
+
expectTypeOf().toExtend();
|
|
64
51
|
});
|
|
65
|
-
|
|
66
52
|
describe("errors", () => {
|
|
67
53
|
test("looking up a non-existing relation causes an error", () => {
|
|
68
|
-
expectTypeOf
|
|
69
|
-
// @ts-expect-error relation does not exist
|
|
70
|
-
RelationModel<typeof models, "post", "posts">
|
|
71
|
-
>().not.toExtend<typeof models.post>();
|
|
54
|
+
expectTypeOf().not.toExtend();
|
|
72
55
|
});
|
|
73
|
-
|
|
74
56
|
test("looking up a relation for a model that doesn't exist causes an error", () => {
|
|
75
|
-
expectTypeOf
|
|
76
|
-
// @ts-expect-error model does not exist
|
|
77
|
-
RelationModel<typeof models, "postx", "posts">
|
|
78
|
-
>().not.toExtend<typeof models.post>();
|
|
57
|
+
expectTypeOf().not.toExtend();
|
|
79
58
|
});
|
|
80
59
|
});
|
|
81
60
|
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,8 +1,4 @@
|
|
|
1
1
|
import { describe, expectTypeOf, test } from "vitest";
|
|
2
|
-
|
|
3
|
-
import { ModelDefinition } from "../definition/ModelDefinition.js";
|
|
4
|
-
import { RelationName } from "./RelationName.js";
|
|
5
|
-
|
|
6
2
|
describe("RelationName", () => {
|
|
7
3
|
test("it evaluates to a string union of the names of the model's relations", () => {
|
|
8
4
|
const user = {
|
|
@@ -24,12 +20,8 @@ describe("RelationName", () => {
|
|
|
24
20
|
},
|
|
25
21
|
},
|
|
26
22
|
},
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
expectTypeOf<RelationName<typeof user>>().toEqualTypeOf<
|
|
30
|
-
"posts" | "friends"
|
|
31
|
-
>();
|
|
32
|
-
|
|
23
|
+
};
|
|
24
|
+
expectTypeOf().toEqualTypeOf();
|
|
33
25
|
const post = {
|
|
34
26
|
fields: { id: { type: "serial" } },
|
|
35
27
|
relations: {
|
|
@@ -46,9 +38,7 @@ describe("RelationName", () => {
|
|
|
46
38
|
toField: "postId",
|
|
47
39
|
},
|
|
48
40
|
},
|
|
49
|
-
}
|
|
50
|
-
expectTypeOf
|
|
51
|
-
"author" | "likes"
|
|
52
|
-
>();
|
|
41
|
+
};
|
|
42
|
+
expectTypeOf().toEqualTypeOf();
|
|
53
43
|
});
|
|
54
44
|
});
|
|
@@ -4,11 +4,4 @@ import { FieldWithDefault } from "./FieldWithDefault.js";
|
|
|
4
4
|
import { NullableField } from "./NullableField.js";
|
|
5
5
|
import { ProvidedField } from "./ProvidedField.js";
|
|
6
6
|
import { SerialField } from "./SerialField.js";
|
|
7
|
-
|
|
8
|
-
export type RequiredField<Model extends ModelDefinition> = Exclude<
|
|
9
|
-
FieldName<Model>,
|
|
10
|
-
| NullableField<Model>
|
|
11
|
-
| FieldWithDefault<Model>
|
|
12
|
-
| SerialField<Model>
|
|
13
|
-
| ProvidedField<Model>
|
|
14
|
-
>;
|
|
7
|
+
export type RequiredField<Model extends ModelDefinition> = Exclude<FieldName<Model>, NullableField<Model> | FieldWithDefault<Model> | SerialField<Model> | ProvidedField<Model>>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,8 +1,4 @@
|
|
|
1
1
|
import { describe, expectTypeOf, test } from "vitest";
|
|
2
|
-
|
|
3
|
-
import type { ModelDefinition } from "../definition/ModelDefinition.js";
|
|
4
|
-
import type { RequiredField } from "./RequiredField.js";
|
|
5
|
-
|
|
6
2
|
describe("RequiredField", () => {
|
|
7
3
|
test("extracts fields that are required for insert", () => {
|
|
8
4
|
const user = {
|
|
@@ -13,13 +9,9 @@ describe("RequiredField", () => {
|
|
|
13
9
|
age: { type: "integer", nullable: false, default: 18 },
|
|
14
10
|
role: { type: "text", nullable: false, provided: true },
|
|
15
11
|
},
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
expectTypeOf<RequiredField<typeof user>>().toEqualTypeOf<
|
|
19
|
-
"name" | "email"
|
|
20
|
-
>();
|
|
12
|
+
};
|
|
13
|
+
expectTypeOf().toEqualTypeOf();
|
|
21
14
|
});
|
|
22
|
-
|
|
23
15
|
test("returns never if all fields are optional", () => {
|
|
24
16
|
const user = {
|
|
25
17
|
fields: {
|
|
@@ -28,11 +20,9 @@ describe("RequiredField", () => {
|
|
|
28
20
|
age: { type: "integer", default: 18 },
|
|
29
21
|
role: { type: "text", provided: true },
|
|
30
22
|
},
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
expectTypeOf<RequiredField<typeof user>>().toEqualTypeOf<never>();
|
|
23
|
+
};
|
|
24
|
+
expectTypeOf().toEqualTypeOf();
|
|
34
25
|
});
|
|
35
|
-
|
|
36
26
|
test("excludes fields with defaults, serial fields, nullable fields and provided fields", () => {
|
|
37
27
|
const user = {
|
|
38
28
|
fields: {
|
|
@@ -43,10 +33,7 @@ describe("RequiredField", () => {
|
|
|
43
33
|
role: { type: "text", provided: true },
|
|
44
34
|
score: { type: "integer", nullable: false },
|
|
45
35
|
},
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
expectTypeOf<RequiredField<typeof user>>().toEqualTypeOf<
|
|
49
|
-
"name" | "score"
|
|
50
|
-
>();
|
|
36
|
+
};
|
|
37
|
+
expectTypeOf().toEqualTypeOf();
|
|
51
38
|
});
|
|
52
39
|
});
|
|
@@ -1,10 +1,4 @@
|
|
|
1
1
|
import { ModelDefinition } from "../definition/ModelDefinition.js";
|
|
2
|
-
|
|
3
2
|
export type SerialField<Model extends ModelDefinition> = {
|
|
4
|
-
[K in keyof Model["fields"]]: Uppercase<Model["fields"][K]["type"]> extends
|
|
5
|
-
| "SMALLSERIAL"
|
|
6
|
-
| "SERIAL"
|
|
7
|
-
| "BIGSERIAL"
|
|
8
|
-
? K
|
|
9
|
-
: never;
|
|
3
|
+
[K in keyof Model["fields"]]: Uppercase<Model["fields"][K]["type"]> extends "SMALLSERIAL" | "SERIAL" | "BIGSERIAL" ? K : never;
|
|
10
4
|
}[keyof Model["fields"]];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,8 +1,4 @@
|
|
|
1
1
|
import { describe, expectTypeOf, test } from "vitest";
|
|
2
|
-
|
|
3
|
-
import type { ModelDefinition } from "../definition/ModelDefinition.js";
|
|
4
|
-
import type { SerialField } from "./SerialField.js";
|
|
5
|
-
|
|
6
2
|
describe("SerialField", () => {
|
|
7
3
|
test("extracts just the fields with a SERIAL datatype from the model", () => {
|
|
8
4
|
const user = {
|
|
@@ -13,13 +9,9 @@ describe("SerialField", () => {
|
|
|
13
9
|
name: { type: "text" },
|
|
14
10
|
age: { type: "integer" },
|
|
15
11
|
},
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
expectTypeOf<SerialField<typeof user>>().toEqualTypeOf<
|
|
19
|
-
"id" | "smallId" | "bigId"
|
|
20
|
-
>();
|
|
12
|
+
};
|
|
13
|
+
expectTypeOf().toEqualTypeOf();
|
|
21
14
|
});
|
|
22
|
-
|
|
23
15
|
test("works for both lower and uppercase field types", () => {
|
|
24
16
|
const user = {
|
|
25
17
|
fields: {
|
|
@@ -29,24 +21,18 @@ describe("SerialField", () => {
|
|
|
29
21
|
name: { type: "TEXT" },
|
|
30
22
|
age: { type: "INTEGER" },
|
|
31
23
|
},
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
expectTypeOf<SerialField<typeof user>>().toEqualTypeOf<
|
|
35
|
-
"id" | "smallId" | "bigId"
|
|
36
|
-
>();
|
|
24
|
+
};
|
|
25
|
+
expectTypeOf().toEqualTypeOf();
|
|
37
26
|
});
|
|
38
|
-
|
|
39
27
|
test("returns never if there are no SERIAL fields", () => {
|
|
40
28
|
const user = {
|
|
41
29
|
fields: {
|
|
42
30
|
name: { type: "text" },
|
|
43
31
|
age: { type: "integer" },
|
|
44
32
|
},
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
expectTypeOf<SerialField<typeof user>>().toEqualTypeOf<never>();
|
|
33
|
+
};
|
|
34
|
+
expectTypeOf().toEqualTypeOf();
|
|
48
35
|
});
|
|
49
|
-
|
|
50
36
|
test("does not include fields with a type that end with serial but isn't a serial type", () => {
|
|
51
37
|
const user = {
|
|
52
38
|
fields: {
|
|
@@ -54,8 +40,7 @@ describe("SerialField", () => {
|
|
|
54
40
|
name: { type: "text" },
|
|
55
41
|
age: { type: "integer" },
|
|
56
42
|
},
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
expectTypeOf<SerialField<typeof user>>().toEqualTypeOf<"id">();
|
|
43
|
+
};
|
|
44
|
+
expectTypeOf().toEqualTypeOf();
|
|
60
45
|
});
|
|
61
46
|
});
|
|
@@ -4,16 +4,10 @@ export type { ModelDefinition } from "./definition/ModelDefinition.js";
|
|
|
4
4
|
export type { ModelDefinitions } from "./definition/ModelDefinitions.js";
|
|
5
5
|
export type { OperatorDefinitions } from "./definition/OperatorDefinitions.js";
|
|
6
6
|
export type { PostgresDataTypes } from "./definition/PostgresDataTypes.js";
|
|
7
|
-
export type {
|
|
8
|
-
ManyToManyRelationDefinition,
|
|
9
|
-
ManyToOneRelationDefinition,
|
|
10
|
-
OneToManyRelationDefinition,
|
|
11
|
-
RelationDefinition,
|
|
12
|
-
} from "./definition/RelationDefinition.js";
|
|
7
|
+
export type { ManyToManyRelationDefinition, ManyToOneRelationDefinition, OneToManyRelationDefinition, RelationDefinition, } from "./definition/RelationDefinition.js";
|
|
13
8
|
export type { RelationDefinitions } from "./definition/RelationDefinitions.js";
|
|
14
9
|
export type { UniqueConstraintDefinition } from "./definition/UniqueConstraintDefinition.js";
|
|
15
10
|
export type { WhereOperatorDefinition as OperatorDefinition } from "./definition/WhereOperator.js";
|
|
16
|
-
|
|
17
11
|
export type { DefaultFieldType } from "./helper/DefaultFieldType.js";
|
|
18
12
|
export type { FieldName } from "./helper/FieldName.js";
|
|
19
13
|
export type { FieldType } from "./helper/FieldType.js";
|
|
@@ -27,6 +21,5 @@ export type { RelationModel } from "./helper/RelationModel.js";
|
|
|
27
21
|
export type { RelationName } from "./helper/RelationName.js";
|
|
28
22
|
export type { RequiredField } from "./helper/RequiredField.js";
|
|
29
23
|
export type { SerialField } from "./helper/SerialField.js";
|
|
30
|
-
|
|
31
24
|
export type { Config } from "./Config.js";
|
|
32
25
|
export type { Logger } from "./Logger.js";
|
package/build/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/package.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@casekit/orm2-schema",
|
|
3
3
|
"description": "",
|
|
4
|
-
"version": "1.0.
|
|
4
|
+
"version": "1.0.1",
|
|
5
5
|
"author": "",
|
|
6
6
|
"dependencies": {
|
|
7
|
-
"@casekit/sql": "1.0.
|
|
8
|
-
"@casekit/toolbox": "1.0.
|
|
7
|
+
"@casekit/sql": "1.0.1",
|
|
8
|
+
"@casekit/toolbox": "1.0.1"
|
|
9
9
|
},
|
|
10
10
|
"devDependencies": {
|
|
11
11
|
"@trivago/prettier-plugin-sort-imports": "^5.2.2",
|
|
@@ -18,17 +18,17 @@
|
|
|
18
18
|
"typescript-eslint": "^8.34.1",
|
|
19
19
|
"vite-tsconfig-paths": "^5.1.4",
|
|
20
20
|
"vitest": "^3.2.4",
|
|
21
|
-
"@casekit/
|
|
22
|
-
"@casekit/
|
|
21
|
+
"@casekit/tsconfig": "1.0.1",
|
|
22
|
+
"@casekit/prettier-config": "1.0.1"
|
|
23
23
|
},
|
|
24
24
|
"exports": {
|
|
25
|
-
".": "./
|
|
25
|
+
".": "./build/index.js"
|
|
26
26
|
},
|
|
27
27
|
"files": [
|
|
28
|
-
"/
|
|
28
|
+
"/build"
|
|
29
29
|
],
|
|
30
30
|
"imports": {
|
|
31
|
-
"#*": "./
|
|
31
|
+
"#*": "./build/*"
|
|
32
32
|
},
|
|
33
33
|
"keywords": [],
|
|
34
34
|
"license": "ISC",
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import { expectTypeOf, test } from "vitest";
|
|
2
|
-
|
|
3
|
-
import { DefaultFieldType } from "./DefaultFieldType.js";
|
|
4
|
-
|
|
5
|
-
test("DefaultFieldType", () => {
|
|
6
|
-
expectTypeOf<DefaultFieldType<"bigint">>().toBeBigInt();
|
|
7
|
-
expectTypeOf<DefaultFieldType<"integer">>().toBeNumber();
|
|
8
|
-
expectTypeOf<DefaultFieldType<"double precision">>().toBeNumber();
|
|
9
|
-
expectTypeOf<DefaultFieldType<"oid">>().toBeNumber();
|
|
10
|
-
expectTypeOf<DefaultFieldType<"real">>().toBeNumber();
|
|
11
|
-
expectTypeOf<DefaultFieldType<"smallint">>().toBeNumber();
|
|
12
|
-
expectTypeOf<DefaultFieldType<"smallserial">>().toBeNumber();
|
|
13
|
-
expectTypeOf<DefaultFieldType<"serial">>().toBeNumber();
|
|
14
|
-
expectTypeOf<DefaultFieldType<"text">>().toBeString();
|
|
15
|
-
expectTypeOf<DefaultFieldType<"uuid">>().toBeString();
|
|
16
|
-
expectTypeOf<DefaultFieldType<"bytea">>().toEqualTypeOf<Buffer>();
|
|
17
|
-
// expectTypeOf<DefaultFieldType<"circle">>().toEqualTypeOf<{
|
|
18
|
-
// x: number;
|
|
19
|
-
// y: number;
|
|
20
|
-
// radius: number;
|
|
21
|
-
// }>();
|
|
22
|
-
// expectTypeOf<DefaultFieldType<"point">>().toEqualTypeOf<{
|
|
23
|
-
// x: number;
|
|
24
|
-
// y: number;
|
|
25
|
-
// }>();
|
|
26
|
-
expectTypeOf<DefaultFieldType<"json">>().toBeUnknown();
|
|
27
|
-
expectTypeOf<DefaultFieldType<"jsonb">>().toBeUnknown();
|
|
28
|
-
expectTypeOf<DefaultFieldType<"boolean">>().toBeBoolean();
|
|
29
|
-
expectTypeOf<DefaultFieldType<"date">>().toEqualTypeOf<Date>();
|
|
30
|
-
expectTypeOf<DefaultFieldType<"timestamp">>().toEqualTypeOf<Date>();
|
|
31
|
-
// expectTypeOf<DefaultFieldType<"interval">>().toEqualTypeOf<{
|
|
32
|
-
// years?: number;
|
|
33
|
-
// months?: number;
|
|
34
|
-
// days?: number;
|
|
35
|
-
// hours?: number;
|
|
36
|
-
// minutes?: number;
|
|
37
|
-
// seconds?: number;
|
|
38
|
-
// milliseconds?: number;
|
|
39
|
-
// }>();
|
|
40
|
-
expectTypeOf<DefaultFieldType<"time">>().toEqualTypeOf<string>();
|
|
41
|
-
expectTypeOf<DefaultFieldType<"timetz">>().toEqualTypeOf<string>();
|
|
42
|
-
expectTypeOf<DefaultFieldType<"timestamptz">>().toEqualTypeOf<Date>();
|
|
43
|
-
expectTypeOf<DefaultFieldType<"varchar">>().toBeString();
|
|
44
|
-
expectTypeOf<DefaultFieldType<"char">>().toBeString();
|
|
45
|
-
expectTypeOf<DefaultFieldType<"numeric">>().toBeString();
|
|
46
|
-
expectTypeOf<DefaultFieldType<"decimal">>().toBeString();
|
|
47
|
-
expectTypeOf<DefaultFieldType<"money">>().toBeString();
|
|
48
|
-
expectTypeOf<DefaultFieldType<"bit">>().toBeString();
|
|
49
|
-
expectTypeOf<DefaultFieldType<"box">>().toBeString();
|
|
50
|
-
expectTypeOf<DefaultFieldType<"line">>().toBeString();
|
|
51
|
-
expectTypeOf<DefaultFieldType<"lseg">>().toBeString();
|
|
52
|
-
expectTypeOf<DefaultFieldType<"path">>().toBeString();
|
|
53
|
-
expectTypeOf<DefaultFieldType<"polygon">>().toBeString();
|
|
54
|
-
expectTypeOf<DefaultFieldType<"cidr">>().toBeString();
|
|
55
|
-
expectTypeOf<DefaultFieldType<"inet">>().toBeString();
|
|
56
|
-
expectTypeOf<DefaultFieldType<"macaddr">>().toBeString();
|
|
57
|
-
expectTypeOf<DefaultFieldType<"tsquery">>().toBeString();
|
|
58
|
-
expectTypeOf<DefaultFieldType<"tsvector">>().toBeString();
|
|
59
|
-
expectTypeOf<DefaultFieldType<"xml">>().toBeString();
|
|
60
|
-
});
|