@skalfa/skalfa-api-core 1.0.2
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.
- package/.github/workflows/publish.yml +40 -0
- package/dist/auth/auth.d.ts +19 -0
- package/dist/auth/auth.js +227 -0
- package/dist/auth/auth.js.map +1 -0
- package/dist/auth/index.d.ts +1 -0
- package/dist/auth/index.js +2 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth.util.d.ts +19 -0
- package/dist/auth.util.js +183 -0
- package/dist/auth.util.js.map +1 -0
- package/dist/commands/cli.d.ts +1 -0
- package/dist/commands/cli.js +78 -0
- package/dist/commands/cli.js.map +1 -0
- package/dist/commands/make/basic-controller.d.ts +2 -0
- package/dist/commands/make/basic-controller.js +40 -0
- package/dist/commands/make/basic-controller.js.map +1 -0
- package/dist/commands/make/basic-migration.d.ts +5 -0
- package/dist/commands/make/basic-migration.js +60 -0
- package/dist/commands/make/basic-migration.js.map +1 -0
- package/dist/commands/make/basic-model.d.ts +2 -0
- package/dist/commands/make/basic-model.js +25 -0
- package/dist/commands/make/basic-model.js.map +1 -0
- package/dist/commands/make/basic-seeder.d.ts +3 -0
- package/dist/commands/make/basic-seeder.js +32 -0
- package/dist/commands/make/basic-seeder.js.map +1 -0
- package/dist/commands/make/blueprint.d.ts +2 -0
- package/dist/commands/make/blueprint.js +29 -0
- package/dist/commands/make/blueprint.js.map +1 -0
- package/dist/commands/make/da-migration.d.ts +5 -0
- package/dist/commands/make/da-migration.js +60 -0
- package/dist/commands/make/da-migration.js.map +1 -0
- package/dist/commands/make/light-controller.d.ts +3 -0
- package/dist/commands/make/light-controller.js +54 -0
- package/dist/commands/make/light-controller.js.map +1 -0
- package/dist/commands/make/light-model.d.ts +3 -0
- package/dist/commands/make/light-model.js +50 -0
- package/dist/commands/make/light-model.js.map +1 -0
- package/dist/commands/make/mail.d.ts +2 -0
- package/dist/commands/make/mail.js +41 -0
- package/dist/commands/make/mail.js.map +1 -0
- package/dist/commands/make/notification.d.ts +2 -0
- package/dist/commands/make/notification.js +33 -0
- package/dist/commands/make/notification.js.map +1 -0
- package/dist/commands/make/queue.d.ts +2 -0
- package/dist/commands/make/queue.js +35 -0
- package/dist/commands/make/queue.js.map +1 -0
- package/dist/commands/runner/barrels.d.ts +3 -0
- package/dist/commands/runner/barrels.js +78 -0
- package/dist/commands/runner/barrels.js.map +1 -0
- package/dist/commands/runner/blueprint/controller-generation.d.ts +1 -0
- package/dist/commands/runner/blueprint/controller-generation.js +147 -0
- package/dist/commands/runner/blueprint/controller-generation.js.map +1 -0
- package/dist/commands/runner/blueprint/documentation-generation.d.ts +6 -0
- package/dist/commands/runner/blueprint/documentation-generation.js +337 -0
- package/dist/commands/runner/blueprint/documentation-generation.js.map +1 -0
- package/dist/commands/runner/blueprint/migration-generation.d.ts +1 -0
- package/dist/commands/runner/blueprint/migration-generation.js +120 -0
- package/dist/commands/runner/blueprint/migration-generation.js.map +1 -0
- package/dist/commands/runner/blueprint/model-generation.d.ts +1 -0
- package/dist/commands/runner/blueprint/model-generation.js +122 -0
- package/dist/commands/runner/blueprint/model-generation.js.map +1 -0
- package/dist/commands/runner/blueprint/runner.d.ts +23 -0
- package/dist/commands/runner/blueprint/runner.js +139 -0
- package/dist/commands/runner/blueprint/runner.js.map +1 -0
- package/dist/commands/runner/blueprint/seeder-generation.d.ts +1 -0
- package/dist/commands/runner/blueprint/seeder-generation.js +40 -0
- package/dist/commands/runner/blueprint/seeder-generation.js.map +1 -0
- package/dist/commands/runner/da-migration.d.ts +39 -0
- package/dist/commands/runner/da-migration.js +262 -0
- package/dist/commands/runner/da-migration.js.map +1 -0
- package/dist/commands/runner/migration.d.ts +11 -0
- package/dist/commands/runner/migration.js +188 -0
- package/dist/commands/runner/migration.js.map +1 -0
- package/dist/commands/runner/seeder.d.ts +3 -0
- package/dist/commands/runner/seeder.js +40 -0
- package/dist/commands/runner/seeder.js.map +1 -0
- package/dist/commands/stubs/index.d.ts +14 -0
- package/dist/commands/stubs/index.js +277 -0
- package/dist/commands/stubs/index.js.map +1 -0
- package/dist/context/context.d.ts +7 -0
- package/dist/context/context.js +11 -0
- package/dist/context/context.js.map +1 -0
- package/dist/context/index.d.ts +1 -0
- package/dist/context/index.js +2 -0
- package/dist/context/index.js.map +1 -0
- package/dist/context.util.d.ts +7 -0
- package/dist/context.util.js +11 -0
- package/dist/context.util.js.map +1 -0
- package/dist/controller/controller.d.ts +118 -0
- package/dist/controller/controller.js +147 -0
- package/dist/controller/controller.js.map +1 -0
- package/dist/controller/index.d.ts +1 -0
- package/dist/controller/index.js +2 -0
- package/dist/controller/index.js.map +1 -0
- package/dist/controller.util.d.ts +118 -0
- package/dist/controller.util.js +144 -0
- package/dist/controller.util.js.map +1 -0
- package/dist/conversion/conversion.d.ts +8 -0
- package/dist/conversion/conversion.js +52 -0
- package/dist/conversion/conversion.js.map +1 -0
- package/dist/conversion/index.d.ts +1 -0
- package/dist/conversion/index.js +2 -0
- package/dist/conversion/index.js.map +1 -0
- package/dist/conversion.util.d.ts +8 -0
- package/dist/conversion.util.js +52 -0
- package/dist/conversion.util.js.map +1 -0
- package/dist/db/db.d.ts +84 -0
- package/dist/db/db.js +177 -0
- package/dist/db/db.js.map +1 -0
- package/dist/db/index.d.ts +1 -0
- package/dist/db/index.js +2 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db.util.d.ts +84 -0
- package/dist/db.util.js +177 -0
- package/dist/db.util.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/logger/index.d.ts +1 -0
- package/dist/logger/index.js +2 -0
- package/dist/logger/index.js.map +1 -0
- package/dist/logger/logger.d.ts +30 -0
- package/dist/logger/logger.js +126 -0
- package/dist/logger/logger.js.map +1 -0
- package/dist/logger.util.d.ts +30 -0
- package/dist/logger.util.js +126 -0
- package/dist/logger.util.js.map +1 -0
- package/dist/mail/index.d.ts +1 -0
- package/dist/mail/index.js +2 -0
- package/dist/mail/index.js.map +1 -0
- package/dist/mail/mail.d.ts +21 -0
- package/dist/mail/mail.js +53 -0
- package/dist/mail/mail.js.map +1 -0
- package/dist/mail.util.d.ts +21 -0
- package/dist/mail.util.js +53 -0
- package/dist/mail.util.js.map +1 -0
- package/dist/middleware/index.d.ts +1 -0
- package/dist/middleware/index.js +2 -0
- package/dist/middleware/index.js.map +1 -0
- package/dist/middleware/middleware.d.ts +263 -0
- package/dist/middleware/middleware.js +233 -0
- package/dist/middleware/middleware.js.map +1 -0
- package/dist/middleware.util.d.ts +263 -0
- package/dist/middleware.util.js +233 -0
- package/dist/middleware.util.js.map +1 -0
- package/dist/model/index.d.ts +3 -0
- package/dist/model/index.js +4 -0
- package/dist/model/index.js.map +1 -0
- package/dist/model/model.d.ts +204 -0
- package/dist/model/model.js +1495 -0
- package/dist/model/model.js.map +1 -0
- package/dist/model.util.d.ts +204 -0
- package/dist/model.util.js +1495 -0
- package/dist/model.util.js.map +1 -0
- package/dist/permission/index.d.ts +1 -0
- package/dist/permission/index.js +2 -0
- package/dist/permission/index.js.map +1 -0
- package/dist/permission/permission.d.ts +38 -0
- package/dist/permission/permission.js +91 -0
- package/dist/permission/permission.js.map +1 -0
- package/dist/permission.util.d.ts +38 -0
- package/dist/permission.util.js +91 -0
- package/dist/permission.util.js.map +1 -0
- package/dist/registry/index.d.ts +1 -0
- package/dist/registry/index.js +2 -0
- package/dist/registry/index.js.map +1 -0
- package/dist/registry/registry.d.ts +28 -0
- package/dist/registry/registry.js +19 -0
- package/dist/registry/registry.js.map +1 -0
- package/dist/registry.util.d.ts +28 -0
- package/dist/registry.util.js +19 -0
- package/dist/registry.util.js.map +1 -0
- package/dist/route/index.d.ts +1 -0
- package/dist/route/index.js +2 -0
- package/dist/route/index.js.map +1 -0
- package/dist/route/route.d.ts +1 -0
- package/dist/route/route.js +12 -0
- package/dist/route/route.js.map +1 -0
- package/dist/route.util.d.ts +1 -0
- package/dist/route.util.js +12 -0
- package/dist/route.util.js.map +1 -0
- package/dist/storage/index.d.ts +1 -0
- package/dist/storage/index.js +2 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/storage.d.ts +56 -0
- package/dist/storage/storage.js +86 -0
- package/dist/storage/storage.js.map +1 -0
- package/dist/storage.util.d.ts +56 -0
- package/dist/storage.util.js +82 -0
- package/dist/storage.util.js.map +1 -0
- package/dist/validation/index.d.ts +1 -0
- package/dist/validation/index.js +2 -0
- package/dist/validation/index.js.map +1 -0
- package/dist/validation/validation.d.ts +7 -0
- package/dist/validation/validation.js +245 -0
- package/dist/validation/validation.js.map +1 -0
- package/dist/validation.util.d.ts +7 -0
- package/dist/validation.util.js +237 -0
- package/dist/validation.util.js.map +1 -0
- package/package.json +34 -0
- package/src/auth/auth.ts +282 -0
- package/src/auth/index.ts +1 -0
- package/src/commands/cli.ts +89 -0
- package/src/commands/make/basic-controller.ts +49 -0
- package/src/commands/make/basic-migration.ts +89 -0
- package/src/commands/make/basic-model.ts +32 -0
- package/src/commands/make/basic-seeder.ts +38 -0
- package/src/commands/make/blueprint.ts +36 -0
- package/src/commands/make/da-migration.ts +90 -0
- package/src/commands/make/light-controller.ts +67 -0
- package/src/commands/make/light-model.ts +61 -0
- package/src/commands/make/mail.ts +51 -0
- package/src/commands/make/notification.ts +43 -0
- package/src/commands/make/queue.ts +45 -0
- package/src/commands/runner/barrels.ts +85 -0
- package/src/commands/runner/blueprint/controller-generation.ts +194 -0
- package/src/commands/runner/blueprint/documentation-generation.ts +463 -0
- package/src/commands/runner/blueprint/migration-generation.ts +153 -0
- package/src/commands/runner/blueprint/model-generation.ts +149 -0
- package/src/commands/runner/blueprint/runner.ts +181 -0
- package/src/commands/runner/blueprint/seeder-generation.ts +55 -0
- package/src/commands/runner/da-migration.ts +333 -0
- package/src/commands/runner/migration.ts +245 -0
- package/src/commands/runner/seeder.ts +44 -0
- package/src/commands/stubs/index.ts +289 -0
- package/src/context/context.ts +17 -0
- package/src/context/index.ts +1 -0
- package/src/controller/controller.ts +240 -0
- package/src/controller/index.ts +1 -0
- package/src/conversion/conversion.ts +65 -0
- package/src/conversion/index.ts +1 -0
- package/src/index.ts +22 -0
- package/src/logger/index.ts +1 -0
- package/src/logger/logger.ts +177 -0
- package/src/mail/index.ts +1 -0
- package/src/mail/mail.ts +86 -0
- package/src/middleware/index.ts +1 -0
- package/src/middleware/middleware.ts +289 -0
- package/src/permission/index.ts +1 -0
- package/src/permission/permission.ts +136 -0
- package/src/registry/index.ts +1 -0
- package/src/registry/registry.ts +37 -0
- package/src/route/index.ts +1 -0
- package/src/route/route.ts +12 -0
- package/src/storage/index.ts +1 -0
- package/src/storage/storage.ts +107 -0
- package/src/validation/index.ts +1 -0
- package/src/validation/validation.ts +346 -0
- package/tsconfig.json +23 -0
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { conversion, logger } from "@utils";
|
|
2
|
+
import fs from "fs";
|
|
3
|
+
import path from "path";
|
|
4
|
+
import { lightMigrationStub } from "../../stubs";
|
|
5
|
+
// ==================================>
|
|
6
|
+
// ## Command: Blueprint migration generation
|
|
7
|
+
// ==================================>
|
|
8
|
+
export async function migrationGeneration(model, schema = {}, relations = {}, marker) {
|
|
9
|
+
const name = conversion.strSnake(conversion.strPlural(model.split("/").pop() || ""));
|
|
10
|
+
const basePath = path.join(process.cwd(), "src", "database", "migrations", "0000_00");
|
|
11
|
+
const filename = `${name}.ts`;
|
|
12
|
+
const filePath = path.join(basePath, filename);
|
|
13
|
+
const className = `create${conversion.strPascal(name)}Table`;
|
|
14
|
+
if (!fs.existsSync(basePath)) {
|
|
15
|
+
fs.mkdirSync(basePath, { recursive: true });
|
|
16
|
+
}
|
|
17
|
+
const existingMigrations = fs.readdirSync(basePath).filter((f) => f.includes(`${name}`));
|
|
18
|
+
for (const file of existingMigrations) {
|
|
19
|
+
if (fs.existsSync(path.join(basePath, file))) {
|
|
20
|
+
const content = fs.readFileSync(path.join(basePath, file), "utf-8");
|
|
21
|
+
if (!content.includes("AUTO-GENERATED BY BLUEPRINT")) {
|
|
22
|
+
logger.info(`Skip overridden file: ${name}.ts`);
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
const migrationFields = [];
|
|
28
|
+
const pivots = [];
|
|
29
|
+
if (relations) {
|
|
30
|
+
for (const target of extractBelongsTo(relations)) {
|
|
31
|
+
const [fk, table, isFk] = getTargetRelation(target);
|
|
32
|
+
if (schema[fk])
|
|
33
|
+
continue;
|
|
34
|
+
migrationFields.push(`table.foreignIdFor("${table}"${isFk ? `, "${fk}"` : ""})`);
|
|
35
|
+
}
|
|
36
|
+
for (const target of extractBelongsToMany(relations)) {
|
|
37
|
+
const sourceTable = name;
|
|
38
|
+
const targetTable = conversion.strSnake(conversion.strPlural(target));
|
|
39
|
+
if (sourceTable < targetTable)
|
|
40
|
+
continue;
|
|
41
|
+
const pivotTable = getTargetTableRelation(sourceTable, targetTable);
|
|
42
|
+
pivots.push(` await knex.schema.createTable("${pivotTable}", (table) => {`);
|
|
43
|
+
pivots.push(` table.foreignIdFor("${sourceTable}")`);
|
|
44
|
+
pivots.push(` table.foreignIdFor("${targetTable}")`);
|
|
45
|
+
pivots.push(` })`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
for (const [column, definition] of Object.entries(schema)) {
|
|
49
|
+
const typeMatch = /type:(\w+),?(\d+)?/.exec(definition);
|
|
50
|
+
const type = typeMatch?.[1] ?? "string";
|
|
51
|
+
const length = typeMatch?.[2];
|
|
52
|
+
let columnDef = "";
|
|
53
|
+
switch (type) {
|
|
54
|
+
case "bigInt":
|
|
55
|
+
case "bigint":
|
|
56
|
+
case "bigInteger":
|
|
57
|
+
columnDef = `table.bigInteger("${column}").unsigned()`;
|
|
58
|
+
break;
|
|
59
|
+
case "int":
|
|
60
|
+
case "integer":
|
|
61
|
+
columnDef = `table.integer("${column}")`;
|
|
62
|
+
break;
|
|
63
|
+
case "string":
|
|
64
|
+
columnDef = length
|
|
65
|
+
? `table.string("${column}", ${length})`
|
|
66
|
+
: `table.string("${column}")`;
|
|
67
|
+
break;
|
|
68
|
+
case "text":
|
|
69
|
+
columnDef = `table.text("${column}")`;
|
|
70
|
+
break;
|
|
71
|
+
case "foreignIdFor":
|
|
72
|
+
columnDef = `table.foreignIdFor("${length}")`;
|
|
73
|
+
break;
|
|
74
|
+
default:
|
|
75
|
+
columnDef = `table.${type}("${column}")`;
|
|
76
|
+
break;
|
|
77
|
+
}
|
|
78
|
+
if (definition.includes("unique")) {
|
|
79
|
+
columnDef += `.unique()`;
|
|
80
|
+
}
|
|
81
|
+
if (definition.includes("required")) {
|
|
82
|
+
columnDef += `.notNullable()`;
|
|
83
|
+
}
|
|
84
|
+
if (definition.includes("index")) {
|
|
85
|
+
columnDef += `.index()`;
|
|
86
|
+
}
|
|
87
|
+
migrationFields.push(columnDef);
|
|
88
|
+
}
|
|
89
|
+
const migrationSchema = migrationFields.map((f) => ` ${f}`).join("\n");
|
|
90
|
+
let stub = lightMigrationStub;
|
|
91
|
+
stub = stub
|
|
92
|
+
.replace(/{{\s*marker\s*}}/g, marker)
|
|
93
|
+
.replace(/{{\s*className\s*}}/g, className)
|
|
94
|
+
.replace(/{{\s*tableName\s*}}/g, name)
|
|
95
|
+
.replace(/{{\s*schemas\s*}}/g, migrationSchema)
|
|
96
|
+
.replace(/{{\s*pivot\s*}}/g, pivots.join('\n'));
|
|
97
|
+
fs.writeFileSync(filePath, stub, "utf-8");
|
|
98
|
+
return true;
|
|
99
|
+
}
|
|
100
|
+
function extractBelongsTo(relations) {
|
|
101
|
+
return Object.values(relations)
|
|
102
|
+
.filter(r => !r.includes("[]"))
|
|
103
|
+
.map(r => r.replace(":", "").trim());
|
|
104
|
+
}
|
|
105
|
+
function getTargetRelation(model) {
|
|
106
|
+
const base = model?.split(",")?.[0].split("/").pop();
|
|
107
|
+
const fk = model?.split(",")?.[1] || `${conversion.strSnake(base)}_id`;
|
|
108
|
+
return [fk, `${conversion.strPlural(conversion.strSnake(base))}`, !!model?.split(",")?.[1]];
|
|
109
|
+
}
|
|
110
|
+
function extractBelongsToMany(relations) {
|
|
111
|
+
return Object.values(relations)
|
|
112
|
+
.filter(r => r.startsWith("[]:"))
|
|
113
|
+
.map(r => r.replace("[]:", "").trim());
|
|
114
|
+
}
|
|
115
|
+
function getTargetTableRelation(source, target) {
|
|
116
|
+
const a = conversion.strSnake(conversion.strPlural(source.split("/").pop()));
|
|
117
|
+
const b = conversion.strSnake(conversion.strPlural(target.split("/").pop()));
|
|
118
|
+
return `${a}_has_${b}`;
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=migration-generation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migration-generation.js","sourceRoot":"","sources":["../../../../src/commands/runner/blueprint/migration-generation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function modelGeneration(model: string, schema: Record<string, string> | undefined, relations: Record<string, string> | undefined, marker: string): Promise<boolean>;
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
import { conversion } from "@utils";
|
|
3
|
+
import { resolveBlueprintPath } from "./runner";
|
|
4
|
+
import { lightModelStub } from "../../stubs";
|
|
5
|
+
// ============================>
|
|
6
|
+
// ## Command: blueprint model generation
|
|
7
|
+
// ============================>
|
|
8
|
+
export async function modelGeneration(model, schema = {}, relations = {}, marker) {
|
|
9
|
+
const resolvePath = resolveBlueprintPath(model, "model");
|
|
10
|
+
if (!resolvePath) {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
const { name, folder, basePath, filePath } = resolvePath;
|
|
14
|
+
const modelName = conversion.strPascal(name);
|
|
15
|
+
let imports = [];
|
|
16
|
+
let importUtils = ["Field"];
|
|
17
|
+
// ? Fields
|
|
18
|
+
const fields = [];
|
|
19
|
+
for (const [name, def] of Object.entries(schema)) {
|
|
20
|
+
const flags = [];
|
|
21
|
+
const typeMatch = /type:(\w+),?(\d+)?/.exec(def);
|
|
22
|
+
const type = typeMatch?.[1] ?? "string";
|
|
23
|
+
let columnType = "any";
|
|
24
|
+
switch (type) {
|
|
25
|
+
case "bigInt":
|
|
26
|
+
case "bigint":
|
|
27
|
+
case "bigInteger":
|
|
28
|
+
case "int":
|
|
29
|
+
case "integer":
|
|
30
|
+
case "float":
|
|
31
|
+
columnType = "number";
|
|
32
|
+
break;
|
|
33
|
+
case "string":
|
|
34
|
+
case "text":
|
|
35
|
+
case "time":
|
|
36
|
+
columnType = "string";
|
|
37
|
+
break;
|
|
38
|
+
case "date":
|
|
39
|
+
case "timestamp":
|
|
40
|
+
columnType = "Date";
|
|
41
|
+
break;
|
|
42
|
+
case "json":
|
|
43
|
+
columnType = "Record<string,any>";
|
|
44
|
+
break;
|
|
45
|
+
case "boolean":
|
|
46
|
+
columnType = "boolean";
|
|
47
|
+
break;
|
|
48
|
+
default:
|
|
49
|
+
columnType = "any";
|
|
50
|
+
break;
|
|
51
|
+
}
|
|
52
|
+
if (def.includes("fillable"))
|
|
53
|
+
flags.push("fillable");
|
|
54
|
+
if (def.includes("searchable"))
|
|
55
|
+
flags.push("searchable");
|
|
56
|
+
if (def.includes("selectable"))
|
|
57
|
+
flags.push("selectable");
|
|
58
|
+
if (def.includes("hidden"))
|
|
59
|
+
flags.push("hidden");
|
|
60
|
+
const decorator = flags.length ? `@Field(${JSON.stringify(flags)})` : "";
|
|
61
|
+
fields.push([
|
|
62
|
+
` ${decorator}`,
|
|
63
|
+
` ${name}!: ${columnType}`
|
|
64
|
+
].join("\n"));
|
|
65
|
+
}
|
|
66
|
+
// ? Relations
|
|
67
|
+
const relationFields = [];
|
|
68
|
+
let importRelations = [];
|
|
69
|
+
for (const [name, def] of Object.entries(relations)) {
|
|
70
|
+
let type = "BelongsTo";
|
|
71
|
+
let target = conversion.strPascal(def.replace(/\[\]|\[1\]|:/g, "").split(" ")[0].split(",")[0]);
|
|
72
|
+
const fk = def.split(" ")[0].split(",")[1] || null;
|
|
73
|
+
if (def.startsWith("[]:"))
|
|
74
|
+
type = "BelongsToMany";
|
|
75
|
+
else if (def.startsWith("[]"))
|
|
76
|
+
type = "HasMany";
|
|
77
|
+
else if (def.startsWith("[1]"))
|
|
78
|
+
type = "HasOne";
|
|
79
|
+
!importUtils.includes(type) && importUtils.push(type);
|
|
80
|
+
!importRelations.includes(target) && importRelations.push(`${target}`);
|
|
81
|
+
const isMany = type === "HasMany" || type === "BelongsToMany";
|
|
82
|
+
relationFields.push([
|
|
83
|
+
...(type === "BelongsTo" ? [` ${fk ? fk : conversion.strSnake(target) + "_id"}!: number\n`] : []),
|
|
84
|
+
` @${type}(() => ${target}${fk ? `, { foreignKey: "${fk}" }` : ""})`,
|
|
85
|
+
` ${name}!: ${isMany ? `${target}[]` : target}`
|
|
86
|
+
].join("\n"));
|
|
87
|
+
}
|
|
88
|
+
if (importRelations.length) {
|
|
89
|
+
imports.push(`import { ${importRelations.join(", ")} } from '@models'`);
|
|
90
|
+
}
|
|
91
|
+
let stub = lightModelStub;
|
|
92
|
+
const strImportUtils = importUtils?.length ? ", " + importUtils.join(", ") : "";
|
|
93
|
+
stub = stub
|
|
94
|
+
.replace(/{{\s*marker\s*}}/g, marker)
|
|
95
|
+
.replace(/{{\s*name\s*}}/g, modelName)
|
|
96
|
+
.replace(/{{\s*fields\s*}}/g, fields.join("\n\n"))
|
|
97
|
+
.replace(/{{\s*relations\s*}}/g, relationFields.join("\n\n"))
|
|
98
|
+
.replace(/{{\s*attributes\s*}}/g, "")
|
|
99
|
+
.replace(/{{\s*import\s*}}/g, imports.join("\n"))
|
|
100
|
+
.replace(/{{\s*import_utils\s*}}/g, strImportUtils);
|
|
101
|
+
fs.writeFileSync(filePath, stub, "utf-8");
|
|
102
|
+
for (const def of Object.values(relations)) {
|
|
103
|
+
if (!def.startsWith("[]:"))
|
|
104
|
+
continue;
|
|
105
|
+
const target = def.replace("[]:", "").trim();
|
|
106
|
+
generatePivotModel(model, target, marker, basePath);
|
|
107
|
+
}
|
|
108
|
+
return true;
|
|
109
|
+
}
|
|
110
|
+
function generatePivotModel(sourceModel, targetModel, marker, basePath) {
|
|
111
|
+
if (sourceModel > targetModel)
|
|
112
|
+
return;
|
|
113
|
+
const a = sourceModel.split("/").pop();
|
|
114
|
+
const b = targetModel.split("/").pop();
|
|
115
|
+
const pivotModelName = conversion.strPascal(a) + "Has" + conversion.strPascal(b);
|
|
116
|
+
const pivotRelations = {
|
|
117
|
+
[conversion.strSnake(a)]: a,
|
|
118
|
+
[conversion.strSnake(b)]: b
|
|
119
|
+
};
|
|
120
|
+
modelGeneration(`${basePath}/${conversion.strSlug(pivotModelName)}`, {}, pivotRelations, marker);
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=model-generation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-generation.js","sourceRoot":"","sources":["../../../../src/commands/runner/blueprint/model-generation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
export interface BlueprintSchema {
|
|
3
|
+
model: string;
|
|
4
|
+
schema?: Record<string, string>;
|
|
5
|
+
relations?: Record<string, string>;
|
|
6
|
+
controllers?: Record<string, string> | false;
|
|
7
|
+
seeders?: any[][];
|
|
8
|
+
migrations?: boolean;
|
|
9
|
+
postman?: boolean;
|
|
10
|
+
mermaid?: boolean;
|
|
11
|
+
}
|
|
12
|
+
export declare const blueprintCommand: Command;
|
|
13
|
+
export declare function runBlueprints(options?: {
|
|
14
|
+
only?: string[];
|
|
15
|
+
}): Promise<void>;
|
|
16
|
+
type BlueprintFileType = "model" | "controller";
|
|
17
|
+
export declare function resolveBlueprintPath(blueprintPath: string, type: BlueprintFileType): {
|
|
18
|
+
name: string;
|
|
19
|
+
folder: string;
|
|
20
|
+
basePath: string;
|
|
21
|
+
filePath: string;
|
|
22
|
+
} | null;
|
|
23
|
+
export {};
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import { Command } from "commander";
|
|
4
|
+
import { conversion, logger } from "@utils";
|
|
5
|
+
import { modelGeneration } from "./model-generation";
|
|
6
|
+
import { migrationGeneration } from "./migration-generation";
|
|
7
|
+
import { controllerGeneration } from "./controller-generation";
|
|
8
|
+
import { seederGeneration } from "./seeder-generation";
|
|
9
|
+
import { generateDrawioEntityDocumentation, generateMermaidEntityDocumentation, generatePostmanAPIDocumentation } from "./documentation-generation";
|
|
10
|
+
import { exec as execCb } from "child_process";
|
|
11
|
+
import { promisify } from "util";
|
|
12
|
+
const exec = promisify(execCb);
|
|
13
|
+
const blueprintMarker = `// ============================================
|
|
14
|
+
// ## file THIS FILE IS AUTO-GENERATED BY BLUEPRINT
|
|
15
|
+
// ?? Blueprint : {{ blueprint }}
|
|
16
|
+
// !! If this comment is removed, blueprint engine WILL NOT override this file.
|
|
17
|
+
// ============================================
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
`;
|
|
21
|
+
// =====================================>
|
|
22
|
+
// ## Command: blueprint
|
|
23
|
+
// =====================================>
|
|
24
|
+
export const blueprintCommand = new Command("blueprint")
|
|
25
|
+
.option("-o, --only <names...>", "Run only specific blueprints")
|
|
26
|
+
.description("Run blueprints")
|
|
27
|
+
.action(async (opts) => {
|
|
28
|
+
await runBlueprints({ only: opts.only });
|
|
29
|
+
logger.info("Success run all blueprints!");
|
|
30
|
+
await exec("bunx barrelsby -c barrels.json", { cwd: path.resolve() });
|
|
31
|
+
logger.info("Success generate auto import all modules!");
|
|
32
|
+
process.exit(0);
|
|
33
|
+
});
|
|
34
|
+
// =======================>
|
|
35
|
+
// ## Command: Blueprint engine
|
|
36
|
+
// =======================>
|
|
37
|
+
export async function runBlueprints(options) {
|
|
38
|
+
const loaded = loadBlueprintFiles();
|
|
39
|
+
const postmanSchemas = [];
|
|
40
|
+
for (const file of loaded) {
|
|
41
|
+
const name = file.file.replace(".blueprint.json", "");
|
|
42
|
+
if (options?.only && !options.only.includes(name))
|
|
43
|
+
continue;
|
|
44
|
+
const marker = blueprintMarker.replace(/{{ blueprint }}/g, file.file);
|
|
45
|
+
for (const struct of file.blueprints) {
|
|
46
|
+
const schema = struct.schema ?? {};
|
|
47
|
+
const relations = struct.relations ?? {};
|
|
48
|
+
const seeders = struct.seeders ?? [];
|
|
49
|
+
const controllers = struct.controllers ?? [];
|
|
50
|
+
await modelGeneration(struct.model, schema, relations, marker);
|
|
51
|
+
if (struct.migrations !== false) {
|
|
52
|
+
await migrationGeneration(struct.model, schema, relations, marker);
|
|
53
|
+
}
|
|
54
|
+
if (controllers !== false) {
|
|
55
|
+
if (Array.isArray(controllers) && !!controllers.length) {
|
|
56
|
+
controllers.map(async (item) => {
|
|
57
|
+
const [controller, route, permission] = item.split(" ");
|
|
58
|
+
await controllerGeneration(struct.model, schema, relations, controller, route || controller, permission, marker);
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
const permission = Math.floor(Math.random() * 1000).toString().padStart(3, "0");
|
|
63
|
+
await controllerGeneration(struct.model, schema, relations, struct.model, struct.model, permission, marker);
|
|
64
|
+
}
|
|
65
|
+
if (struct.postman !== false) {
|
|
66
|
+
const controllerRoutes = Array.isArray(controllers) && controllers.length ? controllers.map(c => {
|
|
67
|
+
const [controller, route] = c.split(" ");
|
|
68
|
+
return route || controller;
|
|
69
|
+
}) : [struct.model];
|
|
70
|
+
postmanSchemas.push({
|
|
71
|
+
model: struct.model,
|
|
72
|
+
schema,
|
|
73
|
+
controllers: controllerRoutes
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
if (seeders.length) {
|
|
78
|
+
await seederGeneration(struct.model, schema, seeders, marker);
|
|
79
|
+
}
|
|
80
|
+
if (struct.mermaid !== false) {
|
|
81
|
+
await generateMermaidEntityDocumentation(file.file, file.blueprints);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
await generateDrawioEntityDocumentation(loaded);
|
|
86
|
+
await generatePostmanAPIDocumentation(postmanSchemas);
|
|
87
|
+
}
|
|
88
|
+
// =======================>
|
|
89
|
+
// ## Command: Blueprint load json files
|
|
90
|
+
// =======================>
|
|
91
|
+
function loadBlueprintFiles(dir = "blueprints") {
|
|
92
|
+
const basePath = path.join(process.cwd(), dir);
|
|
93
|
+
if (!fs.existsSync(basePath)) {
|
|
94
|
+
throw new Error("Blueprint folder not found");
|
|
95
|
+
}
|
|
96
|
+
return fs.readdirSync(basePath)
|
|
97
|
+
.filter(f => f.endsWith(".blueprint.json"))
|
|
98
|
+
.map(file => {
|
|
99
|
+
const fullPath = path.join(basePath, file);
|
|
100
|
+
const content = JSON.parse(fs.readFileSync(fullPath, "utf-8"));
|
|
101
|
+
if (!Array.isArray(content)) {
|
|
102
|
+
throw new Error(`${file} must export array of blueprints`);
|
|
103
|
+
}
|
|
104
|
+
return {
|
|
105
|
+
file,
|
|
106
|
+
blueprints: content
|
|
107
|
+
};
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
const TYPE_MAP = {
|
|
111
|
+
model: {
|
|
112
|
+
root: "src/models",
|
|
113
|
+
suffix: ".model",
|
|
114
|
+
},
|
|
115
|
+
controller: {
|
|
116
|
+
root: "src/controllers",
|
|
117
|
+
suffix: ".controller",
|
|
118
|
+
},
|
|
119
|
+
};
|
|
120
|
+
export function resolveBlueprintPath(blueprintPath, type) {
|
|
121
|
+
const parts = blueprintPath.split("/").filter(Boolean);
|
|
122
|
+
const name = parts.pop();
|
|
123
|
+
const folder = parts.join("/");
|
|
124
|
+
const config = TYPE_MAP[type];
|
|
125
|
+
const basePath = path.join(process.cwd(), config.root, folder);
|
|
126
|
+
const filePath = path.join(basePath, `${conversion.strSlug(name)}${config.suffix}.ts`);
|
|
127
|
+
if (fs.existsSync(filePath)) {
|
|
128
|
+
const content = fs.readFileSync(filePath, "utf-8");
|
|
129
|
+
if (!content.includes("AUTO-GENERATED BY BLUEPRINT")) {
|
|
130
|
+
logger.info(`Skip overridden file: ${filePath}`);
|
|
131
|
+
return null;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
if (!fs.existsSync(basePath)) {
|
|
135
|
+
fs.mkdirSync(basePath, { recursive: true });
|
|
136
|
+
}
|
|
137
|
+
return { name, folder, basePath, filePath };
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../../../src/commands/runner/blueprint/runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function seederGeneration(model: string, schema: Record<string, string> | undefined, data: any[][] | undefined, marker: string): Promise<boolean>;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { conversion, logger } from "@utils";
|
|
2
|
+
import fs from "fs";
|
|
3
|
+
import path from "path";
|
|
4
|
+
import { lightSeederStub } from "../../stubs";
|
|
5
|
+
// =================================>
|
|
6
|
+
// ## Command: Blueprint seeder generation
|
|
7
|
+
// =================================>
|
|
8
|
+
export async function seederGeneration(model, schema = {}, data = [], marker) {
|
|
9
|
+
const modelName = conversion.strPascal(model?.split("/")?.pop() || "");
|
|
10
|
+
const name = modelName + "Seeder";
|
|
11
|
+
const basePath = path.join(process.cwd(), "src", "database", "seeders");
|
|
12
|
+
const filename = conversion.strSlug(modelName);
|
|
13
|
+
const filePath = path.join(basePath, `${filename}.seeder.ts`);
|
|
14
|
+
if (fs.existsSync(filePath)) {
|
|
15
|
+
const content = fs.readFileSync(filePath, "utf-8");
|
|
16
|
+
if (!content.includes("AUTO-GENERATED BY BLUEPRINT")) {
|
|
17
|
+
logger.info(`Skip overridden file: ${filePath}`);
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
const schemaKeys = Object.keys(schema);
|
|
22
|
+
const seeders = data.map((row) => ` {${row
|
|
23
|
+
.map((val, idx) => {
|
|
24
|
+
const col = schemaKeys[idx];
|
|
25
|
+
return `"${col}": ${isNaN(val) ? `"${val}"` : val}`;
|
|
26
|
+
})
|
|
27
|
+
.join(", ")}}`).join(",\n ");
|
|
28
|
+
let stub = lightSeederStub;
|
|
29
|
+
stub = stub
|
|
30
|
+
.replace(/{{\s*marker\s*}}/g, marker)
|
|
31
|
+
.replace(/{{\s*name\s*}}/g, name)
|
|
32
|
+
.replace(/{{\s*model\s*}}/g, modelName)
|
|
33
|
+
.replace(/{{\s*seeders\s*}}/g, seeders);
|
|
34
|
+
if (!fs.existsSync(basePath)) {
|
|
35
|
+
fs.mkdirSync(basePath, { recursive: true });
|
|
36
|
+
}
|
|
37
|
+
fs.writeFileSync(filePath, stub, "utf-8");
|
|
38
|
+
return true;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=seeder-generation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seeder-generation.js","sourceRoot":"","sources":["../../../../src/commands/runner/blueprint/seeder-generation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC5C,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,qCAAqC;AACrC,0CAA0C;AAC1C,qCAAqC;AACrC,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,KAAa,EACb,SAAiC,EAAE,EACnC,OAAgB,EAAE,EAClB,MAAc;IAEd,MAAM,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;IACvE,MAAM,IAAI,GAAG,SAAS,GAAG,QAAQ,CAAC;IAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;IACxE,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,QAAQ,YAAY,CAAC,CAAC;IAE9D,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAEnD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,6BAA6B,CAAC,EAAE,CAAC;YACrD,MAAM,CAAC,IAAI,CAAC,yBAAyB,QAAQ,EAAE,CAAC,CAAC;YACjD,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAEvC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAC/B,MAAM,GAAG;SACN,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAChB,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;QAC5B,OAAO,IAAI,GAAG,MAAM,KAAK,CAAC,GAAU,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;IAC7D,CAAC,CAAC;SACH,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAElC,IAAI,IAAI,GAAG,eAAe,CAAC;IAE3B,IAAI,GAAG,IAAI;SACR,OAAO,CAAC,mBAAmB,EAAE,MAAM,CAAC;SACpC,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC;SAChC,OAAO,CAAC,kBAAkB,EAAE,SAAS,CAAC;SACtC,OAAO,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC;IAE1C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAE1C,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
export declare const daMigrateCommand: Command;
|
|
3
|
+
export declare const daMigrateFreshCommand: Command;
|
|
4
|
+
export declare abstract class DAMigration {
|
|
5
|
+
raw(query: string): Promise<void>;
|
|
6
|
+
protected exec(query: string): Promise<void>;
|
|
7
|
+
createTable(name: string, callback: (table: TableBuilder) => void, options?: Partial<TableOptions>): Promise<void>;
|
|
8
|
+
dropTable(name: string): Promise<void>;
|
|
9
|
+
alterTable(name: string, callback: (alter: AlterBuilder) => void): Promise<void>;
|
|
10
|
+
}
|
|
11
|
+
export interface TableOptions {
|
|
12
|
+
engine: string;
|
|
13
|
+
orderBy: string[];
|
|
14
|
+
partitionBy?: string;
|
|
15
|
+
ttl?: string;
|
|
16
|
+
}
|
|
17
|
+
export declare class TableBuilder {
|
|
18
|
+
private table;
|
|
19
|
+
private columns;
|
|
20
|
+
constructor(table: string);
|
|
21
|
+
uuid(name?: string): void;
|
|
22
|
+
string(name: string): void;
|
|
23
|
+
uint64(name: string): void;
|
|
24
|
+
int32(name: string): void;
|
|
25
|
+
json(name: string): void;
|
|
26
|
+
dateTime(name: string): void;
|
|
27
|
+
build(options?: Partial<TableOptions>): string;
|
|
28
|
+
}
|
|
29
|
+
export declare class AlterBuilder {
|
|
30
|
+
private table;
|
|
31
|
+
private actions;
|
|
32
|
+
constructor(table: string);
|
|
33
|
+
addColumn(name: string, type: string, defaultValue?: any): void;
|
|
34
|
+
dropColumn(name: string): void;
|
|
35
|
+
modifyColumn(name: string, newType: string): void;
|
|
36
|
+
commentColumn(name: string, comment: string): void;
|
|
37
|
+
private format;
|
|
38
|
+
build(): string;
|
|
39
|
+
}
|