@autobe/compiler 0.3.24 → 0.4.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.
@@ -1,9 +1,8 @@
1
- import { AutoBeOpenApi, IAutoBeCompiler, IAutoBePrismaCompilerProps, IAutoBePrismaCompilerResult, IAutoBeTypeScriptCompilerProps, IAutoBeTypeScriptCompilerResult } from "@autobe/interface";
1
+ import { AutoBeOpenApi, IAutoBeCompiler, IAutoBePrismaCompiler, IAutoBeTypeScriptCompilerProps, IAutoBeTypeScriptCompilerResult } from "@autobe/interface";
2
2
  export declare class AutoBeCompiler implements IAutoBeCompiler {
3
- private readonly prisma_;
4
- private readonly interface_;
5
- private readonly typescript_;
6
- prisma(props: IAutoBePrismaCompilerProps): Promise<IAutoBePrismaCompilerResult>;
3
+ readonly prisma: IAutoBePrismaCompiler;
7
4
  interface(document: AutoBeOpenApi.IDocument): Promise<Record<string, string>>;
8
5
  typescript(props: IAutoBeTypeScriptCompilerProps): Promise<IAutoBeTypeScriptCompilerResult>;
6
+ private readonly interface_compiler_;
7
+ private readonly typescript_compiler_;
9
8
  }
@@ -6,18 +6,15 @@ const AutoBePrismaCompiler_1 = require("./AutoBePrismaCompiler");
6
6
  const AutoBeTypeScriptCompiler_1 = require("./AutoBeTypeScriptCompiler");
7
7
  class AutoBeCompiler {
8
8
  constructor() {
9
- this.prisma_ = new AutoBePrismaCompiler_1.AutoBePrismaCompiler();
10
- this.interface_ = new AutoBeInterfaceCompiler_1.AutoBeInterfaceCompiler();
11
- this.typescript_ = new AutoBeTypeScriptCompiler_1.AutoBeTypeScriptCompiler();
12
- }
13
- prisma(props) {
14
- return this.prisma_.compile(props);
9
+ this.prisma = new AutoBePrismaCompiler_1.AutoBePrismaCompiler();
10
+ this.interface_compiler_ = new AutoBeInterfaceCompiler_1.AutoBeInterfaceCompiler();
11
+ this.typescript_compiler_ = new AutoBeTypeScriptCompiler_1.AutoBeTypeScriptCompiler();
15
12
  }
16
13
  interface(document) {
17
- return this.interface_.compile(document);
14
+ return this.interface_compiler_.compile(document);
18
15
  }
19
16
  typescript(props) {
20
- return this.typescript_.compile(props);
17
+ return this.typescript_compiler_.compile(props);
21
18
  }
22
19
  }
23
20
  exports.AutoBeCompiler = AutoBeCompiler;
