@autobe/compiler 0.14.4 → 0.14.5
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,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
6
|
exports.writePrismaApplication = writePrismaApplication;
|
|
4
7
|
const utils_1 = require("@autobe/utils");
|
|
8
|
+
const crypto_1 = __importDefault(require("crypto"));
|
|
5
9
|
const ArrayUtil_1 = require("../utils/ArrayUtil");
|
|
6
10
|
const MapUtil_1 = require("../utils/MapUtil");
|
|
7
11
|
function writePrismaApplication(props) {
|
|
@@ -42,9 +46,8 @@ function fillMappingName(model) {
|
|
|
42
46
|
}
|
|
43
47
|
for (const array of group.values())
|
|
44
48
|
if (array.length !== 1)
|
|
45
|
-
for (const ff of array)
|
|
46
|
-
ff.relation.mappingName = `${model.name}_of_${ff.name}
|
|
47
|
-
}
|
|
49
|
+
for (const ff of array)
|
|
50
|
+
ff.relation.mappingName = shortName(`${model.name}_of_${ff.name}`);
|
|
48
51
|
}
|
|
49
52
|
/* -----------------------------------------------------------
|
|
50
53
|
COLUMNS
|
|
@@ -119,7 +122,11 @@ function writeRelations(props) {
|
|
|
119
122
|
props.model.plainIndexes.every((p) => p.fieldNames[0] !== f.name));
|
|
120
123
|
});
|
|
121
124
|
const contents = [
|
|
122
|
-
props.model.foreignFields.map(writeConstraint
|
|
125
|
+
props.model.foreignFields.map((foreign) => writeConstraint({
|
|
126
|
+
dbms: props.dbms,
|
|
127
|
+
model: props.model,
|
|
128
|
+
foreign,
|
|
129
|
+
})),
|
|
123
130
|
hasRelationships.map((r) => {
|
|
124
131
|
var _a;
|
|
125
132
|
return [
|
|
@@ -128,12 +135,24 @@ function writeRelations(props) {
|
|
|
128
135
|
...(r.mappingName ? [`@relation("${r.mappingName}")`] : []),
|
|
129
136
|
].join(" ");
|
|
130
137
|
}),
|
|
131
|
-
foreignIndexes.map(writeForeignIndex
|
|
138
|
+
foreignIndexes.map((field) => writeForeignIndex({
|
|
139
|
+
model: props.model,
|
|
140
|
+
field,
|
|
141
|
+
})),
|
|
132
142
|
[
|
|
133
|
-
...props.model.uniqueIndexes.map(writeUniqueIndex
|
|
134
|
-
|
|
143
|
+
...props.model.uniqueIndexes.map((unique) => writeUniqueIndex({
|
|
144
|
+
model: props.model,
|
|
145
|
+
unique,
|
|
146
|
+
})),
|
|
147
|
+
...props.model.plainIndexes.map((plain) => writePlainIndex({
|
|
148
|
+
model: props.model,
|
|
149
|
+
plain,
|
|
150
|
+
})),
|
|
135
151
|
...(props.dbms === "postgres"
|
|
136
|
-
? props.model.ginIndexes.map(writeGinIndex
|
|
152
|
+
? props.model.ginIndexes.map((gin) => writeGinIndex({
|
|
153
|
+
model: props.model,
|
|
154
|
+
gin,
|
|
155
|
+
}))
|
|
137
156
|
: []),
|
|
138
157
|
],
|
|
139
158
|
];
|
|
@@ -147,31 +166,52 @@ function writeRelations(props) {
|
|
|
147
166
|
...ArrayUtil_1.ArrayUtil.paddle(contents),
|
|
148
167
|
];
|
|
149
168
|
}
|
|
150
|
-
function writeConstraint(
|
|
169
|
+
function writeConstraint(props) {
|
|
170
|
+
// spellchecker:ignore-next-line
|
|
171
|
+
const name = `${props.model.name}_${props.foreign.name}_rela`;
|
|
151
172
|
return [
|
|
152
|
-
|
|
153
|
-
`${
|
|
173
|
+
props.foreign.relation.name,
|
|
174
|
+
`${props.foreign.relation.targetModel}${props.foreign.nullable ? "?" : ""}`,
|
|
154
175
|
`@relation(${[
|
|
155
|
-
...(
|
|
156
|
-
? [`"${
|
|
176
|
+
...(props.foreign.relation.mappingName
|
|
177
|
+
? [`"${props.foreign.relation.mappingName}"`]
|
|
157
178
|
: []),
|
|
158
|
-
`fields: [${
|
|
179
|
+
`fields: [${props.foreign.name}]`,
|
|
159
180
|
`references: [id]`,
|
|
160
181
|
`onDelete: Cascade`,
|
|
182
|
+
...(props.dbms === "sqlite" || name.length <= MAX_IDENTIFIER_LENGTH
|
|
183
|
+
? []
|
|
184
|
+
: [`map: "${shortName(name)}"`]),
|
|
161
185
|
].join(", ")})`,
|
|
162
186
|
].join(" ");
|
|
163
187
|
}
|
|
164
|
-
function writeForeignIndex(
|
|
165
|
-
|
|
188
|
+
function writeForeignIndex(props) {
|
|
189
|
+
const name = `${props.model.name}_${props.field.name}_fkey`;
|
|
190
|
+
const prefix = `@@${props.field.unique === true ? "unique" : "index"}([${props.field.name}]`;
|
|
191
|
+
if (name.length <= MAX_IDENTIFIER_LENGTH)
|
|
192
|
+
return `${prefix})`;
|
|
193
|
+
return `${prefix}, map: "${shortName(name)}")`;
|
|
166
194
|
}
|
|
167
|
-
function writeUniqueIndex(
|
|
168
|
-
|
|
195
|
+
function writeUniqueIndex(props) {
|
|
196
|
+
const name = `${props.model.name}_${props.unique.fieldNames.join("_")}_key`;
|
|
197
|
+
const prefix = `@@unique([${props.unique.fieldNames.join(", ")}]`;
|
|
198
|
+
if (name.length <= MAX_IDENTIFIER_LENGTH)
|
|
199
|
+
return `${prefix})`;
|
|
200
|
+
return `${prefix}, map: "${shortName(name)}")`;
|
|
169
201
|
}
|
|
170
|
-
function writePlainIndex(
|
|
171
|
-
|
|
202
|
+
function writePlainIndex(props) {
|
|
203
|
+
const name = `${props.model.name}_${props.plain.fieldNames.join("_")}_idx`;
|
|
204
|
+
const prefix = `@@index([${props.plain.fieldNames.join(", ")}]`;
|
|
205
|
+
if (name.length <= MAX_IDENTIFIER_LENGTH)
|
|
206
|
+
return `${prefix})`;
|
|
207
|
+
return `${prefix}, map: "${shortName(name)}")`;
|
|
172
208
|
}
|
|
173
|
-
function writeGinIndex(
|
|
174
|
-
|
|
209
|
+
function writeGinIndex(props) {
|
|
210
|
+
const name = `${props.model.name}_${props.gin.fieldName}_idx`;
|
|
211
|
+
const prefix = `@@index([${props.gin.fieldName}(ops: raw("gin_trgm_ops"))], type: Gin`;
|
|
212
|
+
if (name.length <= MAX_IDENTIFIER_LENGTH)
|
|
213
|
+
return `${prefix})`;
|
|
214
|
+
return `${prefix}, map: "${shortName(name)}")`;
|
|
175
215
|
}
|
|
176
216
|
/* -----------------------------------------------------------
|
|
177
217
|
BACKGROUND
|
|
@@ -193,6 +233,16 @@ function indent(content) {
|
|
|
193
233
|
.map((str) => ` ${str}`)
|
|
194
234
|
.join("\n");
|
|
195
235
|
}
|
|
236
|
+
function shortName(name) {
|
|
237
|
+
if (name.length <= MAX_IDENTIFIER_LENGTH)
|
|
238
|
+
return name;
|
|
239
|
+
const hash = crypto_1.default
|
|
240
|
+
.createHash("md5")
|
|
241
|
+
.update(name)
|
|
242
|
+
.digest("hex")
|
|
243
|
+
.substring(0, HASH_TRUNCATION_LENGTH);
|
|
244
|
+
return `${name.substring(0, MAX_IDENTIFIER_LENGTH - HASH_TRUNCATION_LENGTH - 1)}_${hash}`;
|
|
245
|
+
}
|
|
196
246
|
const LOGICAL_TYPES = {
|
|
197
247
|
// native types
|
|
198
248
|
boolean: "Boolean",
|
|
@@ -240,4 +290,6 @@ const SQLITE_MAIN_FILE = utils_1.StringUtil.trim `
|
|
|
240
290
|
output = "../docs/ERD.md"
|
|
241
291
|
}
|
|
242
292
|
`;
|
|
293
|
+
const MAX_IDENTIFIER_LENGTH = 63;
|
|
294
|
+
const HASH_TRUNCATION_LENGTH = 8;
|
|
243
295
|
//# sourceMappingURL=writePrismaApplication.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"writePrismaApplication.js","sourceRoot":"","sources":["../../src/prisma/writePrismaApplication.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"writePrismaApplication.js","sourceRoot":"","sources":["../../src/prisma/writePrismaApplication.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@autobe/compiler",
|
|
3
|
-
"version": "0.14.
|
|
3
|
+
"version": "0.14.5",
|
|
4
4
|
"description": "AI backend server code generator",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"author": "Wrtn Technologies",
|
|
@@ -26,9 +26,9 @@
|
|
|
26
26
|
"tstl": "^3.0.0",
|
|
27
27
|
"tgrid": "^1.2.0",
|
|
28
28
|
"typia": "^9.6.0",
|
|
29
|
-
"@autobe/
|
|
30
|
-
"@autobe/
|
|
31
|
-
"@autobe/
|
|
29
|
+
"@autobe/filesystem": "^0.14.5",
|
|
30
|
+
"@autobe/interface": "^0.14.5",
|
|
31
|
+
"@autobe/utils": "^0.14.5"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|
|
34
34
|
"@types/node": "^22.15.3",
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { AutoBePrisma } from "@autobe/interface";
|
|
2
2
|
import { StringUtil } from "@autobe/utils";
|
|
3
|
+
import crypto from "crypto";
|
|
3
4
|
|
|
4
5
|
import { ArrayUtil } from "../utils/ArrayUtil";
|
|
5
6
|
import { MapUtil } from "../utils/MapUtil";
|
|
@@ -74,9 +75,8 @@ function fillMappingName(model: AutoBePrisma.IModel): void {
|
|
|
74
75
|
}
|
|
75
76
|
for (const array of group.values())
|
|
76
77
|
if (array.length !== 1)
|
|
77
|
-
for (const ff of array)
|
|
78
|
-
ff.relation.mappingName = `${model.name}_of_${ff.name}
|
|
79
|
-
}
|
|
78
|
+
for (const ff of array)
|
|
79
|
+
ff.relation.mappingName = shortName(`${model.name}_of_${ff.name}`);
|
|
80
80
|
}
|
|
81
81
|
|
|
82
82
|
/* -----------------------------------------------------------
|
|
@@ -189,7 +189,13 @@ function writeRelations(props: {
|
|
|
189
189
|
);
|
|
190
190
|
});
|
|
191
191
|
const contents: string[][] = [
|
|
192
|
-
props.model.foreignFields.map(
|
|
192
|
+
props.model.foreignFields.map((foreign) =>
|
|
193
|
+
writeConstraint({
|
|
194
|
+
dbms: props.dbms,
|
|
195
|
+
model: props.model,
|
|
196
|
+
foreign,
|
|
197
|
+
}),
|
|
198
|
+
),
|
|
193
199
|
hasRelationships.map((r) =>
|
|
194
200
|
[
|
|
195
201
|
r.mappingName ?? r.modelName,
|
|
@@ -197,12 +203,32 @@ function writeRelations(props: {
|
|
|
197
203
|
...(r.mappingName ? [`@relation("${r.mappingName}")`] : []),
|
|
198
204
|
].join(" "),
|
|
199
205
|
),
|
|
200
|
-
foreignIndexes.map(
|
|
206
|
+
foreignIndexes.map((field) =>
|
|
207
|
+
writeForeignIndex({
|
|
208
|
+
model: props.model,
|
|
209
|
+
field,
|
|
210
|
+
}),
|
|
211
|
+
),
|
|
201
212
|
[
|
|
202
|
-
...props.model.uniqueIndexes.map(
|
|
203
|
-
|
|
213
|
+
...props.model.uniqueIndexes.map((unique) =>
|
|
214
|
+
writeUniqueIndex({
|
|
215
|
+
model: props.model,
|
|
216
|
+
unique,
|
|
217
|
+
}),
|
|
218
|
+
),
|
|
219
|
+
...props.model.plainIndexes.map((plain) =>
|
|
220
|
+
writePlainIndex({
|
|
221
|
+
model: props.model,
|
|
222
|
+
plain,
|
|
223
|
+
}),
|
|
224
|
+
),
|
|
204
225
|
...(props.dbms === "postgres"
|
|
205
|
-
? props.model.ginIndexes.map(
|
|
226
|
+
? props.model.ginIndexes.map((gin) =>
|
|
227
|
+
writeGinIndex({
|
|
228
|
+
model: props.model,
|
|
229
|
+
gin,
|
|
230
|
+
}),
|
|
231
|
+
)
|
|
206
232
|
: []),
|
|
207
233
|
],
|
|
208
234
|
];
|
|
@@ -216,35 +242,68 @@ function writeRelations(props: {
|
|
|
216
242
|
];
|
|
217
243
|
}
|
|
218
244
|
|
|
219
|
-
function writeConstraint(
|
|
245
|
+
function writeConstraint(props: {
|
|
246
|
+
dbms: "postgres" | "sqlite";
|
|
247
|
+
model: AutoBePrisma.IModel;
|
|
248
|
+
foreign: AutoBePrisma.IForeignField;
|
|
249
|
+
}): string {
|
|
250
|
+
// spellchecker:ignore-next-line
|
|
251
|
+
const name: string = `${props.model.name}_${props.foreign.name}_rela`;
|
|
220
252
|
return [
|
|
221
|
-
|
|
222
|
-
`${
|
|
253
|
+
props.foreign.relation.name,
|
|
254
|
+
`${props.foreign.relation.targetModel}${props.foreign.nullable ? "?" : ""}`,
|
|
223
255
|
`@relation(${[
|
|
224
|
-
...(
|
|
225
|
-
? [`"${
|
|
256
|
+
...(props.foreign.relation.mappingName
|
|
257
|
+
? [`"${props.foreign.relation.mappingName}"`]
|
|
226
258
|
: []),
|
|
227
|
-
`fields: [${
|
|
259
|
+
`fields: [${props.foreign.name}]`,
|
|
228
260
|
`references: [id]`,
|
|
229
261
|
`onDelete: Cascade`,
|
|
262
|
+
...(props.dbms === "sqlite" || name.length <= MAX_IDENTIFIER_LENGTH
|
|
263
|
+
? []
|
|
264
|
+
: [`map: "${shortName(name)}"`]),
|
|
230
265
|
].join(", ")})`,
|
|
231
266
|
].join(" ");
|
|
232
267
|
}
|
|
233
268
|
|
|
234
|
-
function writeForeignIndex(
|
|
235
|
-
|
|
269
|
+
function writeForeignIndex(props: {
|
|
270
|
+
model: AutoBePrisma.IModel;
|
|
271
|
+
field: AutoBePrisma.IForeignField;
|
|
272
|
+
}): string {
|
|
273
|
+
const name: string = `${props.model.name}_${props.field.name}_fkey`;
|
|
274
|
+
const prefix: string = `@@${props.field.unique === true ? "unique" : "index"}([${props.field.name}]`;
|
|
275
|
+
if (name.length <= MAX_IDENTIFIER_LENGTH) return `${prefix})`;
|
|
276
|
+
return `${prefix}, map: "${shortName(name)}")`;
|
|
236
277
|
}
|
|
237
278
|
|
|
238
|
-
function writeUniqueIndex(
|
|
239
|
-
|
|
279
|
+
function writeUniqueIndex(props: {
|
|
280
|
+
model: AutoBePrisma.IModel;
|
|
281
|
+
unique: AutoBePrisma.IUniqueIndex;
|
|
282
|
+
}): string {
|
|
283
|
+
const name: string = `${props.model.name}_${props.unique.fieldNames.join("_")}_key`;
|
|
284
|
+
const prefix: string = `@@unique([${props.unique.fieldNames.join(", ")}]`;
|
|
285
|
+
if (name.length <= MAX_IDENTIFIER_LENGTH) return `${prefix})`;
|
|
286
|
+
return `${prefix}, map: "${shortName(name)}")`;
|
|
240
287
|
}
|
|
241
288
|
|
|
242
|
-
function writePlainIndex(
|
|
243
|
-
|
|
289
|
+
function writePlainIndex(props: {
|
|
290
|
+
model: AutoBePrisma.IModel;
|
|
291
|
+
plain: AutoBePrisma.IPlainIndex;
|
|
292
|
+
}): string {
|
|
293
|
+
const name: string = `${props.model.name}_${props.plain.fieldNames.join("_")}_idx`;
|
|
294
|
+
const prefix: string = `@@index([${props.plain.fieldNames.join(", ")}]`;
|
|
295
|
+
if (name.length <= MAX_IDENTIFIER_LENGTH) return `${prefix})`;
|
|
296
|
+
return `${prefix}, map: "${shortName(name)}")`;
|
|
244
297
|
}
|
|
245
298
|
|
|
246
|
-
function writeGinIndex(
|
|
247
|
-
|
|
299
|
+
function writeGinIndex(props: {
|
|
300
|
+
model: AutoBePrisma.IModel;
|
|
301
|
+
gin: AutoBePrisma.IGinIndex;
|
|
302
|
+
}): string {
|
|
303
|
+
const name: string = `${props.model.name}_${props.gin.fieldName}_idx`;
|
|
304
|
+
const prefix: string = `@@index([${props.gin.fieldName}(ops: raw("gin_trgm_ops"))], type: Gin`;
|
|
305
|
+
if (name.length <= MAX_IDENTIFIER_LENGTH) return `${prefix})`;
|
|
306
|
+
return `${prefix}, map: "${shortName(name)}")`;
|
|
248
307
|
}
|
|
249
308
|
|
|
250
309
|
/* -----------------------------------------------------------
|
|
@@ -269,6 +328,16 @@ function indent(content: string): string {
|
|
|
269
328
|
.join("\n");
|
|
270
329
|
}
|
|
271
330
|
|
|
331
|
+
function shortName(name: string): string {
|
|
332
|
+
if (name.length <= MAX_IDENTIFIER_LENGTH) return name;
|
|
333
|
+
const hash: string = crypto
|
|
334
|
+
.createHash("md5")
|
|
335
|
+
.update(name)
|
|
336
|
+
.digest("hex")
|
|
337
|
+
.substring(0, HASH_TRUNCATION_LENGTH);
|
|
338
|
+
return `${name.substring(0, MAX_IDENTIFIER_LENGTH - HASH_TRUNCATION_LENGTH - 1)}_${hash}`;
|
|
339
|
+
}
|
|
340
|
+
|
|
272
341
|
const LOGICAL_TYPES = {
|
|
273
342
|
// native types
|
|
274
343
|
boolean: "Boolean",
|
|
@@ -317,3 +386,5 @@ const SQLITE_MAIN_FILE = StringUtil.trim`
|
|
|
317
386
|
output = "../docs/ERD.md"
|
|
318
387
|
}
|
|
319
388
|
`;
|
|
389
|
+
const MAX_IDENTIFIER_LENGTH = 63;
|
|
390
|
+
const HASH_TRUNCATION_LENGTH = 8;
|