prisma-kysely 1.4.2 → 1.6.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/README.md +37 -2
- package/dist/__test__/e2e.test.js +68 -0
- package/dist/__test__/e2e.test.js.map +1 -1
- package/dist/generator.js +6 -1
- package/dist/generator.js.map +1 -1
- package/dist/helpers/generateDatabaseType.js +4 -2
- package/dist/helpers/generateDatabaseType.js.map +1 -1
- package/dist/helpers/generateDatabaseType.test.js +1 -1
- package/dist/helpers/generateFieldType.js +7 -7
- package/dist/helpers/generateFieldType.js.map +1 -1
- package/dist/helpers/generateModel.js +8 -4
- package/dist/helpers/generateModel.js.map +1 -1
- package/dist/helpers/generateTypeOverrideFromDocumentation.js +43 -0
- package/dist/helpers/generateTypeOverrideFromDocumentation.js.map +1 -0
- package/dist/helpers/generateTypeOverrideFromDocumentation.test.js +33 -0
- package/dist/helpers/generateTypeOverrideFromDocumentation.test.js.map +1 -0
- package/dist/helpers/generateTypedAliasDeclaration.js +1 -1
- package/dist/helpers/generateTypedAliasDeclaration.js.map +1 -1
- package/dist/helpers/generateTypedReferenceNode.js +1 -1
- package/dist/helpers/generateTypedReferenceNode.js.map +1 -1
- package/dist/helpers/multiSchemaHelpers.js +27 -0
- package/dist/helpers/multiSchemaHelpers.js.map +1 -0
- package/dist/helpers/multiSchemaHelpers.test.js +42 -0
- package/dist/helpers/multiSchemaHelpers.test.js.map +1 -0
- package/package.json +10 -9
package/README.md
CHANGED
|
@@ -83,6 +83,40 @@ hope it's just as useful for you! 😎
|
|
|
83
83
|
| `readOnlyIds` | Use Kysely's `GeneratedAlways` for `@id` fields with default values, preventing insert and update. |
|
|
84
84
|
| `[typename]TypeOverride` | Allows you to override the resulting TypeScript type for any Prisma type. Useful when targeting a different environment than Node (e.g. WinterCG compatible runtimes that use UInt8Arrays instead of Buffers for binary types etc.) Check out the [config validator](https://github.com/valtyr/prisma-kysely/blob/main/src/utils/validateConfig.ts) for a complete list of options. |
|
|
85
85
|
|
|
86
|
+
### Per-field type overrides
|
|
87
|
+
|
|
88
|
+
In some cases, you might want to override a type for a specific field. This
|
|
89
|
+
could be useful, for example, for constraining string types to certain literal
|
|
90
|
+
values. Be aware though that this does not of course come with any runtime
|
|
91
|
+
validation, and in most cases won't be guaranteed to match the actual data in
|
|
92
|
+
the database.
|
|
93
|
+
|
|
94
|
+
That disclaimer aside, here's how it works: Add a `@kyselyType(...)` declaration
|
|
95
|
+
to the Prisma docstring (deliniated using three slashes `///`) for the field
|
|
96
|
+
with your type inside the parentheses.
|
|
97
|
+
|
|
98
|
+
```prisma
|
|
99
|
+
model User {
|
|
100
|
+
id String @id
|
|
101
|
+
name String
|
|
102
|
+
|
|
103
|
+
/// @kyselyType('member' | 'admin')
|
|
104
|
+
role String
|
|
105
|
+
}
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
The parentheses can include any valid TS type declaration.
|
|
109
|
+
|
|
110
|
+
The output for the example above would be as follows:
|
|
111
|
+
|
|
112
|
+
```ts
|
|
113
|
+
export type User = {
|
|
114
|
+
id: string;
|
|
115
|
+
name: string;
|
|
116
|
+
role: "member" | "owner";
|
|
117
|
+
};
|
|
118
|
+
```
|
|
119
|
+
|
|
86
120
|
### Gotchas
|
|
87
121
|
|
|
88
122
|
#### Default values
|
|
@@ -143,8 +177,9 @@ you can think of.
|
|
|
143
177
|
partly stolen from
|
|
144
178
|
[`prisma-dbml-generator`](https://github.com/notiz-dev/prisma-dbml-generator/blob/752f89cf40257a9698913294b38843ac742f8345/src/generator/many-to-many-tables.ts).
|
|
145
179
|
Many-too-many thanks to them!
|
|
146
|
-
- Jökull Sólberg ([@jokull](https://github.com/jokull)) for being this library's
|
|
147
|
-
main
|
|
180
|
+
- Igal Klebanov ([@igalklebanov](https://github.com/igalklebanov)) and Jökull Sólberg ([@jokull](https://github.com/jokull)) for being this library's
|
|
181
|
+
main proponents on Twitter!
|
|
182
|
+
- The authors and maintainers of Kysely ❤️🔥
|
|
148
183
|
|
|
149
184
|
```diff
|
|
150
185
|
+ Boyce-Codd gang unite! 💽
|
|
@@ -54,6 +54,37 @@ const exec = (0, util_1.promisify)(child_process_1.exec);
|
|
|
54
54
|
};`)).toBeTruthy();
|
|
55
55
|
(0, vitest_1.expect)(generatedSource.includes("_SprocketToTestUser: SprocketToTestUser")).toBeTruthy();
|
|
56
56
|
}, { timeout: 20000 });
|
|
57
|
+
(0, vitest_1.test)("End to end test - with custom type override", async () => {
|
|
58
|
+
await exec("yarn prisma init --datasource-provider sqlite");
|
|
59
|
+
await promises_1.default.writeFile("./prisma/schema.prisma", `datasource db {
|
|
60
|
+
provider = "sqlite"
|
|
61
|
+
url = "file:./dev.db"
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
generator kysely {
|
|
65
|
+
provider = "node ./dist/bin.js"
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
model TestUser {
|
|
69
|
+
id String @id
|
|
70
|
+
name String
|
|
71
|
+
|
|
72
|
+
/// @kyselyType('member' | 'owner')
|
|
73
|
+
role String
|
|
74
|
+
}`);
|
|
75
|
+
await exec("yarn prisma generate");
|
|
76
|
+
const generatedSource = await promises_1.default.readFile("./prisma/generated/types.ts", {
|
|
77
|
+
encoding: "utf-8",
|
|
78
|
+
});
|
|
79
|
+
(0, vitest_1.expect)(generatedSource.includes(`export type TestUser = {
|
|
80
|
+
id: string;
|
|
81
|
+
name: string;
|
|
82
|
+
/**
|
|
83
|
+
* @kyselyType('member' | 'owner')
|
|
84
|
+
*/
|
|
85
|
+
role: "member" | "owner";
|
|
86
|
+
};`)).toBeTruthy();
|
|
87
|
+
}, { timeout: 20000 });
|
|
57
88
|
(0, vitest_1.test)("End to end test - separate entrypoints", async () => {
|
|
58
89
|
await exec("yarn prisma init --datasource-provider mysql");
|
|
59
90
|
await promises_1.default.writeFile("./prisma/schema.prisma", `datasource db {
|
|
@@ -126,4 +157,41 @@ export type TestEnum = (typeof TestEnum)[keyof typeof TestEnum];
|
|
|
126
157
|
encoding: "utf-8",
|
|
127
158
|
})).rejects.toThrow();
|
|
128
159
|
}, { timeout: 20000 });
|
|
160
|
+
(0, vitest_1.test)("End to end test - multi-schema support", async () => {
|
|
161
|
+
await exec("yarn prisma init --datasource-provider postgresql");
|
|
162
|
+
await promises_1.default.writeFile("./prisma/schema.prisma", `generator kysely {
|
|
163
|
+
provider = "node ./dist/bin.js"
|
|
164
|
+
previewFeatures = ["multiSchema"]
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
datasource db {
|
|
168
|
+
provider = "postgresql"
|
|
169
|
+
schemas = ["mammals", "birds"]
|
|
170
|
+
url = env("TEST_DATABASE_URL")
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
model Elephant {
|
|
174
|
+
id Int @id
|
|
175
|
+
name String
|
|
176
|
+
|
|
177
|
+
@@map("elephants")
|
|
178
|
+
@@schema("mammals")
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
model Eagle {
|
|
182
|
+
id Int @id
|
|
183
|
+
name String
|
|
184
|
+
|
|
185
|
+
@@map("eagles")
|
|
186
|
+
@@schema("birds")
|
|
187
|
+
}`);
|
|
188
|
+
await exec("yarn prisma generate");
|
|
189
|
+
const typeFile = await promises_1.default.readFile("./prisma/generated/types.ts", {
|
|
190
|
+
encoding: "utf-8",
|
|
191
|
+
});
|
|
192
|
+
(0, vitest_1.expect)(typeFile).toContain(`export type DB = {
|
|
193
|
+
"birds.eagles": Eagle;
|
|
194
|
+
"mammals.elephants": Elephant;
|
|
195
|
+
};`);
|
|
196
|
+
}, { timeout: 20000 });
|
|
129
197
|
//# sourceMappingURL=e2e.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"e2e.test.js","sourceRoot":"","sources":["../../src/__test__/e2e.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"e2e.test.js","sourceRoot":"","sources":["../../src/__test__/e2e.test.ts"],"names":[],"mappings":"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"}
|
package/dist/generator.js
CHANGED
|
@@ -14,6 +14,7 @@ const sorted_1 = require("./utils/sorted");
|
|
|
14
14
|
const validateConfig_1 = require("./utils/validateConfig");
|
|
15
15
|
const writeFileSafely_1 = require("./utils/writeFileSafely");
|
|
16
16
|
const generateEnumType_1 = require("./helpers/generateEnumType");
|
|
17
|
+
const multiSchemaHelpers_1 = require("./helpers/multiSchemaHelpers");
|
|
17
18
|
const { version } = require("../package.json");
|
|
18
19
|
(0, generator_helper_1.generatorHandler)({
|
|
19
20
|
onManifest() {
|
|
@@ -24,6 +25,7 @@ const { version } = require("../package.json");
|
|
|
24
25
|
};
|
|
25
26
|
},
|
|
26
27
|
onGenerate: async (options) => {
|
|
28
|
+
var _a;
|
|
27
29
|
const config = (0, validateConfig_1.validateConfig)({
|
|
28
30
|
...options.generator.config,
|
|
29
31
|
databaseProvider: options.datasources[0].provider,
|
|
@@ -32,7 +34,10 @@ const { version } = require("../package.json");
|
|
|
32
34
|
return (0, generateEnumType_1.generateEnumType)(name, values);
|
|
33
35
|
});
|
|
34
36
|
const implicitManyToManyModels = (0, generateImplicitManyToManyModels_1.generateImplicitManyToManyModels)(options.dmmf.datamodel.models);
|
|
35
|
-
|
|
37
|
+
let models = (0, sorted_1.sorted)([...options.dmmf.datamodel.models, ...implicitManyToManyModels], (a, b) => a.name.localeCompare(b.name)).map((m) => (0, generateModel_1.generateModel)(m, config));
|
|
38
|
+
if ((_a = options.generator.previewFeatures) === null || _a === void 0 ? void 0 : _a.includes("multiSchema")) {
|
|
39
|
+
models = (0, multiSchemaHelpers_1.convertToMultiSchemaModels)(models, options.datamodel);
|
|
40
|
+
}
|
|
36
41
|
const databaseType = (0, generateDatabaseType_1.generateDatabaseType)(models.map((m) => ({ tableName: m.tableName, typeName: m.typeName })), config);
|
|
37
42
|
const files = (0, generateFiles_1.generateFiles)({
|
|
38
43
|
databaseType,
|
package/dist/generator.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":";;;;;AACA,+DAA4D;AAC5D,gDAAwB;AAExB,2CAA6C;AAC7C,yEAAsE;AACtE,2DAAwD;AACxD,iGAA8F;AAC9F,2DAAwD;AACxD,2CAAwC;AACxC,2DAAwD;AACxD,6DAA0D;AAE1D,iEAA8D;
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,15 +7,17 @@ exports.generateDatabaseType = void 0;
|
|
|
7
7
|
const typescript_1 = __importDefault(require("typescript"));
|
|
8
8
|
const isValidTSIdentifier_1 = __importDefault(require("../utils/isValidTSIdentifier"));
|
|
9
9
|
const normalizeCase_1 = require("../utils/normalizeCase");
|
|
10
|
+
const sorted_1 = require("../utils/sorted");
|
|
10
11
|
const generateDatabaseType = (models, config) => {
|
|
11
|
-
const
|
|
12
|
+
const sortedModels = (0, sorted_1.sorted)(models, (a, b) => a.tableName.localeCompare(b.tableName));
|
|
13
|
+
const properties = sortedModels.map((field) => {
|
|
12
14
|
const caseNormalizedTableName = (0, normalizeCase_1.normalizeCase)(field.tableName, config);
|
|
13
15
|
const nameIdentifier = (0, isValidTSIdentifier_1.default)(caseNormalizedTableName)
|
|
14
16
|
? typescript_1.default.factory.createIdentifier(caseNormalizedTableName)
|
|
15
17
|
: typescript_1.default.factory.createStringLiteral(caseNormalizedTableName);
|
|
16
18
|
return typescript_1.default.factory.createPropertySignature(undefined, nameIdentifier, undefined, typescript_1.default.factory.createTypeReferenceNode(typescript_1.default.factory.createIdentifier(field.typeName), undefined));
|
|
17
19
|
});
|
|
18
|
-
return typescript_1.default.factory.createTypeAliasDeclaration(
|
|
20
|
+
return typescript_1.default.factory.createTypeAliasDeclaration([typescript_1.default.factory.createModifier(typescript_1.default.SyntaxKind.ExportKeyword)], typescript_1.default.factory.createIdentifier("DB"), undefined, typescript_1.default.factory.createTypeLiteralNode(properties));
|
|
19
21
|
};
|
|
20
22
|
exports.generateDatabaseType = generateDatabaseType;
|
|
21
23
|
//# sourceMappingURL=generateDatabaseType.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateDatabaseType.js","sourceRoot":"","sources":["../../src/helpers/generateDatabaseType.ts"],"names":[],"mappings":";;;;;;AAAA,4DAA4B;AAE5B,uFAA8D;AAC9D,0DAAsD;
|
|
1
|
+
{"version":3,"file":"generateDatabaseType.js","sourceRoot":"","sources":["../../src/helpers/generateDatabaseType.ts"],"names":[],"mappings":";;;;;;AAAA,4DAA4B;AAE5B,uFAA8D;AAC9D,0DAAsD;AACtD,4CAAwC;AAGjC,MAAM,oBAAoB,GAAG,CAClC,MAAiD,EACjD,MAAc,EACd,EAAE;IACF,MAAM,YAAY,GAAG,IAAA,eAAM,EAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAC3C,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CACvC,CAAC;IAEF,MAAM,UAAU,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAC5C,MAAM,uBAAuB,GAAG,IAAA,6BAAa,EAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAMvE,MAAM,cAAc,GAAG,IAAA,6BAAmB,EAAC,uBAAuB,CAAC;YACjE,CAAC,CAAC,oBAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,uBAAuB,CAAC;YACtD,CAAC,CAAC,oBAAE,CAAC,OAAO,CAAC,mBAAmB,CAAC,uBAAuB,CAAC,CAAC;QAE5D,OAAO,oBAAE,CAAC,OAAO,CAAC,uBAAuB,CACvC,SAAS,EACT,cAAc,EACd,SAAS,EACT,oBAAE,CAAC,OAAO,CAAC,uBAAuB,CAChC,oBAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,QAAQ,CAAC,EAC3C,SAAS,CACV,CACF,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,OAAO,oBAAE,CAAC,OAAO,CAAC,0BAA0B,CAC1C,CAAC,oBAAE,CAAC,OAAO,CAAC,cAAc,CAAC,oBAAE,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,EACxD,oBAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,EACjC,SAAS,EACT,oBAAE,CAAC,OAAO,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAC7C,CAAC;AACJ,CAAC,CAAC;AApCW,QAAA,oBAAoB,wBAoC/B"}
|
|
@@ -56,8 +56,8 @@ const testUtils_1 = require("../utils/testUtils");
|
|
|
56
56
|
const result = (0, testUtils_1.stringifyTsNode)(node);
|
|
57
57
|
(0, vitest_1.expect)(result).toEqual(`export type DB = {
|
|
58
58
|
Bookmark: Bookmark;
|
|
59
|
-
"user session_*table ;D": Session;
|
|
60
59
|
User: User;
|
|
60
|
+
"user session_*table ;D": Session;
|
|
61
61
|
};`);
|
|
62
62
|
});
|
|
63
63
|
//# sourceMappingURL=generateDatabaseType.test.js.map
|
|
@@ -61,21 +61,21 @@ const overrideType = (type, config) => {
|
|
|
61
61
|
}
|
|
62
62
|
};
|
|
63
63
|
exports.overrideType = overrideType;
|
|
64
|
-
const generateFieldTypeInner = (type, config) => {
|
|
64
|
+
const generateFieldTypeInner = (type, config, typeOverride) => {
|
|
65
65
|
switch (config.databaseProvider) {
|
|
66
66
|
case "sqlite":
|
|
67
|
-
return (0, exports.overrideType)(type, config) || exports.sqliteTypeMap[type];
|
|
67
|
+
return typeOverride || (0, exports.overrideType)(type, config) || exports.sqliteTypeMap[type];
|
|
68
68
|
case "mysql":
|
|
69
|
-
return (0, exports.overrideType)(type, config) || exports.mysqlTypeMap[type];
|
|
69
|
+
return typeOverride || (0, exports.overrideType)(type, config) || exports.mysqlTypeMap[type];
|
|
70
70
|
case "postgresql":
|
|
71
|
-
return (0, exports.overrideType)(type, config) || exports.postgresqlTypeMap[type];
|
|
71
|
+
return (typeOverride || (0, exports.overrideType)(type, config) || exports.postgresqlTypeMap[type]);
|
|
72
72
|
case "cockroachdb":
|
|
73
|
-
return (0, exports.overrideType)(type, config) || exports.postgresqlTypeMap[type];
|
|
73
|
+
return (typeOverride || (0, exports.overrideType)(type, config) || exports.postgresqlTypeMap[type]);
|
|
74
74
|
}
|
|
75
75
|
};
|
|
76
76
|
exports.generateFieldTypeInner = generateFieldTypeInner;
|
|
77
|
-
const generateFieldType = (type, config) => {
|
|
78
|
-
const fieldType = (0, exports.generateFieldTypeInner)(type, config);
|
|
77
|
+
const generateFieldType = (type, config, typeOverride) => {
|
|
78
|
+
const fieldType = (0, exports.generateFieldTypeInner)(type, config, typeOverride || null);
|
|
79
79
|
if (!fieldType)
|
|
80
80
|
throw new Error(`Unsupported type ${type} for database ${config.databaseProvider}`);
|
|
81
81
|
return fieldType;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateFieldType.js","sourceRoot":"","sources":["../../src/helpers/generateFieldType.ts"],"names":[],"mappings":";;;AAgBa,QAAA,aAAa,GAAY;IACpC,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,QAAQ;IACjB,KAAK,EAAE,QAAQ;IACf,QAAQ,EAAE,QAAQ;IAClB,OAAO,EAAE,QAAQ;IACjB,KAAK,EAAE,QAAQ;IACf,GAAG,EAAE,QAAQ;IACb,MAAM,EAAE,QAAQ;IAChB,WAAW,EAAE,SAAS;CACvB,CAAC;AAEW,QAAA,YAAY,GAAY;IACnC,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,QAAQ;IACjB,KAAK,EAAE,QAAQ;IACf,QAAQ,EAAE,WAAW;IACrB,OAAO,EAAE,QAAQ;IACjB,KAAK,EAAE,QAAQ;IACf,GAAG,EAAE,QAAQ;IACb,IAAI,EAAE,SAAS;IACf,MAAM,EAAE,QAAQ;IAChB,WAAW,EAAE,SAAS;CACvB,CAAC;AAEW,QAAA,iBAAiB,GAAY;IACxC,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,SAAS;IAClB,KAAK,EAAE,QAAQ;IACf,QAAQ,EAAE,WAAW;IACrB,OAAO,EAAE,QAAQ;IACjB,KAAK,EAAE,QAAQ;IACf,GAAG,EAAE,QAAQ;IACb,IAAI,EAAE,SAAS;IACf,MAAM,EAAE,QAAQ;IAChB,WAAW,EAAE,SAAS;CACvB,CAAC;AAEK,MAAM,YAAY,GAAG,CAAC,IAAY,EAAE,MAAc,EAAE,EAAE;IAC3D,QAAQ,IAAI,EAAE;QACZ,KAAK,QAAQ;YACX,OAAO,MAAM,CAAC,kBAAkB,CAAC;QACnC,KAAK,UAAU;YACb,OAAO,MAAM,CAAC,oBAAoB,CAAC;QACrC,KAAK,SAAS;YACZ,OAAO,MAAM,CAAC,mBAAmB,CAAC;QACpC,KAAK,QAAQ;YACX,OAAO,MAAM,CAAC,kBAAkB,CAAC;QACnC,KAAK,KAAK;YACR,OAAO,MAAM,CAAC,eAAe,CAAC;QAChC,KAAK,OAAO;YACV,OAAO,MAAM,CAAC,iBAAiB,CAAC;QAClC,KAAK,SAAS;YACZ,OAAO,MAAM,CAAC,mBAAmB,CAAC;QACpC,KAAK,OAAO;YACV,OAAO,MAAM,CAAC,iBAAiB,CAAC;QAClC,KAAK,MAAM;YACT,OAAO,MAAM,CAAC,gBAAgB,CAAC;QACjC,KAAK,aAAa;YAChB,OAAO,MAAM,CAAC,uBAAuB,CAAC;KACzC;AACH,CAAC,CAAC;AAvBW,QAAA,YAAY,gBAuBvB;AAEK,MAAM,sBAAsB,GAAG,
|
|
1
|
+
{"version":3,"file":"generateFieldType.js","sourceRoot":"","sources":["../../src/helpers/generateFieldType.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,7 @@ exports.generateModel = void 0;
|
|
|
7
7
|
const typescript_1 = __importDefault(require("typescript"));
|
|
8
8
|
const generateField_1 = require("./generateField");
|
|
9
9
|
const generateFieldType_1 = require("./generateFieldType");
|
|
10
|
+
const generateTypeOverrideFromDocumentation_1 = require("./generateTypeOverrideFromDocumentation");
|
|
10
11
|
const normalizeCase_1 = require("../utils/normalizeCase");
|
|
11
12
|
const defaultTypesImplementedInJS = ["cuid", "uuid"];
|
|
12
13
|
const generateModel = (model, config) => {
|
|
@@ -15,12 +16,16 @@ const generateModel = (model, config) => {
|
|
|
15
16
|
!(typeof field.default === "object" &&
|
|
16
17
|
"name" in field.default &&
|
|
17
18
|
defaultTypesImplementedInJS.includes(field.default.name));
|
|
19
|
+
const typeOverride = field.documentation
|
|
20
|
+
? (0, generateTypeOverrideFromDocumentation_1.generateTypeOverrideFromDocumentation)(field.documentation)
|
|
21
|
+
: null;
|
|
18
22
|
if (field.kind === "object" || field.kind === "unsupported")
|
|
19
23
|
return [];
|
|
24
|
+
const dbName = typeof field.dbName === "string" ? field.dbName : null;
|
|
20
25
|
if (field.kind === "enum") {
|
|
21
26
|
return (0, generateField_1.generateField)({
|
|
22
27
|
isId: field.isId,
|
|
23
|
-
name: field.name,
|
|
28
|
+
name: (0, normalizeCase_1.normalizeCase)(dbName || field.name, config),
|
|
24
29
|
type: typescript_1.default.factory.createTypeReferenceNode(typescript_1.default.factory.createIdentifier(field.type), undefined),
|
|
25
30
|
nullable: !field.isRequired,
|
|
26
31
|
generated: isGenerated,
|
|
@@ -29,10 +34,9 @@ const generateModel = (model, config) => {
|
|
|
29
34
|
config,
|
|
30
35
|
});
|
|
31
36
|
}
|
|
32
|
-
const dbName = typeof field.dbName === "string" ? field.dbName : null;
|
|
33
37
|
return (0, generateField_1.generateField)({
|
|
34
38
|
name: (0, normalizeCase_1.normalizeCase)(dbName || field.name, config),
|
|
35
|
-
type: typescript_1.default.factory.createTypeReferenceNode(typescript_1.default.factory.createIdentifier((0, generateFieldType_1.generateFieldType)(field.type, config)), undefined),
|
|
39
|
+
type: typescript_1.default.factory.createTypeReferenceNode(typescript_1.default.factory.createIdentifier((0, generateFieldType_1.generateFieldType)(field.type, config, typeOverride)), undefined),
|
|
36
40
|
nullable: !field.isRequired,
|
|
37
41
|
generated: isGenerated,
|
|
38
42
|
list: field.isList,
|
|
@@ -44,7 +48,7 @@ const generateModel = (model, config) => {
|
|
|
44
48
|
return {
|
|
45
49
|
typeName: model.name,
|
|
46
50
|
tableName: model.dbName || model.name,
|
|
47
|
-
definition: typescript_1.default.factory.createTypeAliasDeclaration(
|
|
51
|
+
definition: typescript_1.default.factory.createTypeAliasDeclaration([typescript_1.default.factory.createModifier(typescript_1.default.SyntaxKind.ExportKeyword)], typescript_1.default.factory.createIdentifier(model.name), undefined, typescript_1.default.factory.createTypeLiteralNode(properties)),
|
|
48
52
|
};
|
|
49
53
|
};
|
|
50
54
|
exports.generateModel = generateModel;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateModel.js","sourceRoot":"","sources":["../../src/helpers/generateModel.ts"],"names":[],"mappings":";;;;;;AACA,4DAA4B;AAE5B,mDAAwD;AACxD,2DAAgE;AAChE,0DAAsD;AAQtD,MAAM,2BAA2B,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAE9C,MAAM,aAAa,GAAG,CAAC,KAAiB,EAAE,MAAc,EAAE,EAAE;IACjE,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;QAChD,MAAM,WAAW,GACf,KAAK,CAAC,eAAe;YACrB,CAAC,CACC,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ;gBACjC,MAAM,IAAI,KAAK,CAAC,OAAO;gBACvB,2BAA2B,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CACzD,CAAC;QAEJ,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa;YAAE,OAAO,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"generateModel.js","sourceRoot":"","sources":["../../src/helpers/generateModel.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateTypeOverrideFromDocumentation = void 0;
|
|
4
|
+
const START_LEXEME = "@kyselyType(";
|
|
5
|
+
const generateTypeOverrideFromDocumentation = (documentation) => {
|
|
6
|
+
const tokens = documentation.split("");
|
|
7
|
+
let matchState = null;
|
|
8
|
+
let parentheses = 0;
|
|
9
|
+
let i = 0;
|
|
10
|
+
while (i < documentation.length) {
|
|
11
|
+
const currentToken = tokens[i];
|
|
12
|
+
if (matchState) {
|
|
13
|
+
if (currentToken === ")" && parentheses === 0)
|
|
14
|
+
return matchState.tokens.join("");
|
|
15
|
+
if (currentToken === ")")
|
|
16
|
+
parentheses--;
|
|
17
|
+
if (currentToken === "(")
|
|
18
|
+
parentheses++;
|
|
19
|
+
matchState.tokens.push(currentToken);
|
|
20
|
+
i++;
|
|
21
|
+
if (i === documentation.length) {
|
|
22
|
+
i = matchState.startLocation + 1;
|
|
23
|
+
matchState = null;
|
|
24
|
+
continue;
|
|
25
|
+
}
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
if (currentToken === "@") {
|
|
29
|
+
const isMatch = tokens.slice(i, i + START_LEXEME.length).join("") === START_LEXEME;
|
|
30
|
+
if (!isMatch) {
|
|
31
|
+
i++;
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
matchState = { tokens: [], startLocation: i };
|
|
35
|
+
i += START_LEXEME.length;
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
i++;
|
|
39
|
+
}
|
|
40
|
+
return null;
|
|
41
|
+
};
|
|
42
|
+
exports.generateTypeOverrideFromDocumentation = generateTypeOverrideFromDocumentation;
|
|
43
|
+
//# sourceMappingURL=generateTypeOverrideFromDocumentation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateTypeOverrideFromDocumentation.js","sourceRoot":"","sources":["../../src/helpers/generateTypeOverrideFromDocumentation.ts"],"names":[],"mappings":";;;AAAA,MAAM,YAAY,GAAG,cAAc,CAAC;AAS7B,MAAM,qCAAqC,GAAG,CACnD,aAAqB,EACrB,EAAE;IACF,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAEvC,IAAI,UAAU,GAAuD,IAAI,CAAC;IAC1E,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE;QAC/B,MAAM,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QAG/B,IAAI,UAAU,EAAE;YAGd,IAAI,YAAY,KAAK,GAAG,IAAI,WAAW,KAAK,CAAC;gBAC3C,OAAO,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAIpC,IAAI,YAAY,KAAK,GAAG;gBAAE,WAAW,EAAE,CAAC;YACxC,IAAI,YAAY,KAAK,GAAG;gBAAE,WAAW,EAAE,CAAC;YAGxC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAErC,CAAC,EAAE,CAAC;YAKJ,IAAI,CAAC,KAAK,aAAa,CAAC,MAAM,EAAE;gBAC9B,CAAC,GAAG,UAAU,CAAC,aAAa,GAAG,CAAC,CAAC;gBACjC,UAAU,GAAG,IAAI,CAAC;gBAClB,SAAS;aACV;YAED,SAAS;SACV;QAID,IAAI,YAAY,KAAK,GAAG,EAAE;YACxB,MAAM,OAAO,GACX,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,YAAY,CAAC;YAGrE,IAAI,CAAC,OAAO,EAAE;gBACZ,CAAC,EAAE,CAAC;gBACJ,SAAS;aACV;YAGD,UAAU,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC;YAC9C,CAAC,IAAI,YAAY,CAAC,MAAM,CAAC;YAEzB,SAAS;SACV;QAED,CAAC,EAAE,CAAC;KACL;IAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AA/DW,QAAA,qCAAqC,yCA+DhD"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const vitest_1 = require("vitest");
|
|
4
|
+
const generateTypeOverrideFromDocumentation_1 = require("./generateTypeOverrideFromDocumentation");
|
|
5
|
+
(0, vitest_1.test)("finds a type override", () => {
|
|
6
|
+
const docString = "this is some property \n here is the type override @kyselyType('admin' | 'member') ";
|
|
7
|
+
(0, vitest_1.expect)((0, generateTypeOverrideFromDocumentation_1.generateTypeOverrideFromDocumentation)(docString)).toEqual("'admin' | 'member'");
|
|
8
|
+
});
|
|
9
|
+
(0, vitest_1.test)("supports parentheses in type", () => {
|
|
10
|
+
const docString = "this is some property \n here is the type override @kyselyType(('admin' | 'member')) ";
|
|
11
|
+
(0, vitest_1.expect)((0, generateTypeOverrideFromDocumentation_1.generateTypeOverrideFromDocumentation)(docString)).toEqual("('admin' | 'member')");
|
|
12
|
+
});
|
|
13
|
+
(0, vitest_1.test)("reacts correctly to unbalanced parens", () => {
|
|
14
|
+
const docString = "this is some property \n here is the type override @kyselyType(('admin' | 'member') ";
|
|
15
|
+
(0, vitest_1.expect)((0, generateTypeOverrideFromDocumentation_1.generateTypeOverrideFromDocumentation)(docString)).toEqual(null);
|
|
16
|
+
});
|
|
17
|
+
(0, vitest_1.test)("reacts correctly to extra parens", () => {
|
|
18
|
+
const docString = "this is some property \n here is the type override @kyselyType(('admin' | 'member'))) ";
|
|
19
|
+
(0, vitest_1.expect)((0, generateTypeOverrideFromDocumentation_1.generateTypeOverrideFromDocumentation)(docString)).toEqual("('admin' | 'member')");
|
|
20
|
+
});
|
|
21
|
+
(0, vitest_1.test)("finds type following incomplete one", () => {
|
|
22
|
+
const docString = "this is some property \n here is the type @kyselyType( override @kyselyType('admin' | 'member') ";
|
|
23
|
+
(0, vitest_1.expect)((0, generateTypeOverrideFromDocumentation_1.generateTypeOverrideFromDocumentation)(docString)).toEqual("'admin' | 'member'");
|
|
24
|
+
});
|
|
25
|
+
(0, vitest_1.test)("doesn't do anything in case of no type", () => {
|
|
26
|
+
const docString = "this is some property with no override";
|
|
27
|
+
(0, vitest_1.expect)((0, generateTypeOverrideFromDocumentation_1.generateTypeOverrideFromDocumentation)(docString)).toEqual(null);
|
|
28
|
+
});
|
|
29
|
+
(0, vitest_1.test)("bails when we have an at sign and no match", () => {
|
|
30
|
+
const docString = "hit me up at squiggly@goofy.af";
|
|
31
|
+
(0, vitest_1.expect)((0, generateTypeOverrideFromDocumentation_1.generateTypeOverrideFromDocumentation)(docString)).toEqual(null);
|
|
32
|
+
});
|
|
33
|
+
//# sourceMappingURL=generateTypeOverrideFromDocumentation.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateTypeOverrideFromDocumentation.test.js","sourceRoot":"","sources":["../../src/helpers/generateTypeOverrideFromDocumentation.test.ts"],"names":[],"mappings":";;AAAA,mCAAsC;AAEtC,mGAAgG;AAEhG,IAAA,aAAI,EAAC,uBAAuB,EAAE,GAAG,EAAE;IACjC,MAAM,SAAS,GACb,qFAAqF,CAAC;IAExF,IAAA,eAAM,EAAC,IAAA,6EAAqC,EAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAC9D,oBAAoB,CACrB,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,IAAA,aAAI,EAAC,8BAA8B,EAAE,GAAG,EAAE;IACxC,MAAM,SAAS,GACb,uFAAuF,CAAC;IAE1F,IAAA,eAAM,EAAC,IAAA,6EAAqC,EAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAC9D,sBAAsB,CACvB,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,IAAA,aAAI,EAAC,uCAAuC,EAAE,GAAG,EAAE;IACjD,MAAM,SAAS,GACb,sFAAsF,CAAC;IAEzF,IAAA,eAAM,EAAC,IAAA,6EAAqC,EAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACzE,CAAC,CAAC,CAAC;AAEH,IAAA,aAAI,EAAC,kCAAkC,EAAE,GAAG,EAAE;IAC5C,MAAM,SAAS,GACb,wFAAwF,CAAC;IAE3F,IAAA,eAAM,EAAC,IAAA,6EAAqC,EAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAC9D,sBAAsB,CACvB,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,IAAA,aAAI,EAAC,qCAAqC,EAAE,GAAG,EAAE;IAC/C,MAAM,SAAS,GACb,kGAAkG,CAAC;IAErG,IAAA,eAAM,EAAC,IAAA,6EAAqC,EAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAC9D,oBAAoB,CACrB,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,IAAA,aAAI,EAAC,wCAAwC,EAAE,GAAG,EAAE;IAClD,MAAM,SAAS,GAAG,wCAAwC,CAAC;IAE3D,IAAA,eAAM,EAAC,IAAA,6EAAqC,EAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACzE,CAAC,CAAC,CAAC;AAEH,IAAA,aAAI,EAAC,4CAA4C,EAAE,GAAG,EAAE;IACtD,MAAM,SAAS,GAAG,gCAAgC,CAAC;IAEnD,IAAA,eAAM,EAAC,IAAA,6EAAqC,EAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACzE,CAAC,CAAC,CAAC"}
|
|
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.generateTypedAliasDeclaration = void 0;
|
|
7
7
|
const typescript_1 = __importDefault(require("typescript"));
|
|
8
8
|
const generateTypedAliasDeclaration = (name, type) => {
|
|
9
|
-
return typescript_1.default.factory.createTypeAliasDeclaration(
|
|
9
|
+
return typescript_1.default.factory.createTypeAliasDeclaration([typescript_1.default.factory.createModifier(typescript_1.default.SyntaxKind.ExportKeyword)], typescript_1.default.factory.createIdentifier(name), undefined, type);
|
|
10
10
|
};
|
|
11
11
|
exports.generateTypedAliasDeclaration = generateTypedAliasDeclaration;
|
|
12
12
|
//# sourceMappingURL=generateTypedAliasDeclaration.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateTypedAliasDeclaration.js","sourceRoot":"","sources":["../../src/helpers/generateTypedAliasDeclaration.ts"],"names":[],"mappings":";;;;;;AAAA,4DAA4B;AAErB,MAAM,6BAA6B,GAAG,CAC3C,IAAY,EACZ,IAAiB,EACjB,EAAE;IACF,OAAO,oBAAE,CAAC,OAAO,CAAC,0BAA0B,CAC1C,
|
|
1
|
+
{"version":3,"file":"generateTypedAliasDeclaration.js","sourceRoot":"","sources":["../../src/helpers/generateTypedAliasDeclaration.ts"],"names":[],"mappings":";;;;;;AAAA,4DAA4B;AAErB,MAAM,6BAA6B,GAAG,CAC3C,IAAY,EACZ,IAAiB,EACjB,EAAE;IACF,OAAO,oBAAE,CAAC,OAAO,CAAC,0BAA0B,CAC1C,CAAC,oBAAE,CAAC,OAAO,CAAC,cAAc,CAAC,oBAAE,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,EACxD,oBAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,EACjC,SAAS,EACT,IAAI,CACL,CAAC;AACJ,CAAC,CAAC;AAVW,QAAA,6BAA6B,iCAUxC"}
|
|
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.generateTypedReferenceNode = void 0;
|
|
7
7
|
const typescript_1 = __importDefault(require("typescript"));
|
|
8
8
|
const generateTypedReferenceNode = (name) => {
|
|
9
|
-
return typescript_1.default.factory.createTypeAliasDeclaration(
|
|
9
|
+
return typescript_1.default.factory.createTypeAliasDeclaration([typescript_1.default.factory.createModifier(typescript_1.default.SyntaxKind.ExportKeyword)], name, undefined, typescript_1.default.factory.createTypeReferenceNode(`(typeof ${name})[keyof typeof ${name}]`, undefined));
|
|
10
10
|
};
|
|
11
11
|
exports.generateTypedReferenceNode = generateTypedReferenceNode;
|
|
12
12
|
//# sourceMappingURL=generateTypedReferenceNode.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateTypedReferenceNode.js","sourceRoot":"","sources":["../../src/helpers/generateTypedReferenceNode.ts"],"names":[],"mappings":";;;;;;AAAA,4DAA4B;AAErB,MAAM,0BAA0B,GAAG,CAAC,IAAY,EAAE,EAAE;IACzD,OAAO,oBAAE,CAAC,OAAO,CAAC,0BAA0B,CAC1C,
|
|
1
|
+
{"version":3,"file":"generateTypedReferenceNode.js","sourceRoot":"","sources":["../../src/helpers/generateTypedReferenceNode.ts"],"names":[],"mappings":";;;;;;AAAA,4DAA4B;AAErB,MAAM,0BAA0B,GAAG,CAAC,IAAY,EAAE,EAAE;IACzD,OAAO,oBAAE,CAAC,OAAO,CAAC,0BAA0B,CAC1C,CAAC,oBAAE,CAAC,OAAO,CAAC,cAAc,CAAC,oBAAE,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,EACxD,IAAI,EACJ,SAAS,EACT,oBAAE,CAAC,OAAO,CAAC,uBAAuB,CAChC,WAAW,IAAI,kBAAkB,IAAI,GAAG,EACxC,SAAS,CACV,CACF,CAAC;AACJ,CAAC,CAAC;AAVW,QAAA,0BAA0B,8BAUrC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.convertToMultiSchemaModels = void 0;
|
|
4
|
+
const prisma_ast_1 = require("@mrleebo/prisma-ast");
|
|
5
|
+
const convertToMultiSchemaModels = (models, dataModelStr) => {
|
|
6
|
+
const parsedSchema = (0, prisma_ast_1.getSchema)(dataModelStr);
|
|
7
|
+
const multiSchemaMap = new Map(parsedSchema.list
|
|
8
|
+
.filter((block) => block.type === "model")
|
|
9
|
+
.map((model) => {
|
|
10
|
+
var _a;
|
|
11
|
+
const schemaProperty = model.properties.find((prop) => prop.type === "attribute" && prop.name === "schema");
|
|
12
|
+
const schemaName = (_a = schemaProperty === null || schemaProperty === void 0 ? void 0 : schemaProperty.args) === null || _a === void 0 ? void 0 : _a[0].value;
|
|
13
|
+
if (typeof schemaName !== "string") {
|
|
14
|
+
return [model.name, ""];
|
|
15
|
+
}
|
|
16
|
+
return [model.name, schemaName.replace(/"/g, "")];
|
|
17
|
+
}));
|
|
18
|
+
return models.map((model) => {
|
|
19
|
+
const schemaName = multiSchemaMap.get(model.typeName);
|
|
20
|
+
if (!schemaName) {
|
|
21
|
+
return model;
|
|
22
|
+
}
|
|
23
|
+
return { ...model, tableName: `${schemaName}.${model.tableName}` };
|
|
24
|
+
});
|
|
25
|
+
};
|
|
26
|
+
exports.convertToMultiSchemaModels = convertToMultiSchemaModels;
|
|
27
|
+
//# sourceMappingURL=multiSchemaHelpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multiSchemaHelpers.js","sourceRoot":"","sources":["../../src/helpers/multiSchemaHelpers.ts"],"names":[],"mappings":";;;AAAA,oDAI6B;AAoBtB,MAAM,0BAA0B,GAAG,CACxC,MAAW,EACX,YAAoB,EACf,EAAE;IACP,MAAM,YAAY,GAAG,IAAA,sBAAS,EAAC,YAAY,CAAC,CAAC;IAE7C,MAAM,cAAc,GAAG,IAAI,GAAG,CAC5B,YAAY,CAAC,IAAI;SACd,MAAM,CAAC,CAAC,KAAK,EAAkB,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC;SACzD,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;;QACb,MAAM,cAAc,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAC1C,CAAC,IAAI,EAA0B,EAAE,CAC/B,IAAI,CAAC,IAAI,KAAK,WAAW,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,CACtD,CAAC;QAEF,MAAM,UAAU,GAAG,MAAA,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,IAAI,0CAAG,CAAC,EAAE,KAAK,CAAC;QAEnD,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;YAClC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;SACzB;QAED,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;IACpD,CAAC,CAAC,CACL,CAAC;IAEF,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAC1B,MAAM,UAAU,GAAG,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAEtD,IAAI,CAAC,UAAU,EAAE;YACf,OAAO,KAAK,CAAC;SACd;QAED,OAAO,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,GAAG,UAAU,IAAI,KAAK,CAAC,SAAS,EAAE,EAAE,CAAC;IACrE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAlCW,QAAA,0BAA0B,8BAkCrC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const vitest_1 = require("vitest");
|
|
4
|
+
const multiSchemaHelpers_1 = require("./multiSchemaHelpers");
|
|
5
|
+
const testDataModel = `generator kysely {
|
|
6
|
+
provider = "node ./dist/bin.js"
|
|
7
|
+
previewFeatures = ["multiSchema"]
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
datasource db {
|
|
11
|
+
provider = "postgresql"
|
|
12
|
+
schemas = ["mammals", "birds"]
|
|
13
|
+
url = env("TEST_DATABASE_URL")
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
model Elephant {
|
|
17
|
+
id Int @id
|
|
18
|
+
name String
|
|
19
|
+
|
|
20
|
+
@@map("elephants")
|
|
21
|
+
@@schema("mammals")
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
model Eagle {
|
|
25
|
+
id Int @id
|
|
26
|
+
name String
|
|
27
|
+
|
|
28
|
+
@@map("eagles")
|
|
29
|
+
@@schema("birds")
|
|
30
|
+
}`;
|
|
31
|
+
(0, vitest_1.test)("returns a list of models with schemas appended to the table name", () => {
|
|
32
|
+
const initialModels = [
|
|
33
|
+
{ typeName: "Elephant", tableName: "elephants" },
|
|
34
|
+
{ typeName: "Eagle", tableName: "eagles" },
|
|
35
|
+
];
|
|
36
|
+
const result = (0, multiSchemaHelpers_1.convertToMultiSchemaModels)(initialModels, testDataModel);
|
|
37
|
+
(0, vitest_1.expect)(result).toEqual([
|
|
38
|
+
{ typeName: "Elephant", tableName: "mammals.elephants" },
|
|
39
|
+
{ typeName: "Eagle", tableName: "birds.eagles" },
|
|
40
|
+
]);
|
|
41
|
+
});
|
|
42
|
+
//# sourceMappingURL=multiSchemaHelpers.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multiSchemaHelpers.test.js","sourceRoot":"","sources":["../../src/helpers/multiSchemaHelpers.test.ts"],"names":[],"mappings":";;AAAA,mCAAsC;AAEtC,6DAAkE;AAElE,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;EAyBpB,CAAC;AAEH,IAAA,aAAI,EAAC,kEAAkE,EAAE,GAAG,EAAE;IAC5E,MAAM,aAAa,GAAG;QACpB,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE;QAChD,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE;KAC3C,CAAC;IAEF,MAAM,MAAM,GAAG,IAAA,+CAA0B,EAAC,aAAa,EAAE,aAAa,CAAC,CAAC;IAExE,IAAA,eAAM,EAAC,MAAM,CAAC,CAAC,OAAO,CAAC;QACrB,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,mBAAmB,EAAE;QACxD,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE;KACjD,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"repository": {
|
|
5
5
|
"url": "https://github.com/valtyr/prisma-kysely"
|
|
6
6
|
},
|
|
7
|
-
"version": "1.
|
|
7
|
+
"version": "1.6.0",
|
|
8
8
|
"main": "dist/generator.js",
|
|
9
9
|
"files": [
|
|
10
10
|
"dist"
|
|
@@ -15,9 +15,9 @@
|
|
|
15
15
|
},
|
|
16
16
|
"scripts": {
|
|
17
17
|
"start": "node dist/bin.js",
|
|
18
|
-
"dev": "
|
|
19
|
-
"build": "
|
|
20
|
-
"typecheck": "
|
|
18
|
+
"dev": "tspc --watch",
|
|
19
|
+
"build": "tspc",
|
|
20
|
+
"typecheck": "tspc --noemit",
|
|
21
21
|
"prepack": "yarn build",
|
|
22
22
|
"fix": "prettier --write \"**/*.{ts,tsx,md}\"",
|
|
23
23
|
"lint": "eslint ./src",
|
|
@@ -26,9 +26,10 @@
|
|
|
26
26
|
"edit": "code ."
|
|
27
27
|
},
|
|
28
28
|
"dependencies": {
|
|
29
|
+
"@mrleebo/prisma-ast": "^0.6.0",
|
|
29
30
|
"@prisma/generator-helper": "4.13.0",
|
|
30
31
|
"@prisma/internals": "4.13.0",
|
|
31
|
-
"typescript": "
|
|
32
|
+
"typescript": "^5.1.6",
|
|
32
33
|
"zod": "^3.21.0"
|
|
33
34
|
},
|
|
34
35
|
"devDependencies": {
|
|
@@ -40,18 +41,18 @@
|
|
|
40
41
|
"@types/prettier": "2.4.2",
|
|
41
42
|
"@typescript-eslint/eslint-plugin": "^5.54.0",
|
|
42
43
|
"@typescript-eslint/parser": "^5.54.0",
|
|
43
|
-
"@vitest/coverage-
|
|
44
|
+
"@vitest/coverage-v8": "^0.32.2",
|
|
44
45
|
"better-sqlite3": "^8.2.0",
|
|
45
46
|
"eslint": "^8.35.0",
|
|
46
47
|
"kysely": "^0.23.4",
|
|
47
48
|
"mysql2": "^3.2.0",
|
|
48
49
|
"pg": "^8.10.0",
|
|
49
50
|
"prettier": "^2.8.4",
|
|
50
|
-
"prisma": "4.
|
|
51
|
-
"
|
|
51
|
+
"prisma": "4.16.2",
|
|
52
|
+
"ts-patch": "^3.0.2",
|
|
52
53
|
"typescript-transform-paths": "^3.4.6",
|
|
53
54
|
"vite-tsconfig-paths": "^4.0.7",
|
|
54
|
-
"vitest": "^0.
|
|
55
|
+
"vitest": "^0.32.2"
|
|
55
56
|
},
|
|
56
57
|
"prettier": {
|
|
57
58
|
"importOrder": [
|