@@ -1 +1 @@
1
- {"version":3,"file":"AutoBeCompiler.js","sourceRoot":"","sources":["../src/AutoBeCompiler.ts"],"names":[],"mappings":";;;AAYA,uEAAoE;AACpE,iEAA8D;AAC9D,yEAAsE;AAEtE,MAAa,cAAc;IAA3B;QACmB,YAAO,GAA0B,IAAI,2CAAoB,EAAE,CAAC;QAC5D,eAAU,GACzB,IAAI,iDAAuB,EAAE,CAAC;QACf,gBAAW,GAC1B,IAAI,mDAAwB,EAAE,CAAC;IAmBnC,CAAC;IAjBQ,MAAM,CACX,KAAiC;QAEjC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IAEM,SAAS,CACd,QAAiC;QAEjC,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC3C,CAAC;IAEM,UAAU,CACf,KAAqC;QAErC,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC;CACF;AAxBD,wCAwBC"}
1
+ {"version":3,"file":"AutoBeCompiler.js","sourceRoot":"","sources":["../src/AutoBeCompiler.ts"],"names":[],"mappings":";;;AAUA,uEAAoE;AACpE,iEAA8D;AAC9D,yEAAsE;AAEtE,MAAa,cAAc;IAA3B;QACkB,WAAM,GAA0B,IAAI,2CAAoB,EAAE,CAAC;QAc1D,wBAAmB,GAClC,IAAI,iDAAuB,EAAE,CAAC;QAEf,yBAAoB,GACnC,IAAI,mDAAwB,EAAE,CAAC;IACnC,CAAC;IAjBQ,SAAS,CACd,QAAiC;QAEjC,OAAO,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACpD,CAAC;IAEM,UAAU,CACf,KAAqC;QAErC,OAAO,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAClD,CAAC;CAOF;AApBD,wCAoBC"}
@@ -1,4 +1,6 @@
1
- import { IAutoBePrismaCompiler, IAutoBePrismaCompilerProps, IAutoBePrismaCompilerResult } from "@autobe/interface";
1
+ import { AutoBePrisma, IAutoBePrismaCompiler, IAutoBePrismaCompilerProps, IAutoBePrismaCompilerResult, IAutoBePrismaValidation } from "@autobe/interface";
2
2
  export declare class AutoBePrismaCompiler implements IAutoBePrismaCompiler {
3
3
  compile(props: IAutoBePrismaCompilerProps): Promise<IAutoBePrismaCompilerResult>;
4
+ validate(app: AutoBePrisma.IApplication): Promise<IAutoBePrismaValidation>;
5
+ write(app: AutoBePrisma.IApplication): Promise<Record<string, string>>;
4
6
  }
@@ -11,6 +11,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.AutoBePrismaCompiler = void 0;
13
13
  const embed_prisma_1 = require("embed-prisma");
