@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.
Files changed (249) hide show
  1. package/.github/workflows/publish.yml +40 -0
  2. package/dist/auth/auth.d.ts +19 -0
  3. package/dist/auth/auth.js +227 -0
  4. package/dist/auth/auth.js.map +1 -0
  5. package/dist/auth/index.d.ts +1 -0
  6. package/dist/auth/index.js +2 -0
  7. package/dist/auth/index.js.map +1 -0
  8. package/dist/auth.util.d.ts +19 -0
  9. package/dist/auth.util.js +183 -0
  10. package/dist/auth.util.js.map +1 -0
  11. package/dist/commands/cli.d.ts +1 -0
  12. package/dist/commands/cli.js +78 -0
  13. package/dist/commands/cli.js.map +1 -0
  14. package/dist/commands/make/basic-controller.d.ts +2 -0
  15. package/dist/commands/make/basic-controller.js +40 -0
  16. package/dist/commands/make/basic-controller.js.map +1 -0
  17. package/dist/commands/make/basic-migration.d.ts +5 -0
  18. package/dist/commands/make/basic-migration.js +60 -0
  19. package/dist/commands/make/basic-migration.js.map +1 -0
  20. package/dist/commands/make/basic-model.d.ts +2 -0
  21. package/dist/commands/make/basic-model.js +25 -0
  22. package/dist/commands/make/basic-model.js.map +1 -0
  23. package/dist/commands/make/basic-seeder.d.ts +3 -0
  24. package/dist/commands/make/basic-seeder.js +32 -0
  25. package/dist/commands/make/basic-seeder.js.map +1 -0
  26. package/dist/commands/make/blueprint.d.ts +2 -0
  27. package/dist/commands/make/blueprint.js +29 -0
  28. package/dist/commands/make/blueprint.js.map +1 -0
  29. package/dist/commands/make/da-migration.d.ts +5 -0
  30. package/dist/commands/make/da-migration.js +60 -0
  31. package/dist/commands/make/da-migration.js.map +1 -0
  32. package/dist/commands/make/light-controller.d.ts +3 -0
  33. package/dist/commands/make/light-controller.js +54 -0
  34. package/dist/commands/make/light-controller.js.map +1 -0
  35. package/dist/commands/make/light-model.d.ts +3 -0
  36. package/dist/commands/make/light-model.js +50 -0
  37. package/dist/commands/make/light-model.js.map +1 -0
  38. package/dist/commands/make/mail.d.ts +2 -0
  39. package/dist/commands/make/mail.js +41 -0
  40. package/dist/commands/make/mail.js.map +1 -0
  41. package/dist/commands/make/notification.d.ts +2 -0
  42. package/dist/commands/make/notification.js +33 -0
  43. package/dist/commands/make/notification.js.map +1 -0
  44. package/dist/commands/make/queue.d.ts +2 -0
  45. package/dist/commands/make/queue.js +35 -0
  46. package/dist/commands/make/queue.js.map +1 -0
  47. package/dist/commands/runner/barrels.d.ts +3 -0
  48. package/dist/commands/runner/barrels.js +78 -0
  49. package/dist/commands/runner/barrels.js.map +1 -0
  50. package/dist/commands/runner/blueprint/controller-generation.d.ts +1 -0
  51. package/dist/commands/runner/blueprint/controller-generation.js +147 -0
  52. package/dist/commands/runner/blueprint/controller-generation.js.map +1 -0
  53. package/dist/commands/runner/blueprint/documentation-generation.d.ts +6 -0
  54. package/dist/commands/runner/blueprint/documentation-generation.js +337 -0
  55. package/dist/commands/runner/blueprint/documentation-generation.js.map +1 -0
  56. package/dist/commands/runner/blueprint/migration-generation.d.ts +1 -0
  57. package/dist/commands/runner/blueprint/migration-generation.js +120 -0
  58. package/dist/commands/runner/blueprint/migration-generation.js.map +1 -0
  59. package/dist/commands/runner/blueprint/model-generation.d.ts +1 -0
  60. package/dist/commands/runner/blueprint/model-generation.js +122 -0
  61. package/dist/commands/runner/blueprint/model-generation.js.map +1 -0
  62. package/dist/commands/runner/blueprint/runner.d.ts +23 -0
  63. package/dist/commands/runner/blueprint/runner.js +139 -0
  64. package/dist/commands/runner/blueprint/runner.js.map +1 -0
  65. package/dist/commands/runner/blueprint/seeder-generation.d.ts +1 -0
  66. package/dist/commands/runner/blueprint/seeder-generation.js +40 -0
  67. package/dist/commands/runner/blueprint/seeder-generation.js.map +1 -0
  68. package/dist/commands/runner/da-migration.d.ts +39 -0
  69. package/dist/commands/runner/da-migration.js +262 -0
  70. package/dist/commands/runner/da-migration.js.map +1 -0
  71. package/dist/commands/runner/migration.d.ts +11 -0
  72. package/dist/commands/runner/migration.js +188 -0
  73. package/dist/commands/runner/migration.js.map +1 -0
  74. package/dist/commands/runner/seeder.d.ts +3 -0
  75. package/dist/commands/runner/seeder.js +40 -0
  76. package/dist/commands/runner/seeder.js.map +1 -0
  77. package/dist/commands/stubs/index.d.ts +14 -0
  78. package/dist/commands/stubs/index.js +277 -0
  79. package/dist/commands/stubs/index.js.map +1 -0
  80. package/dist/context/context.d.ts +7 -0
  81. package/dist/context/context.js +11 -0
  82. package/dist/context/context.js.map +1 -0
  83. package/dist/context/index.d.ts +1 -0
  84. package/dist/context/index.js +2 -0
  85. package/dist/context/index.js.map +1 -0
  86. package/dist/context.util.d.ts +7 -0
  87. package/dist/context.util.js +11 -0
  88. package/dist/context.util.js.map +1 -0
  89. package/dist/controller/controller.d.ts +118 -0
  90. package/dist/controller/controller.js +147 -0
  91. package/dist/controller/controller.js.map +1 -0
  92. package/dist/controller/index.d.ts +1 -0
  93. package/dist/controller/index.js +2 -0
  94. package/dist/controller/index.js.map +1 -0
  95. package/dist/controller.util.d.ts +118 -0
  96. package/dist/controller.util.js +144 -0
  97. package/dist/controller.util.js.map +1 -0
  98. package/dist/conversion/conversion.d.ts +8 -0
  99. package/dist/conversion/conversion.js +52 -0
  100. package/dist/conversion/conversion.js.map +1 -0
  101. package/dist/conversion/index.d.ts +1 -0
  102. package/dist/conversion/index.js +2 -0
  103. package/dist/conversion/index.js.map +1 -0
  104. package/dist/conversion.util.d.ts +8 -0
  105. package/dist/conversion.util.js +52 -0
  106. package/dist/conversion.util.js.map +1 -0
  107. package/dist/db/db.d.ts +84 -0
  108. package/dist/db/db.js +177 -0
  109. package/dist/db/db.js.map +1 -0
  110. package/dist/db/index.d.ts +1 -0
  111. package/dist/db/index.js +2 -0
  112. package/dist/db/index.js.map +1 -0
  113. package/dist/db.util.d.ts +84 -0
  114. package/dist/db.util.js +177 -0
  115. package/dist/db.util.js.map +1 -0
  116. package/dist/index.d.ts +21 -0
  117. package/dist/index.js +14 -0
  118. package/dist/index.js.map +1 -0
  119. package/dist/logger/index.d.ts +1 -0
  120. package/dist/logger/index.js +2 -0
  121. package/dist/logger/index.js.map +1 -0
  122. package/dist/logger/logger.d.ts +30 -0
  123. package/dist/logger/logger.js +126 -0
  124. package/dist/logger/logger.js.map +1 -0
  125. package/dist/logger.util.d.ts +30 -0
  126. package/dist/logger.util.js +126 -0
  127. package/dist/logger.util.js.map +1 -0
  128. package/dist/mail/index.d.ts +1 -0
  129. package/dist/mail/index.js +2 -0
  130. package/dist/mail/index.js.map +1 -0
  131. package/dist/mail/mail.d.ts +21 -0
  132. package/dist/mail/mail.js +53 -0
  133. package/dist/mail/mail.js.map +1 -0
  134. package/dist/mail.util.d.ts +21 -0
  135. package/dist/mail.util.js +53 -0
  136. package/dist/mail.util.js.map +1 -0
  137. package/dist/middleware/index.d.ts +1 -0
  138. package/dist/middleware/index.js +2 -0
  139. package/dist/middleware/index.js.map +1 -0
  140. package/dist/middleware/middleware.d.ts +263 -0
  141. package/dist/middleware/middleware.js +233 -0
  142. package/dist/middleware/middleware.js.map +1 -0
  143. package/dist/middleware.util.d.ts +263 -0
  144. package/dist/middleware.util.js +233 -0
  145. package/dist/middleware.util.js.map +1 -0
  146. package/dist/model/index.d.ts +3 -0
  147. package/dist/model/index.js +4 -0
  148. package/dist/model/index.js.map +1 -0
  149. package/dist/model/model.d.ts +204 -0
  150. package/dist/model/model.js +1495 -0
  151. package/dist/model/model.js.map +1 -0
  152. package/dist/model.util.d.ts +204 -0
  153. package/dist/model.util.js +1495 -0
  154. package/dist/model.util.js.map +1 -0
  155. package/dist/permission/index.d.ts +1 -0
  156. package/dist/permission/index.js +2 -0
  157. package/dist/permission/index.js.map +1 -0
  158. package/dist/permission/permission.d.ts +38 -0
  159. package/dist/permission/permission.js +91 -0
  160. package/dist/permission/permission.js.map +1 -0
  161. package/dist/permission.util.d.ts +38 -0
  162. package/dist/permission.util.js +91 -0
  163. package/dist/permission.util.js.map +1 -0
  164. package/dist/registry/index.d.ts +1 -0
  165. package/dist/registry/index.js +2 -0
  166. package/dist/registry/index.js.map +1 -0
  167. package/dist/registry/registry.d.ts +28 -0
  168. package/dist/registry/registry.js +19 -0
  169. package/dist/registry/registry.js.map +1 -0
  170. package/dist/registry.util.d.ts +28 -0
  171. package/dist/registry.util.js +19 -0
  172. package/dist/registry.util.js.map +1 -0
  173. package/dist/route/index.d.ts +1 -0
  174. package/dist/route/index.js +2 -0
  175. package/dist/route/index.js.map +1 -0
  176. package/dist/route/route.d.ts +1 -0
  177. package/dist/route/route.js +12 -0
  178. package/dist/route/route.js.map +1 -0
  179. package/dist/route.util.d.ts +1 -0
  180. package/dist/route.util.js +12 -0
  181. package/dist/route.util.js.map +1 -0
  182. package/dist/storage/index.d.ts +1 -0
  183. package/dist/storage/index.js +2 -0
  184. package/dist/storage/index.js.map +1 -0
  185. package/dist/storage/storage.d.ts +56 -0
  186. package/dist/storage/storage.js +86 -0
  187. package/dist/storage/storage.js.map +1 -0
  188. package/dist/storage.util.d.ts +56 -0
  189. package/dist/storage.util.js +82 -0
  190. package/dist/storage.util.js.map +1 -0
  191. package/dist/validation/index.d.ts +1 -0
  192. package/dist/validation/index.js +2 -0
  193. package/dist/validation/index.js.map +1 -0
  194. package/dist/validation/validation.d.ts +7 -0
  195. package/dist/validation/validation.js +245 -0
  196. package/dist/validation/validation.js.map +1 -0
  197. package/dist/validation.util.d.ts +7 -0
  198. package/dist/validation.util.js +237 -0
  199. package/dist/validation.util.js.map +1 -0
  200. package/package.json +34 -0
  201. package/src/auth/auth.ts +282 -0
  202. package/src/auth/index.ts +1 -0
  203. package/src/commands/cli.ts +89 -0
  204. package/src/commands/make/basic-controller.ts +49 -0
  205. package/src/commands/make/basic-migration.ts +89 -0
  206. package/src/commands/make/basic-model.ts +32 -0
  207. package/src/commands/make/basic-seeder.ts +38 -0
  208. package/src/commands/make/blueprint.ts +36 -0
  209. package/src/commands/make/da-migration.ts +90 -0
  210. package/src/commands/make/light-controller.ts +67 -0
  211. package/src/commands/make/light-model.ts +61 -0
  212. package/src/commands/make/mail.ts +51 -0
  213. package/src/commands/make/notification.ts +43 -0
  214. package/src/commands/make/queue.ts +45 -0
  215. package/src/commands/runner/barrels.ts +85 -0
  216. package/src/commands/runner/blueprint/controller-generation.ts +194 -0
  217. package/src/commands/runner/blueprint/documentation-generation.ts +463 -0
  218. package/src/commands/runner/blueprint/migration-generation.ts +153 -0
  219. package/src/commands/runner/blueprint/model-generation.ts +149 -0
  220. package/src/commands/runner/blueprint/runner.ts +181 -0
  221. package/src/commands/runner/blueprint/seeder-generation.ts +55 -0
  222. package/src/commands/runner/da-migration.ts +333 -0
  223. package/src/commands/runner/migration.ts +245 -0
  224. package/src/commands/runner/seeder.ts +44 -0
  225. package/src/commands/stubs/index.ts +289 -0
  226. package/src/context/context.ts +17 -0
  227. package/src/context/index.ts +1 -0
  228. package/src/controller/controller.ts +240 -0
  229. package/src/controller/index.ts +1 -0
  230. package/src/conversion/conversion.ts +65 -0
  231. package/src/conversion/index.ts +1 -0
  232. package/src/index.ts +22 -0
  233. package/src/logger/index.ts +1 -0
  234. package/src/logger/logger.ts +177 -0
  235. package/src/mail/index.ts +1 -0
  236. package/src/mail/mail.ts +86 -0
  237. package/src/middleware/index.ts +1 -0
  238. package/src/middleware/middleware.ts +289 -0
  239. package/src/permission/index.ts +1 -0
  240. package/src/permission/permission.ts +136 -0
  241. package/src/registry/index.ts +1 -0
  242. package/src/registry/registry.ts +37 -0
  243. package/src/route/index.ts +1 -0
  244. package/src/route/route.ts +12 -0
  245. package/src/storage/index.ts +1 -0
  246. package/src/storage/storage.ts +107 -0
  247. package/src/validation/index.ts +1 -0
  248. package/src/validation/validation.ts +346 -0
  249. 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
+ }