Skip to content

Commit b1dc4df

Browse files
committed
tests and config
1 parent 8f138e8 commit b1dc4df

File tree

14 files changed

+988
-602
lines changed

14 files changed

+988
-602
lines changed

package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
"build": "turbo run build",
1010
"ci:publish": "pnpm publish --no-git-checks -r",
1111
"dev": "turbo run dev --parallel --no-cache",
12-
"prepublish": "pnpm build",
1312
"release": "pnpm changeset && pnpm changeset version",
1413
"test": "turbo run test"
1514
},

packages/prisma-client-types-generator/CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
# prisma-client-types-generator
22

3+
## 0.1.0
4+
5+
### Minor Changes
6+
7+
- add test and config
8+
39
## 0.0.3
410

511
### Patch Changes

packages/prisma-client-types-generator/package.json

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "prisma-client-types-generator",
3-
"version": "0.0.3",
3+
"version": "0.1.0",
44
"description": "Generate safe types for the browser and other uses",
55
"main": "./dist/index.js",
66
"module": "./dist/index.mjs",
@@ -13,12 +13,13 @@
1313
"dev": "pnpm build --watch",
1414
"lint": "eslint src --fix",
1515
"clean": "rm -rf .turbo && rm -rf node_modules && rm -rf dist",
16-
"prepublish": "pnpm build",
17-
"test": "pnpm prisma generate --schema test/schemas/full.prisma",
16+
"prepublish": "pnpm test && pnpm build",
17+
"test": "sh ./test/test.sh",
1818
"release": "pnpm changeset && pnpm changeset version"
1919
},
2020
"files": [
21-
"/dist"
21+
"/dist",
22+
"test/schemas/full.snapshot.ts"
2223
],
2324
"keywords": [
2425
"prisma",
@@ -54,6 +55,7 @@
5455
"jest": "^29.7.0",
5556
"prisma": "^5.22.0",
5657
"ts-node": "^10.9.2",
58+
"tsd": "^0.31.2",
5759
"tsup": "^8.3.5",
5860
"tsx": "^4.19.2",
5961
"typescript": "^5.7.2"
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import { PrismaClientTypesGeneratorConfig } from "./onGenerate";
2+
3+
let aliasesMap: Record<string, string> | undefined;
4+
5+
export const formatEntityName = (
6+
rawEntityName: string,
7+
{ aliases, pascalCase }: PrismaClientTypesGeneratorConfig
8+
) => {
9+
if (aliases) {
10+
aliasesMap = aliasesMap || JSON.parse(aliases);
11+
if (rawEntityName in aliasesMap) {
12+
return aliasesMap[rawEntityName];
13+
}
14+
}
15+
16+
if (pascalCase) {
17+
return rawEntityName
18+
.split("_")
19+
.map((s) => s[0].toUpperCase() + s.slice(1))
20+
.join("");
21+
}
22+
23+
return rawEntityName;
24+
};

packages/prisma-client-types-generator/src/generateEnum.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
import { DMMF } from "@prisma/generator-helper";
2-
import { getPascalName } from "./getPascalName";
2+
import { formatEntityName } from "./formatEntityName";
3+
import { PrismaClientTypesGeneratorConfig } from "./onGenerate";
34

45
export const generateEnum = (
56
prismaEnum: DMMF.DatamodelEnum,
6-
aliases?: Record<string, string>
7+
config: PrismaClientTypesGeneratorConfig
78
) => {
89
let out = "";
910

10-
const name = getPascalName(prismaEnum.name, aliases);
11+
const name = formatEntityName(prismaEnum.name, config);
1112

1213
out += `export const ${name} = {\n`;
1314

packages/prisma-client-types-generator/src/generateModel.ts

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { DMMF } from "@prisma/generator-helper";
2-
import { getPascalName } from "./getPascalName";
2+
import { formatEntityName } from "./formatEntityName";
33
import { prismaTypeMap } from "./prismaTypeMap";
4+
import { PrismaClientTypesGeneratorConfig } from "./onGenerate";
45

56
const formatNull = (field: DMMF.Field) => {
67
return !field.isRequired ? " | null" : "";
@@ -17,11 +18,11 @@ const isBaseField = (field: DMMF.Field, foreignKeysMap: Record<string, 1>) => {
1718

1819
export const generateModel = (
1920
model: DMMF.Model,
20-
aliases?: Record<string, string>
21+
config: PrismaClientTypesGeneratorConfig
2122
) => {
2223
let out = "";
2324

24-
const modelTypeName = getPascalName(model.name, aliases); // TODO: use also model.dbName with alias?
25+
const modelTypeName = formatEntityName(model.name, config); // TODO: use also model.dbName with alias?
2526

2627
// console.log(model.fields);
2728

@@ -66,9 +67,10 @@ export const generateModel = (
6667
}
6768
switch (field.kind) {
6869
case "enum":
69-
out += ` ${field.name}: ${getPascalName(field.type)}${formatNull(
70-
field
71-
)}\n`;
70+
out += ` ${field.name}: ${formatEntityName(
71+
field.type,
72+
config
73+
)}${formatNull(field)}\n`;
7274
break;
7375
case "scalar":
7476
case "unsupported": // Untested
@@ -90,7 +92,7 @@ export const generateModel = (
9092
for (const field of model.fields) {
9193
switch (field.kind) {
9294
case "object":
93-
out += ` ${field.name}: ${field.type}${
95+
out += ` ${field.name}: ${formatEntityName(field.type, config)}${
9496
field.isList ? "[]" : ""
9597
}${formatNull(field)}\n`;
9698
break;

packages/prisma-client-types-generator/src/generateTypes.ts

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,23 @@
11
import { DMMF } from "@prisma/generator-helper";
22
import { generateEnum } from "./generateEnum";
33
import { generateModel } from "./generateModel";
4+
import { PrismaClientTypesGeneratorConfig } from "./onGenerate";
45

56
export const generateTypes = (
67
datamodel: DMMF.Datamodel,
7-
{
8-
aliases,
9-
}: {
10-
aliases?: Record<string, string>;
11-
}
8+
config: PrismaClientTypesGeneratorConfig
129
) => {
1310
let file = `// This file was generated by a custom prisma generator, do not edit manually.\n`;
1411

1512
const models = datamodel.models;
1613

1714
for (const model of models) {
18-
file += generateModel(model, aliases);
15+
file += generateModel(model, config);
1916
}
2017

2118
const enums = datamodel.enums;
2219
for (const enumItem of enums) {
23-
file += generateEnum(enumItem, aliases);
20+
file += generateEnum(enumItem, config);
2421
}
2522

2623
return file;

packages/prisma-client-types-generator/src/getPascalName.ts

Lines changed: 0 additions & 15 deletions
This file was deleted.

packages/prisma-client-types-generator/src/onGenerate.ts

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,12 @@
1-
import type { GeneratorOptions } from "@prisma/generator-helper";
1+
import type {
2+
GeneratorConfig,
3+
GeneratorOptions,
4+
} from "@prisma/generator-helper";
25
import { generateTypes } from "./generateTypes";
36
import fs from "node:fs";
47
import path from "node:path";
58

69
export type PrismaClientTypesGeneratorConfig = {
7-
/**
8-
* (./ -> relative to schema, or an importable path to require() it)
9-
*
10-
* @default ./prismaTypes.ts
11-
*/
12-
output?: string;
13-
1410
/**
1511
*
1612
*
@@ -23,6 +19,9 @@ export type PrismaClientTypesGeneratorConfig = {
2319
* @default undefined
2420
*/
2521
aliases?: string;
22+
23+
// Whether to use PascalCase for the generated types.
24+
pascalCase?: boolean;
2625
};
2726

2827
/** Runs the generator with the given options. */
@@ -32,12 +31,10 @@ export async function onGenerate(options: GeneratorOptions) {
3231
throw new Error("No output file specified");
3332
}
3433

35-
const aliases =
36-
typeof options.generator.config.aliases === "string"
37-
? JSON.parse(options.generator.config.aliases)
38-
: undefined;
39-
40-
let output = generateTypes(options.dmmf.datamodel, { aliases });
34+
let output = generateTypes(
35+
options.dmmf.datamodel,
36+
options.generator.config as PrismaClientTypesGeneratorConfig
37+
);
4138

4239
const outputPath = path.resolve(outputFile.value);
4340
fs.mkdirSync(path.dirname(outputPath), { recursive: true });

packages/prisma-client-types-generator/test/schemas/prismaTypes.ts renamed to packages/prisma-client-types-generator/test/schemas/full.generated.ts

File renamed without changes.

0 commit comments

Comments
 (0)