14
+ const validatePrismaApplication_1 = require("./prisma/validatePrismaApplication");
15
+ const writePrismaApplication_1 = require("./prisma/writePrismaApplication");
14
16
  class AutoBePrismaCompiler {
15
17
  compile(props) {
16
18
  return __awaiter(this, void 0, void 0, function* () {
@@ -18,6 +20,16 @@ class AutoBePrismaCompiler {
18
20
  return compiler.compile(props.files);
19
21
  });
20
22
  }
23
+ validate(app) {
24
+ return __awaiter(this, void 0, void 0, function* () {
25
+ return (0, validatePrismaApplication_1.validatePrismaApplication)(app);
26
+ });
27
+ }
28
+ write(app) {
29
+ return __awaiter(this, void 0, void 0, function* () {
30
+ return (0, writePrismaApplication_1.writePrismaApplication)(app);
31
+ });
32
+ }
21
33
  }
22
34
  exports.AutoBePrismaCompiler = AutoBePrismaCompiler;
23
35
  //# sourceMappingURL=AutoBePrismaCompiler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AutoBePrismaCompiler.js","sourceRoot":"","sources":["../src/AutoBePrismaCompiler.ts"],"names":[],"mappings":";;;;;;;;;;;;AAKA,+CAA2C;AAE3C,MAAa,oBAAoB;IAClB,OAAO,CAClB,KAAiC;;YAEjC,MAAM,QAAQ,GAAgB,IAAI,0BAAW,EAAE,CAAC;YAChD,OAAO,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACvC,CAAC;KAAA;CACF;AAPD,oDAOC"}
1
+ {"version":3,"file":"AutoBePrismaCompiler.js","sourceRoot":"","sources":["../src/AutoBePrismaCompiler.ts"],"names":[],"mappings":";;;;;;;;;;;;AAOA,+CAA2C;AAE3C,kFAA+E;AAC/E,4EAAyE;AAEzE,MAAa,oBAAoB;IAClB,OAAO,CAClB,KAAiC;;YAEjC,MAAM,QAAQ,GAAgB,IAAI,0BAAW,EAAE,CAAC;YAChD,OAAO,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACvC,CAAC;KAAA;IAEY,QAAQ,CACnB,GAA8B;;YAE9B,OAAO,IAAA,qDAAyB,EAAC,GAAG,CAAC,CAAC;QACxC,CAAC;KAAA;IAEY,KAAK,CAChB,GAA8B;;YAE9B,OAAO,IAAA,+CAAsB,EAAC,GAAG,CAAC,CAAC;QACrC,CAAC;KAAA;CACF;AAnBD,oDAmBC"}
@@ -0,0 +1,2 @@
1
+ import { AutoBePrisma, IAutoBePrismaValidation } from "@autobe/interface";
2
+ export declare function validatePrismaApplication(application: AutoBePrisma.IApplication): IAutoBePrismaValidation;
@@ -0,0 +1,252 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validatePrismaApplication = validatePrismaApplication;
4
+ const tstl_1 = require("tstl");
5
+ const MapUtil_1 = require("../utils/MapUtil");
6
+ function validatePrismaApplication(application) {
7
+ const dict = new Map(application.files
8
+ .map((file) => file.models)
9
+ .flat()
10
+ .map((model) => [model.name, model]));
11
+ const errors = [
12
+ ...validateDuplicatedFiles(application),
13
+ ...validateDuplicatedModels(application),
14
+ ...application.files
15
+ .map((file, fi) => file.models.map((model, mi) => {
16
+ const accessor = `application.files[${fi}].models[${mi}]`;
17
+ return [
18
+ ...validateDuplicatedFields(model, accessor),
19
+ ...validateDuplicatedIndexes(model, accessor),
20
+ ...validateIndexes(model, accessor),
21
+ ...validateReferences(model, accessor, dict),
22
+ ];
23
+ }))
24
+ .flat(2),
25
+ ];
26
+ return errors.length === 0
27
+ ? { success: true, data: application }
28
+ : { success: false, data: application, errors };
29
+ }
30
+ /* -----------------------------------------------------------
31
+ DUPLICATES
32
+ ----------------------------------------------------------- */
33
+ function validateDuplicatedFiles(app) {
34
+ const group = new Map();
35
+ app.files.forEach((file, fileIndex) => {
36
+ const container = { file, index: fileIndex };
37
+ MapUtil_1.MapUtil.take(group, file.filename, () => []).push(container);
38
+ });
39
+ const errors = [];
40
+ for (const array of group.values())
41
+ if (array.length !== 1)
42
+ array.forEach((container, i) => {
43
+ errors.push({
44
+ path: `application.files[${container.index}]`,
45
+ table: null,
46
+ field: null,
47
+ message: [
48
+ `File ${container.file.filename} is duplicated.`,
49
+ "",
50
+ "Accessors of the other duplicated files are:",
51
+ "",
52
+ ...array
53
+ .filter((_oppo, j) => i !== j)
54
+ .map((oppo) => `- application.files[${oppo.index}]`),
55
+ ].join("\n"),
56
+ });
57
+ });
58
+ return errors;
59
+ }
60
+ function validateDuplicatedModels(app) {
61
+ const modelContainers = new Map();
62
+ app.files.forEach((file, fileIndex) => {
63
+ file.models.forEach((model, modelIndex) => {
64
+ const container = {
65
+ file,
66
+ model,
67
+ fileIndex,
68
+ modelIndex,
69
+ };
70
+ MapUtil_1.MapUtil.take(modelContainers, model.name, () => []).push(container);
71
+ });
72
+ });
73
+ const errors = [];
74
+ for (const array of modelContainers.values())
75
+ if (array.length !== 1)
76
+ array.forEach((container, i) => {
77
+ errors.push({
78
+ path: `application.files[${container.fileIndex}].models[${container.modelIndex}]`,
79
+ table: container.model.name,
80
+ field: null,
81
+ message: [
82
+ `Model ${container.model.name} is duplicated.`,
83
+ "",
84
+ "Accessors of the other duplicated models are:",
85
+ "",
86
+ ...array
87
+ .filter((_oppo, j) => i !== j)
88
+ .map((oppo) => `- application.files[${oppo.fileIndex}].models[${oppo.modelIndex}]`),
89
+ ].join("\n"),
90
+ });
91
+ });
92
+ return errors;
93
+ }
94
+ function validateDuplicatedFields(model, accessor) {
95
+ const group = new Map();
96
+ MapUtil_1.MapUtil.take(group, model.primaryField.name, () => []).push(`${accessor}.primaryField.name`);
97
+ model.foreignFields.forEach((field, i) => MapUtil_1.MapUtil.take(group, field.name, () => []).push(`${accessor}.foreignFields[${i}].name`));
98
+ model.plainFields.forEach((field, i) => MapUtil_1.MapUtil.take(group, field.name, () => []).push(`${accessor}.plainFields[${i}].name`));
99
+ const errors = [];
100
+ for (const [field, array] of group)
101
+ if (array.length !== 1)
102
+ array.forEach((path, i) => {
103
+ errors.push({
104
+ path,
105
+ table: model.name,
106
+ field,
107
+ message: [
108
+ `Field ${field} is duplicated.`,
109
+ "",
110
+ "Accessors of the other duplicated fields are:",
111
+ "",
112
+ ...array.filter((_oppo, j) => i !== j).map((a) => `- ${a}`),
113
+ ].join("\n"),
114
+ });
115
+ });
116
+ return errors;
117
+ }
118
+ function validateDuplicatedIndexes(model, accessor) {
119
+ const group = new tstl_1.HashMap((x) => (0, tstl_1.hash)(...x), (x, y) => x.length === y.length && x.every((v, i) => v === y[i]));
120
+ model.uniqueIndexes.forEach((unique, i) => group
121
+ .take(unique.fieldNames, () => [])
122
+ .push(`${accessor}.uniqueIndexes[${i}].fieldNames`));
123
+ model.plainIndexes.forEach((plain, i) => group
124
+ .take(plain.fieldNames, () => [])
125
+ .push(`${accessor}.plainIndexes[${i}].fieldNames`));
126
+ model.ginIndexes.forEach((gin, i) => group
127
+ .take([gin.fieldName], () => [])
128
+ .push(`${accessor}.ginIndexes[${i}].fieldName`));
129
+ const errors = [];
130
+ for (const { first: fieldNames, second: array } of group)
131
+ if (array.length !== 1)
132
+ array.forEach((path, i) => {
133
+ errors.push({
134
+ path,
135
+ table: model.name,
136
+ field: null,
137
+ message: [
138
+ `Duplicated index found (${fieldNames.join(", ")})`,
139
+ "",
140
+ "Accessors of the other duplicated indexes are:",
141
+ "",
142
+ ...array.filter((_oppo, j) => i !== j).map((a) => `- ${a}`),
143
+ ].join("\n"),
144
+ });
145
+ });
146
+ if (model.ginIndexes.length !==
147
+ new Set(model.ginIndexes.map((g) => g.fieldName)).size)
148
+ errors.push({
149
+ path: `${accessor}.ginIndexes[].fieldName`,
150
+ table: model.name,
151
+ field: null,
152
+ message: [
153
+ "Duplicated GIN index found.",
154
+ "",
155
+ "GIN index can only be used once per field.",
156
+ "Please remove the duplicated GIN indexes.",
157
+ ].join("\n"),
158
+ });
159
+ return errors;
160
+ }
161
+ /* -----------------------------------------------------------
162
+ VALIDATIONS
163
+ ----------------------------------------------------------- */
164
+ function validateIndexes(model, accessor) {
165
+ // EMENSION
166
+ model.uniqueIndexes = model.uniqueIndexes.filter((unique) => unique.fieldNames.length !== 0 &&
167
+ unique.fieldNames[0] !== model.primaryField.name);
168
+ model.plainIndexes = model.plainIndexes.filter((plain) => plain.fieldNames.length !== 0 &&
169
+ plain.fieldNames[0] !== model.primaryField.name);
170
+ const errors = [];
171
+ const columnNames = new Set([
172
+ model.primaryField.name,
173
+ ...model.foreignFields.map((field) => field.name),
174
+ ...model.plainFields.map((field) => field.name),
175
+ ]);
176
+ // COLUMN LEVEL VALIDATION
177
+ const validate = (props) => {
178
+ props.indexes.forEach((idx, i) => {
179
+ // FIND TARGET FIELD
180
+ props.fieldNames(idx).forEach((name, j) => {
181
+ if (!columnNames.has(name))
182
+ errors.push({
183
+ path: `${accessor}.${props.accessor(i, j)}`,
184
+ table: model.name,
185
+ field: null,
186
+ message: `Field ${name} does not exist in model ${model.name}.`,
187
+ });
188
+ });
189
+ });
190
+ };
191
+ validate({
192
+ title: "unique index",
193
+ indexes: model.uniqueIndexes,
194
+ fieldNames: (idx) => idx.fieldNames,
195
+ accessor: (i, j) => `uniqueIndexes[${i}].fieldNames[${j}]`,
196
+ });
197
+ validate({
198
+ title: "index",
199
+ indexes: model.plainIndexes,
200
+ fieldNames: (idx) => idx.fieldNames,
201
+ accessor: (i, j) => `plainIndexes[${i}].fieldNames[${j}]`,
202
+ });
203
+ validate({
204
+ title: "index",
205
+ indexes: model.ginIndexes,
206
+ fieldNames: (idx) => [idx.fieldName],
207
+ accessor: (i) => `ginIndexes[${i}].fieldName`,
208
+ additional: (gin, i) => {
209
+ const pIndex = model.plainFields.findIndex((plain) => plain.name === gin.fieldName);
210
+ if (pIndex === -1)
211
+ errors.push({
212
+ path: `${accessor}.ginIndexes[${i}].fieldName`,
213
+ table: model.name,
214
+ field: null,
215
+ message: [
216
+ "GIN index can only be used on string typed field.",
217
+ `However, the target field ${gin.fieldName} does not exist",
218
+ "in the {@link plainFields}.`,
219
+ ].join("\n"),
220
+ });
221
+ else if (model.plainFields[pIndex].type !== "string")
222
+ errors.push({
223
+ path: `${accessor}.ginIndexes[${i}].fieldName`,
224
+ table: model.name,
225
+ field: model.plainFields[pIndex].name,
226
+ message: [
227
+ "GIN index can only be used on string typed field.",
228
+ `However, the target field ${gin.fieldName} is not string,`,
229
+ `but ${model.plainFields[pIndex].type}.`,
230
+ "",
231
+ `- accessor of the wrong typed field: ${`${accessor}.plainFields[${pIndex}].type`}`,
232
+ ].join("\n"),
233
+ });
234
+ },
235
+ });
236
+ return errors;
237
+ }
238
+ function validateReferences(model, accessor, dict) {
239
+ const errors = [];
240
+ model.foreignFields.forEach((field, i) => {
241
+ const target = dict.get(field.relation.targetModel);
242
+ if (target === undefined)
243
+ errors.push({
244
+ path: `${accessor}.foreignFields[${i}].relation.targetModel`,
245
+ table: model.name,
246
+ field: field.name,
247
+ message: `Target model ${field.relation.targetModel} does not exist.`,
248
+ });
249
+ });
250
+ return errors;
251
+ }
252
+ //# sourceMappingURL=validatePrismaApplication.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validatePrismaApplication.js","sourceRoot":"","sources":["../../src/prisma/validatePrismaApplication.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { AutoBePrisma } from "@autobe/interface";
2
+ export declare function writePrismaApplication(app: AutoBePrisma.IApplication): Record<string, string>;
@@ -0,0 +1,198 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.writePrismaApplication = writePrismaApplication;
4
+ const ArrayUtil_1 = require("../utils/ArrayUtil");
5
+ const MapUtil_1 = require("../utils/MapUtil");
6
+ function writePrismaApplication(app) {
7
+ for (const file of app.files)
8
+ for (const model of file.models)
9
+ fillMappingName(model);
10
+ return Object.assign(Object.assign({}, Object.fromEntries(app.files
11
+ .filter((file) => file.filename !== "main.prisma")
12
+ .map((file) => [file.filename, writeFile(app, file)]))), { "main.prisma": MAIN_FILE });
13
+ }
14
+ function writeFile(app, file) {
15
+ return file.models.map((model) => writeModel(app, file, model)).join("\n\n");
16
+ }
17
+ function writeModel(app, file, model) {
18
+ return [
19
+ writeComment([
20
+ model.description,
21
+ "",
22
+ ...(model.material ? [] : [`@namespace ${file.namespace}`]),
23
+ "@author AutoBE - https://github.com/wrtnlabs/autobe",
24
+ ].join("\n")),
25
+ `model ${model.name} {`,
26
+ indent(ArrayUtil_1.ArrayUtil.paddle([writeColumns(model), writeRelations(app, model)]).join("\n")),
27
+ "}",
28
+ ].join("\n");
29
+ }
30
+ function fillMappingName(model) {
31
+ const group = new Map();
32
+ for (const ff of model.foreignFields) {
33
+ MapUtil_1.MapUtil.take(group, ff.relation.targetModel, () => []).push(ff);
34
+ if (ff.relation.targetModel == model.name)
35
+ ff.relation.mappingName = "recursive";
36
+ }
37
+ for (const array of group.values())
38
+ if (array.length !== 1)
39
+ for (const ff of array) {
40
+ ff.relation.mappingName = `${model.name}_of_${ff.name}`;
41
+ }
42
+ }
43
+ /* -----------------------------------------------------------
44
+ COLUMNS
45
+ ----------------------------------------------------------- */
46
+ function writeColumns(model) {
47
+ return [
48
+ "//----",
49
+ "// COLUMNS",
50
+ "//----",
51
+ writePrimary(model.primaryField),
52
+ ...model.foreignFields.map((x) => ["", writeField(x)]).flat(),
53
+ ...model.plainFields.map((x) => ["", writeField(x)]).flat(),
54
+ ];
55
+ }
56
+ function writePrimary(field) {
57
+ return [
58
+ writeComment(field.description),
59
+ `${field.name} String @id @db.Uuid`,
60
+ ].join("\n");
61
+ }
62
+ function writeField(field) {
63
+ const logical = LOGICAL_TYPES[field.type];
64
+ const physical = PHYSICAL_TYPES[field.type];
65
+ return [
66
+ writeComment(field.description),
67
+ [
68
+ field.name,
69
+ `${logical}${field.nullable ? "?" : ""}`,
70
+ ...(physical ? [physical] : []),
71
+ ].join(" "),
72
+ ].join("\n");
73
+ }
74
+ /* -----------------------------------------------------------
75
+ RELATIONS
76
+ ----------------------------------------------------------- */
77
+ function writeRelations(app, model) {
78
+ const hasRelationships = app.files
79
+ .map((otherFile) => otherFile.models.map((otherModel) => otherModel.foreignFields
80
+ .filter((otherForeign) => otherForeign.relation.targetModel === model.name)
81
+ .map((otherForeign) => ({
82
+ modelName: otherModel.name,
83
+ unique: otherForeign.unique,
84
+ mappingName: otherForeign.relation.mappingName,
85
+ }))))
86
+ .flat(2);
87
+ const foreignIndexes = model.foreignFields.filter((f) => model.uniqueIndexes.every((u) => u.fieldNames[0] !== f.name) &&
88
+ model.plainIndexes.every((p) => p.fieldNames[0] !== f.name));
89
+ const contents = [
90
+ model.foreignFields.map(writeConstraint),
91
+ hasRelationships.map((r) => {
92
+ var _a;
93
+ return [
94
+ (_a = r.mappingName) !== null && _a !== void 0 ? _a : r.modelName,
95
+ `${r.modelName}${r.unique ? "?" : "[]"}`,
96
+ ...(r.mappingName ? [`@relation("${r.mappingName}")`] : []),
97
+ ].join(" ");
98
+ }),
99
+ foreignIndexes.map(writeForeignIndex),
100
+ [
101
+ ...model.uniqueIndexes.map(writeUniqueIndex),
102
+ ...model.plainIndexes.map(writePlainIndex),
103
+ ...model.ginIndexes.map(writeGinIndex),
104
+ ],
105
+ ];
106
+ if (contents.every((c) => c.length === 0))
107
+ return [];
108
+ return [
109
+ "//----",
110
+ "// RELATIONS",
111
+ "//----",
112
+ // paddled content
113
+ ...ArrayUtil_1.ArrayUtil.paddle(contents),
114
+ ];
115
+ }
116
+ function writeConstraint(field) {
117
+ return [
118
+ field.relation.name,
119
+ `${field.relation.targetModel}${field.nullable ? "?" : ""}`,
120
+ `@relation(${[
121
+ ...(field.relation.mappingName
122
+ ? [`"${field.relation.mappingName}"`]
123
+ : []),
124
+ `fields: [${field.name}]`,
125
+ `references: [id]`,
126
+ `onDelete: Cascade`,
127
+ ].join(", ")})`,
128
+ ].join(" ");
129
+ }
130
+ function writeForeignIndex(field) {
131
+ return `@@${field.unique ? "unique" : "index"}([${field.name}])`;
132
+ }
133
+ function writeUniqueIndex(field) {
134
+ return `@@unique([${field.fieldNames.join(", ")}])`;
135
+ }
136
+ function writePlainIndex(field) {
137
+ return `@@index([${field.fieldNames.join(", ")}])`;
138
+ }
139
+ function writeGinIndex(field) {
140
+ return `@@index([${field.fieldName}(ops: raw("gin_trgm_ops"))], type: Gin)`;
141
+ }
142
+ /* -----------------------------------------------------------
143
+ BACKGROUND
144
+ ----------------------------------------------------------- */
145
+ function writeComment(content) {
146
+ return content
147
+ .split("\r\n")
148
+ .join("\n")
149
+ .split("\n")
150
+ .map((str) => `///${str.length ? ` ${str}` : ""}`)
151
+ .join("\n")
152
+ .trim();
153
+ }
154
+ function indent(content) {
155
+ return content
156
+ .split("\r\n")
157
+ .join("\n")
158
+ .split("\n")
159
+ .map((str) => ` ${str}`)
160
+ .join("\n");
161
+ }
162
+ const LOGICAL_TYPES = {
163
+ // native types
164
+ boolean: "Boolean",
165
+ int: "Int",
166
+ double: "Float",
167
+ string: "String",
168
+ // formats
169
+ datetime: "DateTime",
170
+ uuid: "String",
171
+ uri: "String",
172
+ };
173
+ const PHYSICAL_TYPES = {
174
+ int: "@db.Integer",
175
+ double: "@db.DoublePrecision",
176
+ uuid: "@db.Uuid",
177
+ datetime: "@db.Timestamptz",
178
+ uri: "@db.VarChar(80000)",
179
+ };
180
+ const MAIN_FILE = `
181
+ generator client {
182
+ provider = "prisma-client-js"
183
+ previewFeatures = ["postgresqlExtensions", "views"]
184
+ binaryTargets = ["native"]
185
+ }
186
+
187
+ datasource db {
188
+ provider = "postgresql"
189
+ url = env("DATABASE_URL")
190
+ extensions = []
191
+ }
192
+
193
+ generator markdown {
194
+ provider = "prisma-markdown"
195
+ output = "../docs/ERD.md"
196
+ }
197
+ `.trim();
198
+ //# sourceMappingURL=writePrismaApplication.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"writePrismaApplication.js","sourceRoot":"","sources":["../../src/prisma/writePrismaApplication.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
1
  export declare namespace ArrayUtil {
2
2
  function asyncMap<T, U>(array: T[], callback: (value: T, index: number, array: T[]) => Promise<U>): Promise<U[]>;
3
+ function paddle(contents: string[][]): string[];
3
4
  }
@@ -21,5 +21,18 @@ var ArrayUtil;
21
21
  });
