@autobe/compiler 0.28.0 → 0.29.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.
@@ -12,7 +12,18 @@ export namespace FilePrinter {
12
12
  ts.addSyntheticLeadingComment(
13
13
  node,
14
14
  ts.SyntaxKind.MultiLineCommentTrivia,
15
- ["*", ...comment.split("\n").map((str) => ` * ${str}`), ""].join("\n"),
15
+ [
16
+ "*",
17
+ ...comment
18
+ .split("\r\n")
19
+ .join("\n")
20
+ .split("\n")
21
+ .map(
22
+ (str) =>
23
+ ` * ${str.split("*/").join("*\\\\/").split("*\\/").join("*\\\\/")}`,
24
+ ),
25
+ "",
26
+ ].join("\n"),
16
27
  true,
17
28
  );
18
29
  return node;
@@ -1,5 +0,0 @@
1
- import { AutoBePrisma } from "@autobe/interface";
2
- export declare function writePrismaApplication(props: {
3
- dbms: "postgres" | "sqlite";
4
- application: AutoBePrisma.IApplication;
5
- }): Record<string, string>;
@@ -1,341 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.writePrismaApplication = writePrismaApplication;
7
- const utils_1 = require("@autobe/utils");
8
- const crypto_1 = __importDefault(require("crypto"));
9
- const ArrayUtil_1 = require("../utils/ArrayUtil");
10
- function writePrismaApplication(props) {
11
- for (const file of props.application.files)
12
- for (const model of file.models)
13
- fillMappingName(model);
14
- return Object.assign(Object.assign({}, Object.fromEntries(props.application.files
15
- .filter((file) => file.filename !== "main.prisma")
16
- .map((file) => [
17
- file.filename,
18
- writeFile(Object.assign(Object.assign({}, props), { file })),
19
- ]))), { "main.prisma": props.dbms === "postgres" ? POSTGRES_MAIN_FILE : SQLITE_MAIN_FILE });
20
- }
21
- function writeFile(props) {
22
- return props.file.models
23
- .map((model) => writeModel(Object.assign(Object.assign({}, props), { model })))
24
- .join("\n\n");
25
- }
26
- function writeModel(props) {
27
- return [
28
- writeComment([
29
- props.model.description,
30
- "",
31
- ...(props.model.material ? [] : [`@namespace ${props.file.namespace}`]),
32
- "@author AutoBE - https://github.com/wrtnlabs/autobe",
33
- ].join("\n"), 80),
34
- `model ${props.model.name} {`,
35
- addIndent(ArrayUtil_1.ArrayUtil.paddle([writeColumns(props), writeRelations(props)]).join("\n")),
36
- "}",
37
- ].join("\n");
38
- }
39
- function fillMappingName(model) {
40
- const group = new Map();
41
- for (const ff of model.foreignFields) {
42
- utils_1.MapUtil.take(group, ff.relation.targetModel, () => []).push(ff);
43
- if (ff.relation.targetModel == model.name)
44
- ff.relation.mappingName = "recursive";
45
- }
46
- for (const array of group.values())
47
- if (array.length !== 1)
48
- for (const ff of array)
49
- ff.relation.mappingName = shortName(`${model.name}_of_${ff.name}`);
50
- }
51
- /* -----------------------------------------------------------
52
- COLUMNS
53
- ----------------------------------------------------------- */
54
- function writeColumns(props) {
55
- return [
56
- "//----",
57
- "// COLUMNS",
58
- "//----",
59
- writePrimary({
60
- dbms: props.dbms,
61
- model: props.model,
62
- field: props.model.primaryField,
63
- }),
64
- ...props.model.foreignFields
65
- .map((x) => [
66
- "",
67
- writeField({
68
- dbms: props.dbms,
69
- field: x,
70
- }),
71
- ])
72
- .flat(),
73
- ...props.model.plainFields
74
- .map((x) => [
75
- "",
76
- writeField({
77
- dbms: props.dbms,
78
- field: x,
79
- }),
80
- ])
81
- .flat(),
82
- ];
83
- }
84
- function writePrimary(props) {
85
- const type = props.dbms === "postgres" ? POSTGRES_PHYSICAL_TYPES.uuid : undefined;
86
- const pkeyName = `${props.model.name}__pkey`;
87
- const signature = pkeyName.length <= MAX_IDENTIFIER_LENGTH
88
- ? "@id"
89
- : `@id(map: "${shortName(pkeyName)}")`;
90
- return [
91
- writeComment(props.field.description, 78),
92
- `${props.field.name} String ${signature}${type ? ` ${type}` : ""}`,
93
- ].join("\n");
94
- }
95
- function writeField(props) {
96
- const logical = LOGICAL_TYPES[props.field.type];
97
- const physical = props.dbms === "postgres"
98
- ? POSTGRES_PHYSICAL_TYPES[props.field.type]
99
- : undefined;
100
- return [
101
- writeComment(props.field.description, 78),
102
- [
103
- props.field.name,
104
- `${logical}${props.field.nullable ? "?" : ""}`,
105
- ...(physical ? [physical] : []),
106
- ].join(" "),
107
- ].join("\n");
108
- }
109
- /* -----------------------------------------------------------
110
- RELATIONS
111
- ----------------------------------------------------------- */
112
- function writeRelations(props) {
113
- const hasRelationships = props.application.files
114
- .map((otherFile) => otherFile.models.map((otherModel) => otherModel.foreignFields
115
- .filter((otherForeign) => otherForeign.relation.targetModel === props.model.name)
116
- .map((otherForeign) => ({
117
- modelName: otherModel.name,
118
- unique: otherForeign.unique,
119
- mappingName: otherForeign.relation.mappingName,
120
- }))))
121
- .flat(2);
122
- const foreignIndexes = props.model.foreignFields.filter((f) => {
123
- if (f.unique === true)
124
- return props.model.uniqueIndexes.every((u) => u.fieldNames.length !== 1 || u.fieldNames[0] !== f.name);
125
- return (props.model.uniqueIndexes.every((u) => u.fieldNames[0] !== f.name) &&
126
- props.model.plainIndexes.every((p) => p.fieldNames[0] !== f.name));
127
- });
128
- const contents = [
129
- props.model.foreignFields.map((foreign) => writeConstraint({
130
- dbms: props.dbms,
131
- model: props.model,
132
- foreign,
133
- })),
134
- hasRelationships.map((r) => {
135
- var _a;
136
- return [
137
- (_a = r.mappingName) !== null && _a !== void 0 ? _a : r.modelName,
138
- `${r.modelName}${r.unique ? "?" : "[]"}`,
139
- ...(r.mappingName ? [`@relation("${r.mappingName}")`] : []),
140
- ].join(" ");
141
- }),
142
- foreignIndexes.map((field) => writeForeignIndex({
143
- model: props.model,
144
- field,
145
- })),
146
- [
147
- ...props.model.uniqueIndexes.map((unique) => writeUniqueIndex({
148
- model: props.model,
149
- unique,
150
- })),
151
- ...props.model.plainIndexes.map((plain) => writePlainIndex({
152
- model: props.model,
153
- plain,
154
- })),
155
- ...(props.dbms === "postgres"
156
- ? props.model.ginIndexes.map((gin) => writeGinIndex({
157
- model: props.model,
158
- gin,
159
- }))
160
- : []),
161
- ],
162
- ];
163
- if (contents.every((c) => c.length === 0))
164
- return [];
165
- return [
166
- "//----",
167
- "// RELATIONS",
168
- "//----",
169
- // paddled content
170
- ...ArrayUtil_1.ArrayUtil.paddle(contents),
171
- ];
172
- }
173
- function writeConstraint(props) {
174
- // spellchecker:ignore-next-line
175
- const name = `${props.model.name}_${props.foreign.name}_rela`;
176
- const tooMuchLong = props.dbms === "postgres" && name.length > MAX_IDENTIFIER_LENGTH;
177
- const body = [
178
- props.foreign.relation.name,
179
- `${props.foreign.relation.targetModel}${props.foreign.nullable ? "?" : ""}`,
180
- `@relation(${[
181
- ...(props.foreign.relation.mappingName
182
- ? [`"${props.foreign.relation.mappingName}"`]
183
- : []),
184
- `fields: [${props.foreign.name}]`,
185
- `references: [id]`,
186
- `onDelete: Cascade`,
187
- ...(tooMuchLong ? [`map: "${shortName(name)}"`] : []),
188
- ].join(", ")})`,
189
- ].join(" ");
190
- return tooMuchLong
191
- ? utils_1.StringUtil.trim `
192
- // spellchecker: ignore-next-line
193
- ${body}
194
- `
195
- : body;
196
- }
197
- function writeForeignIndex(props) {
198
- const name = `${props.model.name}_${props.field.name}_fkey`;
199
- const prefix = `@@${props.field.unique === true ? "unique" : "index"}([${props.field.name}]`;
200
- if (name.length <= MAX_IDENTIFIER_LENGTH)
201
- return `${prefix})`;
202
- return utils_1.StringUtil.trim `
203
- // spellchecker: ignore-next-line
204
- ${prefix}, map: "${shortName(name)}")
205
- `;
206
- }
207
- function writeUniqueIndex(props) {
208
- const name = `${props.model.name}_${props.unique.fieldNames.join("_")}_key`;
209
- const prefix = `@@unique([${props.unique.fieldNames.join(", ")}]`;
210
- if (name.length <= MAX_IDENTIFIER_LENGTH)
211
- return `${prefix})`;
212
- return utils_1.StringUtil.trim `
213
- // spellchecker: ignore-next-line
214
- ${prefix}, map: "${shortName(name)}")
215
- `;
216
- }
217
- function writePlainIndex(props) {
218
- const name = `${props.model.name}_${props.plain.fieldNames.join("_")}_idx`;
219
- const prefix = `@@index([${props.plain.fieldNames.join(", ")}]`;
220
- if (name.length <= MAX_IDENTIFIER_LENGTH)
221
- return `${prefix})`;
222
- return utils_1.StringUtil.trim `
223
- // spellchecker: ignore-next-line
224
- ${prefix}, map: "${shortName(name)}")
225
- `;
226
- }
227
- function writeGinIndex(props) {
228
- const name = `${props.model.name}_${props.gin.fieldName}_idx`;
229
- const prefix = `@@index([${props.gin.fieldName}(ops: raw("gin_trgm_ops"))], type: Gin`;
230
- if (name.length <= MAX_IDENTIFIER_LENGTH)
231
- return `${prefix})`;
232
- return utils_1.StringUtil.trim `
233
- // spellchecker: ignore-next-line
234
- ${prefix}, map: "${shortName(name)}")
235
- `;
236
- }
237
- /* -----------------------------------------------------------
238
- BACKGROUND
239
- ----------------------------------------------------------- */
240
- function writeComment(content, length) {
241
- return content
242
- .split("\r\n")
243
- .join("\n")
244
- .split("\n")
245
- .map((line) => line.trim())
246
- .map((line) => {
247
- // 77자에서 "/// " 4자를 뺀 73자가 실제 컨텐츠 최대 길이
248
- if (line.length <= length - 4)
249
- return [line];
250
- const words = line.split(" ");
251
- const result = [];
252
- let currentLine = "";
253
- for (const word of words) {
254
- const potentialLine = currentLine ? `${currentLine} ${word}` : word;
255
- if (potentialLine.length <= 73) {
256
- currentLine = potentialLine;
257
- }
258
- else {
259
- if (currentLine)
260
- result.push(currentLine);
261
- currentLine = word;
262
- }
263
- }
264
- if (currentLine)
265
- result.push(currentLine);
266
- return result;
267
- })
268
- .flat()
269
- .map((str) => `///${str.length ? ` ${str}` : ""}`)
270
- .join("\n")
271
- .trim();
272
- }
273
- function addIndent(content) {
274
- return content
275
- .split("\r\n")
276
- .join("\n")
277
- .split("\n")
278
- .map((str) => ` ${str}`)
279
- .join("\n");
280
- }
281
- function shortName(name) {
282
- if (name.length <= MAX_IDENTIFIER_LENGTH)
283
- return name;
284
- const hash = crypto_1.default
285
- .createHash("md5")
286
- .update(name)
287
- .digest("hex")
288
- .substring(0, HASH_TRUNCATION_LENGTH);
289
- return `${name.substring(0, MAX_IDENTIFIER_LENGTH - HASH_TRUNCATION_LENGTH - 1)}_${hash}`;
290
- }
291
- const LOGICAL_TYPES = {
292
- // native types
293
- boolean: "Boolean",
294
- int: "Int",
295
- double: "Float",
296
- string: "String",
297
- // formats
298
- datetime: "DateTime",
299
- uuid: "String",
300
- uri: "String",
301
- };
302
- const POSTGRES_PHYSICAL_TYPES = {
303
- int: "@db.Integer",
304
- double: "@db.DoublePrecision",
305
- uuid: "@db.Uuid",
306
- datetime: "@db.Timestamptz",
307
- uri: "@db.VarChar(80000)",
308
- };
309
- const POSTGRES_MAIN_FILE = utils_1.StringUtil.trim `
310
- generator client {
311
- provider = "prisma-client-js"
312
- engineType = "client"
313
- previewFeatures = ["postgresqlExtensions", "views"]
314
- }
315
- datasource db {
316
- provider = "postgresql"
317
- url = env("DATABASE_URL")
318
- extensions = [pg_trgm]
319
- }
320
- generator markdown {
321
- provider = "prisma-markdown"
322
- output = "../../docs/ERD.md"
323
- }
324
- `;
325
- const SQLITE_MAIN_FILE = utils_1.StringUtil.trim `
326
- generator client {
327
- provider = "prisma-client-js"
328
- engineType = "client"
329
- }
330
- datasource db {
331
- provider = "sqlite"
332
- url = "file:../db.sqlite"
333
- }
334
- generator markdown {
335
- provider = "prisma-markdown"
336
- output = "../../docs/ERD.md"
337
- }
338
- `;
339
- const MAX_IDENTIFIER_LENGTH = 63;
340
- const HASH_TRUNCATION_LENGTH = 8;
341
- //# sourceMappingURL=writePrismaApplication.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"writePrismaApplication.js","sourceRoot":"","sources":["../../src/prisma/writePrismaApplication.ts"],"names":[],"mappings":"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"}