prisma_dart_generator 1.0.2 → 1.0.4

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.
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/bin/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,48 @@
1
+ #!/usr/bin/env node
2
+ import fs from "fs";
3
+ import path from "path";
4
+ import { getDMMF } from "@prisma/internals";
5
+ import Class from "./parts/class.js";
6
+ import Field from "./parts/field.js";
7
+ import Enum from "./parts/enum.js";
8
+ const [, , schemaPath, outputPath] = process.argv;
9
+ async function main() {
10
+ console.log("Starting the generator...");
11
+ if (!schemaPath || !fs.existsSync(schemaPath))
12
+ throw new Error("Prisma schema not found!");
13
+ if (!outputPath)
14
+ throw new Error("Output path is required as the second argument");
15
+ const schema = fs.readFileSync(schemaPath, "utf-8");
16
+ const dmmf = await getDMMF({ datamodel: schema });
17
+ const models = dmmf.datamodel.models;
18
+ const enums = dmmf.datamodel.enums;
19
+ let dartString = "";
20
+ for (const e of enums) {
21
+ console.log("Generating enum: ", e.name);
22
+ const dart = new Enum({
23
+ name: e.name,
24
+ values: e.values.map((value) => value.name),
25
+ });
26
+ dartString += dart.toString();
27
+ }
28
+ for (const model of models) {
29
+ console.log("Generating model: ", model.name);
30
+ const dart = new Class({
31
+ name: model.name,
32
+ fields: model.fields.map((field) => {
33
+ return new Field(field);
34
+ }),
35
+ });
36
+ dartString += dart.toString();
37
+ }
38
+ const text = `
39
+ //*** AUTO-GENERATED FILE - DO NOT MODIFY ***//
40
+
41
+ ${dartString}
42
+ `;
43
+ if (!fs.existsSync(outputPath))
44
+ fs.mkdirSync(outputPath, { recursive: true });
45
+ fs.writeFileSync(path.join(outputPath, "models.dart"), text, "utf-8");
46
+ }
47
+ main().catch(console.error);
48
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/bin/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,MAAM,kBAAkB,CAAC;AACrC,OAAO,KAAK,MAAM,kBAAkB,CAAC;AACrC,OAAO,IAAI,MAAM,iBAAiB,CAAC;AAEnC,MAAM,CAAC,EAAE,AAAD,EAAG,UAAU,EAAE,UAAU,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;AAElD,KAAK,UAAU,IAAI;IACjB,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;IACzC,IAAI,CAAC,UAAU,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;QAC3C,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAE9C,IAAI,CAAC,UAAU;QACb,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IAEpE,MAAM,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACpD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;IACrC,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;IAEnC,IAAI,UAAU,GAAG,EAAE,CAAC;IAEpB,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC;YACpB,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;SAC5C,CAAC,CAAC;QAEH,UAAU,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;IAChC,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC9C,MAAM,IAAI,GAAG,IAAI,KAAK,CAAC;YACrB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;gBACjC,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;YAC1B,CAAC,CAAC;SACH,CAAC,CAAC;QAEH,UAAU,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;IAChC,CAAC;IAED,MAAM,IAAI,GAAG;;;EAGb,UAAU;GACT,CAAC;IAEF,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9E,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AACxE,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type Field from "./field.js";
2
+ export declare const modelNameToDartName: (name: string) => string;
3
+ export default class Class {
4
+ name: string;
5
+ fields: Field[];
6
+ constructor({ name, fields }: {
7
+ name: string;
8
+ fields: Field[];
9
+ });
10
+ toString(): string;
11
+ private getFields;
12
+ private getConstructor;
13
+ private getFromJson;
14
+ private toJson;
15
+ private copyWith;
16
+ private toStr;
17
+ }
18
+ //# sourceMappingURL=class.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"class.d.ts","sourceRoot":"","sources":["../../../src/bin/parts/class.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AAGpC,eAAO,MAAM,mBAAmB,GAAI,MAAM,MAAM,KAAG,MAOlD,CAAC;AAEF,MAAM,CAAC,OAAO,OAAO,KAAK;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,KAAK,EAAE,CAAC;gBAEX,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,KAAK,EAAE,CAAA;KAAE;IAK/D,QAAQ,IAAI,MAAM;IAiBlB,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,WAAW;IAqDnB,OAAO,CAAC,MAAM;IA+Bd,OAAO,CAAC,QAAQ;IAgEhB,OAAO,CAAC,KAAK;CAiCd"}
@@ -0,0 +1,194 @@
1
+ import { enumToDartName } from "./enum.js";
2
+ import { snakeToCamel } from "./utils.js";
3
+ export const modelNameToDartName = (name) => {
4
+ const modelName = name
5
+ .split("_")
6
+ .map((part) => part.charAt(0).toUpperCase() + part.slice(1))
7
+ .join("");
8
+ return `${modelName}Model`;
9
+ };
10
+ export default class Class {
11
+ name;
12
+ fields;
13
+ constructor({ name, fields }) {
14
+ this.name = name;
15
+ this.fields = fields;
16
+ }
17
+ toString() {
18
+ return `
19
+ class ${modelNameToDartName(this.name)} {
20
+ ${this.getFields()}
21
+
22
+ ${this.getConstructor()}
23
+
24
+ ${this.getFromJson()}
25
+
26
+ ${this.toJson()}
27
+
28
+ ${this.copyWith()}
29
+
30
+ ${this.toStr()}
31
+ }`;
32
+ }
33
+ getFields() {
34
+ return " " + this.fields.map((field) => field.toString()).join("\n ");
35
+ }
36
+ getConstructor() {
37
+ return `
38
+ ${modelNameToDartName(this.name)}({
39
+ ${this.fields
40
+ .map((field) => {
41
+ return ` this.${snakeToCamel(field.field.name)}`;
42
+ })
43
+ .join(",\n")}
44
+ });`;
45
+ }
46
+ getFromJson() {
47
+ function parseFromJson(field) {
48
+ const prismaField = field.field;
49
+ let valueExpr = "";
50
+ // Number types
51
+ if (prismaField.type === "Int" || prismaField.type === "Float")
52
+ valueExpr = `num.tryParse("\${json["${prismaField.name}"]}")`;
53
+ // DateTime
54
+ else if (prismaField.type === "DateTime")
55
+ valueExpr = `json["${prismaField.name}"] != null ? DateTime.parse(json["${prismaField.name}"]) : null`;
56
+ // scalar types
57
+ else if (prismaField.kind === "scalar")
58
+ valueExpr = `json["${prismaField.name}"]`;
59
+ // Enum
60
+ else if (prismaField.kind === "enum")
61
+ valueExpr = `json["${prismaField.name}"] != null ? ${enumToDartName(prismaField.type.replace("[]", ""))}.fromText(json["${prismaField.name}"]) : null`;
62
+ // Relation (another class, object or list of objects)
63
+ else if (prismaField.relationName !== null)
64
+ if (prismaField.isList)
65
+ valueExpr = `json["${prismaField.name}"] != null
66
+ ? List.from(json["${prismaField.name}"]).map((d) => ${modelNameToDartName(prismaField.type.replace("[]", ""))}.fromJson(d)).toList()
67
+ : null`;
68
+ else
69
+ valueExpr = `json["${prismaField.name}"] != null
70
+ ? ${modelNameToDartName(prismaField.type.replace("[]", ""))}.fromJson(json['${prismaField.name}'])
71
+ : null`;
72
+ // Fallback: Just assign and type-cast
73
+ else
74
+ valueExpr = `json["${prismaField.name}"] as ${prismaField.type}`;
75
+ return valueExpr;
76
+ }
77
+ return `
78
+ factory ${modelNameToDartName(this.name)}.fromJson(Map<String, dynamic> json) => ${modelNameToDartName(this.name)}(
79
+ ${this.fields
80
+ .map((field) => {
81
+ return `${snakeToCamel(field.field.name)}: ${parseFromJson(field)},`;
82
+ })
83
+ .join("\n ")}
84
+ );`;
85
+ }
86
+ toJson() {
87
+ return `
88
+ Map<String, dynamic> toJson() => {
89
+ ${this.fields
90
+ .map((field) => {
91
+ const prismaField = field.field;
92
+ const name = snakeToCamel(prismaField.name);
93
+ let valueExpr = "";
94
+ // DateTime
95
+ if (prismaField.type === "DateTime")
96
+ valueExpr = `${name}?.toIso8601String()`;
97
+ // Scalar
98
+ else if (prismaField.kind === "scalar")
99
+ valueExpr = `${name}`;
100
+ // Enum
101
+ else if (prismaField.kind === "enum")
102
+ valueExpr = `${name}?.text`;
103
+ else if (prismaField.relationName !== null)
104
+ if (prismaField.isList)
105
+ valueExpr = `${snakeToCamel(prismaField.name)}?.map((d) => d.toJson()).toList()`;
106
+ else
107
+ valueExpr = `${name}?.toJson()`;
108
+ // Fallback: Just assign and type-cast
109
+ else
110
+ valueExpr = `${name}`;
111
+ return `if(${name} != null) '${prismaField.name}': ${valueExpr}`;
112
+ })
113
+ .join(",\n ")}
114
+ };`;
115
+ }
116
+ copyWith() {
117
+ function parseFromJson(field) {
118
+ const prismaField = field.field;
119
+ let valueExpr = "";
120
+ // Number types
121
+ if (prismaField.type === "Int" || prismaField.type === "Float")
122
+ valueExpr = `json["${prismaField.name}"] != null ? num.tryParse("\${json["${prismaField.name}"]}") : ${snakeToCamel(field.field.name)}`;
123
+ // JSON
124
+ else if (prismaField.type === "Json")
125
+ valueExpr = `json["${prismaField.name}"] != null ? Map<String, dynamic>.from(json["${prismaField.name}"]) : null`;
126
+ else if (prismaField.type === "Json?")
127
+ valueExpr = `json["${prismaField.name}"] != null ? Map<String, dynamic>.from(json["${prismaField.name}"]) : null`;
128
+ // DateTime
129
+ else if (prismaField.type === "DateTime")
130
+ valueExpr = `json["${prismaField.name}"] != null ? DateTime.parse(json["${prismaField.name}"]) : null`;
131
+ // scalar types
132
+ else if (prismaField.kind === "scalar")
133
+ valueExpr = `json["${prismaField.name}"] ?? ${snakeToCamel(field.field.name)}`;
134
+ // Enum
135
+ else if (prismaField.kind === "enum")
136
+ valueExpr = `json["${prismaField.name}"] != null ? ${enumToDartName(prismaField.type.replace("[]", ""))}.fromText(json["${prismaField.name}"]) : null`;
137
+ // Relation (another class, object or list of objects)
138
+ else if (prismaField.relationName !== null)
139
+ if (prismaField.isList)
140
+ valueExpr = `json["${prismaField.name}"] != null
141
+ ? List.from(json["${prismaField.name}"]).map((d) => ${modelNameToDartName(prismaField.type.replace("[]", ""))}.fromJson(d)).toList()
142
+ : ${snakeToCamel(field.field.name)}`;
143
+ else
144
+ valueExpr = `json["${prismaField.name}"] != null
145
+ ? ${modelNameToDartName(prismaField.type.replace("[]", ""))}.fromJson(json['${prismaField.name}'])
146
+ : ${snakeToCamel(field.field.name)}`;
147
+ // Fallback: Just assign and type-cast
148
+ else
149
+ valueExpr = `json["${prismaField.name}"] as ${prismaField.type}`;
150
+ return valueExpr;
151
+ }
152
+ return `
153
+ ${modelNameToDartName(this.name)} copyWith(Map<String, dynamic> json) => ${modelNameToDartName(this.name)}(
154
+ ${this.fields
155
+ .map((field) => {
156
+ return `${snakeToCamel(field.field.name)}: ${parseFromJson(field)}`;
157
+ })
158
+ .join(",\n ")}
159
+ );`;
160
+ }
161
+ toStr() {
162
+ return `
163
+ @override
164
+ String toString() => """
165
+ ${modelNameToDartName(this.name)}(
166
+ ${this.fields
167
+ .map((field) => {
168
+ const prismaField = field.field;
169
+ const name = snakeToCamel(prismaField.name);
170
+ let valueExpr = "";
171
+ // DateTime
172
+ if (prismaField.type === "DateTime")
173
+ valueExpr = `${name}?.toIso8601String()`;
174
+ // Scalar
175
+ else if (prismaField.kind === "scalar")
176
+ valueExpr = `${name}`;
177
+ // Enum
178
+ else if (prismaField.kind === "enum")
179
+ valueExpr = `${name}?.text`;
180
+ else if (prismaField.relationName !== null)
181
+ if (prismaField.isList)
182
+ valueExpr = `${snakeToCamel(prismaField.name)}?.map((d) => d.toJson()).toList()`;
183
+ else
184
+ valueExpr = `${name}?.toJson()`;
185
+ // Fallback: Just assign and type-cast
186
+ else
187
+ valueExpr = `${name}`;
188
+ return `'${prismaField.name}': \${${valueExpr}}`;
189
+ })
190
+ .join(",\n ")}
191
+ ) """;`;
192
+ }
193
+ }
194
+ //# sourceMappingURL=class.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"class.js","sourceRoot":"","sources":["../../../src/bin/parts/class.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export declare const enumToDartName: (name: string) => string;
2
+ export default class Enum {
3
+ name: string;
4
+ values: string[];
5
+ constructor({ name, values }: {
6
+ name: string;
7
+ values: string[];
8
+ });
9
+ toString(): string;
10
+ }
11
+ //# sourceMappingURL=enum.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enum.d.ts","sourceRoot":"","sources":["../../../src/bin/parts/enum.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,cAAc,GAAI,MAAM,MAAM,KAAG,MAO7C,CAAC;AAEF,MAAM,CAAC,OAAO,OAAO,IAAI;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,EAAE,CAAC;gBAEZ,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE;IAKhE,QAAQ,IAAI,MAAM;CA8BnB"}
@@ -0,0 +1,45 @@
1
+ import { snakeToCamel } from "./utils.js";
2
+ export const enumToDartName = (name) => {
3
+ const modelName = name
4
+ .split("_")
5
+ .map((part) => part.charAt(0).toUpperCase() + part.slice(1))
6
+ .join("");
7
+ return `${modelName}Enum`;
8
+ };
9
+ export default class Enum {
10
+ name;
11
+ values;
12
+ constructor({ name, values }) {
13
+ this.name = name;
14
+ this.values = values;
15
+ }
16
+ toString() {
17
+ return `
18
+ enum ${enumToDartName(this.name)} {
19
+
20
+ ${this.values
21
+ .map((value) => ` ${snakeToCamel(value)}("${value}")`)
22
+ .join(",\n")};
23
+
24
+ final String _text;
25
+
26
+ const ${enumToDartName(this.name)}(String text):_text = text;
27
+
28
+ static ${enumToDartName(this.name)}? fromText(String? value) {
29
+ if(value == null) return null;
30
+ try {
31
+ return ${enumToDartName(this.name)}.values.firstWhere((v) => v._text == value);
32
+ } catch (e) {
33
+ return null;
34
+ }
35
+ }
36
+
37
+ String get text => _text;
38
+
39
+ @override
40
+ String toString() => _text;
41
+ }
42
+ `;
43
+ }
44
+ }
45
+ //# sourceMappingURL=enum.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enum.js","sourceRoot":"","sources":["../../../src/bin/parts/enum.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,IAAY,EAAU,EAAE;IACrD,MAAM,SAAS,GAAG,IAAI;SACnB,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SAC3D,IAAI,CAAC,EAAE,CAAC,CAAC;IAEZ,OAAO,GAAG,SAAS,MAAM,CAAC;AAC5B,CAAC,CAAC;AAEF,MAAM,CAAC,OAAO,OAAO,IAAI;IAChB,IAAI,CAAS;IACb,MAAM,CAAW;IAExB,YAAY,EAAE,IAAI,EAAE,MAAM,EAAsC;QAC9D,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,QAAQ;QACN,OAAO;OACJ,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;;IAE5B,IAAI,CAAC,MAAM;aACV,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,YAAY,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC;aACtD,IAAI,CAAC,KAAK,CAAC;;;;UAIN,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;;WAExB,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;;;eAGrB,cAAc,CACrB,IAAI,CAAC,IAAI,CACV;;;;;;;;;;;CAWN,CAAC;IACA,CAAC;CACF"}
@@ -0,0 +1,7 @@
1
+ import type { Field as PrismaField } from "@prisma/dmmf";
2
+ export default class Field {
3
+ field: PrismaField;
4
+ constructor(field: PrismaField);
5
+ toString(): string;
6
+ }
7
+ //# sourceMappingURL=field.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field.d.ts","sourceRoot":"","sources":["../../../src/bin/parts/field.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,IAAI,WAAW,EAAE,MAAM,cAAc,CAAC;AAMzD,MAAM,CAAC,OAAO,OAAO,KAAK;IACxB,KAAK,EAAE,WAAW,CAAC;gBAEP,KAAK,EAAE,WAAW;IAI9B,QAAQ,IAAI,MAAM;CAiBnB"}
@@ -0,0 +1,57 @@
1
+ import { modelNameToDartName } from "./class.js";
2
+ import { enumToDartName } from "./enum.js";
3
+ import { snakeToCamel } from "./utils.js";
4
+ export default class Field {
5
+ field;
6
+ constructor(field) {
7
+ this.field = field;
8
+ }
9
+ toString() {
10
+ const type = getDartTypeFromPrismaType(this.field.type);
11
+ const name = snakeToCamel(this.field.name);
12
+ if (this.field.kind === "scalar")
13
+ return `final ${type}? ${name};`;
14
+ else if (this.field.isList)
15
+ if (this.field.relationName !== null)
16
+ return `final List<${modelNameToDartName(type.replace("[]", ""))}>? ${name};`;
17
+ else
18
+ return `final List<${type.replace("[]", "")}>? ${name};`;
19
+ else if (this.field.kind === "enum")
20
+ return `final ${enumToDartName(type.replace("[]", ""))}? ${name};`;
21
+ else if (this.field.relationName !== null)
22
+ return `final ${modelNameToDartName(type.replace("[]", ""))}? ${name};`;
23
+ else
24
+ return `final ${type}? ${name};`;
25
+ }
26
+ }
27
+ const getDartTypeFromPrismaType = (type) => {
28
+ switch (type) {
29
+ case "String":
30
+ return "String";
31
+ case "String?":
32
+ return "String?";
33
+ case "Int":
34
+ return "num";
35
+ case "Int?":
36
+ return "num?";
37
+ case "Float":
38
+ return "num";
39
+ case "Float?":
40
+ return "num?";
41
+ case "Boolean":
42
+ return "bool";
43
+ case "Boolean?":
44
+ return "bool?";
45
+ case "DateTime":
46
+ return "DateTime";
47
+ case "DateTime?":
48
+ return "DateTime?";
49
+ case "Json":
50
+ return "Map<String, dynamic>";
51
+ case "Json?":
52
+ return "Map<String, dynamic>?";
53
+ default:
54
+ return type;
55
+ }
56
+ };
57
+ //# sourceMappingURL=field.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field.js","sourceRoot":"","sources":["../../../src/bin/parts/field.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,MAAM,CAAC,OAAO,OAAO,KAAK;IACxB,KAAK,CAAc;IAEnB,YAAY,KAAkB;QAC5B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,QAAQ;QACN,MAAM,IAAI,GAAG,yBAAyB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACxD,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAE3C,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,SAAS,IAAI,KAAK,IAAI,GAAG,CAAC;aAC9D,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM;YACxB,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,KAAK,IAAI;gBAClC,OAAO,cAAc,mBAAmB,CACtC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CACvB,MAAM,IAAI,GAAG,CAAC;;gBACZ,OAAO,cAAc,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,IAAI,GAAG,CAAC;aAC3D,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM;YACjC,OAAO,SAAS,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,GAAG,CAAC;aAChE,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,KAAK,IAAI;YACvC,OAAO,SAAS,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,GAAG,CAAC;;YACrE,OAAO,SAAS,IAAI,KAAK,IAAI,GAAG,CAAC;IACxC,CAAC;CACF;AAED,MAAM,yBAAyB,GAAG,CAAC,IAAY,EAAU,EAAE;IACzD,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,QAAQ;YACX,OAAO,QAAQ,CAAC;QAClB,KAAK,SAAS;YACZ,OAAO,SAAS,CAAC;QACnB,KAAK,KAAK;YACR,OAAO,KAAK,CAAC;QACf,KAAK,MAAM;YACT,OAAO,MAAM,CAAC;QAChB,KAAK,OAAO;YACV,OAAO,KAAK,CAAC;QACf,KAAK,QAAQ;YACX,OAAO,MAAM,CAAC;QAChB,KAAK,SAAS;YACZ,OAAO,MAAM,CAAC;QAChB,KAAK,UAAU;YACb,OAAO,OAAO,CAAC;QACjB,KAAK,UAAU;YACb,OAAO,UAAU,CAAC;QACpB,KAAK,WAAW;YACd,OAAO,WAAW,CAAC;QACrB,KAAK,MAAM;YACT,OAAO,sBAAsB,CAAC;QAChC,KAAK,OAAO;YACV,OAAO,uBAAuB,CAAC;QACjC;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare const capitalize: (text: string) => string;
2
+ export declare const snakeToCamel: (text: string) => string;
3
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/bin/parts/utils.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,GAAI,MAAM,MAAM,WAC+B,CAAC;AAEvE,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,WAOxC,CAAC"}
@@ -0,0 +1,10 @@
1
+ export const capitalize = (text) => text.substring(0, 1).toUpperCase() + text.substring(1).toLowerCase();
2
+ export const snakeToCamel = (text) => {
3
+ if (!text.includes("_"))
4
+ return text.toLowerCase();
5
+ return text
6
+ .split("_")
7
+ .map((t, i) => (i == 0 ? t.toLowerCase() : capitalize(t)))
8
+ .join("");
9
+ };
10
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/bin/parts/utils.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,EAAE,CACzC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;AAEvE,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,IAAY,EAAE,EAAE;IAC3C,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;IAEnD,OAAO,IAAI;SACR,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;SACzD,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,18 +1,22 @@
1
1
  {
2
2
  "name": "prisma_dart_generator",
3
- "version": "1.0.2",
4
- "module": "index.ts",
3
+ "version": "1.0.4",
5
4
  "type": "module",
6
5
  "private": false,
7
- "token": "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",
8
6
  "bin": {
9
- "prisma_dart": "bun ./bin/index.ts ./test/prisma/schema.prisma ./test/dart/data/"
7
+ "prisma_dart": "dist/bin/index.js"
8
+ },
9
+ "files": [
10
+ "dist"
11
+ ],
12
+ "scripts": {
13
+ "prisma": "bun ./bin/index.ts ./test/prisma/schema.prisma ./test/dart/data/"
10
14
  },
11
15
  "devDependencies": {
12
16
  "@types/bun": "latest"
13
17
  },
14
18
  "peerDependencies": {
15
- "typescript": "^5"
19
+ "typescript": "^5.9.3"
16
20
  },
17
21
  "dependencies": {
18
22
  "@prisma/internals": "^7.2.0"
@@ -1,111 +0,0 @@
1
- ---
2
- description: Use Bun instead of Node.js, npm, pnpm, or vite.
3
- globs: "*.ts, *.tsx, *.html, *.css, *.js, *.jsx, package.json"
4
- alwaysApply: false
5
- ---
6
-
7
- Default to using Bun instead of Node.js.
8
-
9
- - Use `bun <file>` instead of `node <file>` or `ts-node <file>`
10
- - Use `bun test` instead of `jest` or `vitest`
11
- - Use `bun build <file.html|file.ts|file.css>` instead of `webpack` or `esbuild`
12
- - Use `bun install` instead of `npm install` or `yarn install` or `pnpm install`
13
- - Use `bun run <script>` instead of `npm run <script>` or `yarn run <script>` or `pnpm run <script>`
14
- - Use `bunx <package> <command>` instead of `npx <package> <command>`
15
- - Bun automatically loads .env, so don't use dotenv.
16
-
17
- ## APIs
18
-
19
- - `Bun.serve()` supports WebSockets, HTTPS, and routes. Don't use `express`.
20
- - `bun:sqlite` for SQLite. Don't use `better-sqlite3`.
21
- - `Bun.redis` for Redis. Don't use `ioredis`.
22
- - `Bun.sql` for Postgres. Don't use `pg` or `postgres.js`.
23
- - `WebSocket` is built-in. Don't use `ws`.
24
- - Prefer `Bun.file` over `node:fs`'s readFile/writeFile
25
- - Bun.$`ls` instead of execa.
26
-
27
- ## Testing
28
-
29
- Use `bun test` to run tests.
30
-
31
- ```ts#index.test.ts
32
- import { test, expect } from "bun:test";
33
-
34
- test("hello world", () => {
35
- expect(1).toBe(1);
36
- });
37
- ```
38
-
39
- ## Frontend
40
-
41
- Use HTML imports with `Bun.serve()`. Don't use `vite`. HTML imports fully support React, CSS, Tailwind.
42
-
43
- Server:
44
-
45
- ```ts#index.ts
46
- import index from "./index.html"
47
-
48
- Bun.serve({
49
- routes: {
50
- "/": index,
51
- "/api/users/:id": {
52
- GET: (req) => {
53
- return new Response(JSON.stringify({ id: req.params.id }));
54
- },
55
- },
56
- },
57
- // optional websocket support
58
- websocket: {
59
- open: (ws) => {
60
- ws.send("Hello, world!");
61
- },
62
- message: (ws, message) => {
63
- ws.send(message);
64
- },
65
- close: (ws) => {
66
- // handle close
67
- }
68
- },
69
- development: {
70
- hmr: true,
71
- console: true,
72
- }
73
- })
74
- ```
75
-
76
- HTML files can import .tsx, .jsx or .js files directly and Bun's bundler will transpile & bundle automatically. `<link>` tags can point to stylesheets and Bun's CSS bundler will bundle.
77
-
78
- ```html#index.html
79
- <html>
80
- <body>
81
- <h1>Hello, world!</h1>
82
- <script type="module" src="./frontend.tsx"></script>
83
- </body>
84
- </html>
85
- ```
86
-
87
- With the following `frontend.tsx`:
88
-
89
- ```tsx#frontend.tsx
90
- import React from "react";
91
- import { createRoot } from "react-dom/client";
92
-
93
- // import .css files directly and it works
94
- import './index.css';
95
-
96
- const root = createRoot(document.body);
97
-
98
- export default function Frontend() {
99
- return <h1>Hello, world!</h1>;
100
- }
101
-
102
- root.render(<Frontend />);
103
- ```
104
-
105
- Then, run index.ts
106
-
107
- ```sh
108
- bun --hot ./index.ts
109
- ```
110
-
111
- For more information, read the Bun API docs in `node_modules/bun-types/docs/**.mdx`.
package/README.md DELETED
@@ -1,15 +0,0 @@
1
- # prisma_dart_generator
2
-
3
- To install dependencies:
4
-
5
- ```bash
6
- bun install
7
- ```
8
-
9
- To run:
10
-
11
- ```bash
12
- bun run index.ts
13
- ```
14
-
15
- This project was created using `bun init` in bun v1.3.5. [Bun](https://bun.com) is a fast all-in-one JavaScript runtime.