22
22
  }
23
23
  ArrayUtil.asyncMap = asyncMap;
24
+ function paddle(contents) {
25
+ const output = [];
26
+ contents.forEach((c) => {
27
+ if (c.length === 0)
28
+ return;
29
+ else if (output.length === 0)
30
+ output.push(...c);
31
+ else
32
+ output.push("", ...c);
33
+ });
34
+ return output;
35
+ }
36
+ ArrayUtil.paddle = paddle;
24
37
  })(ArrayUtil || (exports.ArrayUtil = ArrayUtil = {}));
25
38
  //# sourceMappingURL=ArrayUtil.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ArrayUtil.js","sourceRoot":"","sources":["../../src/utils/ArrayUtil.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,IAAiB,SAAS,CAUzB;AAVD,WAAiB,SAAS;IACxB,SAAsB,QAAQ,CAC5B,KAAU,EACV,QAA6D;;YAE7D,MAAM,MAAM,GAAQ,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE;gBACnC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;YACjD,OAAO,MAAM,CAAC;QAChB,CAAC;KAAA;IARqB,kBAAQ,WAQ7B,CAAA;AACH,CAAC,EAVgB,SAAS,yBAAT,SAAS,QAUzB"}
1
+ {"version":3,"file":"ArrayUtil.js","sourceRoot":"","sources":["../../src/utils/ArrayUtil.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,IAAiB,SAAS,CAoBzB;AApBD,WAAiB,SAAS;IACxB,SAAsB,QAAQ,CAC5B,KAAU,EACV,QAA6D;;YAE7D,MAAM,MAAM,GAAQ,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE;gBACnC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;YACjD,OAAO,MAAM,CAAC;QAChB,CAAC;KAAA;IARqB,kBAAQ,WAQ7B,CAAA;IAED,SAAgB,MAAM,CAAC,QAAoB;QACzC,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YACrB,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO;iBACtB,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;gBAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;;gBAC3C,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAChB,CAAC;IARe,gBAAM,SAQrB,CAAA;AACH,CAAC,EApBgB,SAAS,yBAAT,SAAS,QAoBzB"}
@@ -0,0 +1,3 @@
1
+ export declare namespace MapUtil {
2
+ function take<K, V>(map: Map<K, V>, key: K, value: () => V): V;
3
+ }
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MapUtil = void 0;
4
+ var MapUtil;
5
+ (function (MapUtil) {
6
+ function take(map, key, value) {
7
+ if (map.has(key)) {
8
+ return map.get(key);
9
+ }
10
+ const newValue = value();
11
+ map.set(key, newValue);
12
+ return newValue;
13
+ }
14
+ MapUtil.take = take;
15
+ })(MapUtil || (exports.MapUtil = MapUtil = {}));
16
+ //# sourceMappingURL=MapUtil.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MapUtil.js","sourceRoot":"","sources":["../../src/utils/MapUtil.ts"],"names":[],"mappings":";;;AAAA,IAAiB,OAAO,CASvB;AATD,WAAiB,OAAO;IACtB,SAAgB,IAAI,CAAO,GAAc,EAAE,GAAM,EAAE,KAAc;QAC/D,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACjB,OAAO,GAAG,CAAC,GAAG,CAAC,GAAG,CAAM,CAAC;QAC3B,CAAC;QACD,MAAM,QAAQ,GAAG,KAAK,EAAE,CAAC;QACzB,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACvB,OAAO,QAAQ,CAAC;IAClB,CAAC;IAPe,YAAI,OAOnB,CAAA;AACH,CAAC,EATgB,OAAO,uBAAP,OAAO,QASvB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@autobe/compiler",
3
- "version": "0.3.24",
3
+ "version": "0.4.1",
4
4
  "description": "AI backend server code generator",
5
5
  "main": "lib/index.js",
6
6
  "author": "Wrtn Technologies",
@@ -25,7 +25,7 @@
25
25
  "prisma-markdown": "^3.0.0",
26
26
  "tstl": "^3.0.0",
27
27
  "typia": "^9.3.1",
28
- "@autobe/interface": "^0.3.24"
28
+ "@autobe/interface": "^0.4.1"
29
29
  },
30
30
  "devDependencies": {
31
31
  "@types/node": "^22.15.3",