purplekit 1.0.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.
Files changed (87) hide show
  1. package/README.md +103 -0
  2. package/bin/dataforge +2 -0
  3. package/build/src/app.d.ts +2 -0
  4. package/build/src/app.d.ts.map +1 -0
  5. package/build/src/app.js +63 -0
  6. package/build/src/app.js.map +1 -0
  7. package/build/src/config/constants.d.ts +8 -0
  8. package/build/src/config/constants.d.ts.map +1 -0
  9. package/build/src/config/constants.js +16 -0
  10. package/build/src/config/constants.js.map +1 -0
  11. package/build/src/config/index.d.ts +4 -0
  12. package/build/src/config/index.d.ts.map +1 -0
  13. package/build/src/config/index.js +79 -0
  14. package/build/src/config/index.js.map +1 -0
  15. package/build/src/features/createdb.d.ts +21 -0
  16. package/build/src/features/createdb.d.ts.map +1 -0
  17. package/build/src/features/createdb.js +80 -0
  18. package/build/src/features/createdb.js.map +1 -0
  19. package/build/src/features/dropdb.d.ts +18 -0
  20. package/build/src/features/dropdb.d.ts.map +1 -0
  21. package/build/src/features/dropdb.js +70 -0
  22. package/build/src/features/dropdb.js.map +1 -0
  23. package/build/src/features/gen.d.ts +84 -0
  24. package/build/src/features/gen.d.ts.map +1 -0
  25. package/build/src/features/gen.js +241 -0
  26. package/build/src/features/gen.js.map +1 -0
  27. package/build/src/features/index.d.ts +9 -0
  28. package/build/src/features/index.d.ts.map +1 -0
  29. package/build/src/features/index.js +20 -0
  30. package/build/src/features/index.js.map +1 -0
  31. package/build/src/features/init.d.ts +7 -0
  32. package/build/src/features/init.d.ts.map +1 -0
  33. package/build/src/features/init.js +118 -0
  34. package/build/src/features/init.js.map +1 -0
  35. package/build/src/features/migrate.d.ts +83 -0
  36. package/build/src/features/migrate.d.ts.map +1 -0
  37. package/build/src/features/migrate.js +331 -0
  38. package/build/src/features/migrate.js.map +1 -0
  39. package/build/src/features/migration.d.ts +28 -0
  40. package/build/src/features/migration.d.ts.map +1 -0
  41. package/build/src/features/migration.js +128 -0
  42. package/build/src/features/migration.js.map +1 -0
  43. package/build/src/features/seed.d.ts +9 -0
  44. package/build/src/features/seed.d.ts.map +1 -0
  45. package/build/src/features/seed.js +72 -0
  46. package/build/src/features/seed.js.map +1 -0
  47. package/build/src/features/status.d.ts +55 -0
  48. package/build/src/features/status.d.ts.map +1 -0
  49. package/build/src/features/status.js +229 -0
  50. package/build/src/features/status.js.map +1 -0
  51. package/build/src/index.d.ts +4 -0
  52. package/build/src/index.d.ts.map +1 -0
  53. package/build/src/index.js +15 -0
  54. package/build/src/index.js.map +1 -0
  55. package/build/src/libs/compare-mig.d.ts +27 -0
  56. package/build/src/libs/compare-mig.d.ts.map +1 -0
  57. package/build/src/libs/compare-mig.js +215 -0
  58. package/build/src/libs/compare-mig.js.map +1 -0
  59. package/build/src/libs/create-ds.d.ts +10 -0
  60. package/build/src/libs/create-ds.d.ts.map +1 -0
  61. package/build/src/libs/create-ds.js +56 -0
  62. package/build/src/libs/create-ds.js.map +1 -0
  63. package/build/src/libs/get-commands.d.ts +45 -0
  64. package/build/src/libs/get-commands.d.ts.map +1 -0
  65. package/build/src/libs/get-commands.js +128 -0
  66. package/build/src/libs/get-commands.js.map +1 -0
  67. package/build/src/libs/paths.d.ts +22 -0
  68. package/build/src/libs/paths.d.ts.map +1 -0
  69. package/build/src/libs/paths.js +37 -0
  70. package/build/src/libs/paths.js.map +1 -0
  71. package/build/src/libs/print.d.ts +5 -0
  72. package/build/src/libs/print.d.ts.map +1 -0
  73. package/build/src/libs/print.js +18 -0
  74. package/build/src/libs/print.js.map +1 -0
  75. package/build/src/libs/sanitize.d.ts +10 -0
  76. package/build/src/libs/sanitize.d.ts.map +1 -0
  77. package/build/src/libs/sanitize.js +19 -0
  78. package/build/src/libs/sanitize.js.map +1 -0
  79. package/build/src/libs/seed-entities.d.ts +13 -0
  80. package/build/src/libs/seed-entities.d.ts.map +1 -0
  81. package/build/src/libs/seed-entities.js +40 -0
  82. package/build/src/libs/seed-entities.js.map +1 -0
  83. package/build/src/types.d.ts +49 -0
  84. package/build/src/types.d.ts.map +1 -0
  85. package/build/src/types.js +3 -0
  86. package/build/src/types.js.map +1 -0
  87. package/package.json +63 -0
@@ -0,0 +1,229 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
36
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
37
+ return new (P || (P = Promise))(function (resolve, reject) {
38
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
39
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
40
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
41
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
42
+ });
43
+ };
44
+ var __rest = (this && this.__rest) || function (s, e) {
45
+ var t = {};
46
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
47
+ t[p] = s[p];
48
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
49
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
50
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
51
+ t[p[i]] = s[p[i]];
52
+ }
53
+ return t;
54
+ };
55
+ Object.defineProperty(exports, "__esModule", { value: true });
56
+ exports.checkForDuplicateMig = exports.migrationStatus = exports.doesDbExists = exports.dbStatus = exports.status = void 0;
57
+ const get_commands_1 = require("../libs/get-commands");
58
+ const create_ds_1 = require("../libs/create-ds");
59
+ const print_1 = require("../libs/print");
60
+ const config_1 = require("../config");
61
+ const sanitize_1 = require("../libs/sanitize");
62
+ const migrate_1 = require("./migrate");
63
+ const compare_mig_1 = require("../libs/compare-mig");
64
+ const fs = __importStar(require("fs/promises"));
65
+ /**
66
+ * Splits local migration files into applied and pending groups for a database.
67
+ *
68
+ * @param name - Optional target database name.
69
+ * @returns Applied and pending local migration file metadata.
70
+ */
71
+ const migrationStatus = (name) => __awaiter(void 0, void 0, void 0, function* () {
72
+ let initialized = false;
73
+ const ds2 = (0, create_ds_1.createDataSource)(name ? { database: name } : {});
74
+ try {
75
+ yield ds2.initialize();
76
+ initialized = true;
77
+ const migrations = yield (0, migrate_1.getMigrationFiles)();
78
+ const applied = [];
79
+ const pending = [];
80
+ const response = yield Promise.all(migrations.map((m) => __awaiter(void 0, void 0, void 0, function* () {
81
+ const hasRun = yield (0, migrate_1.hasMigration)(ds2, m.name);
82
+ return Object.assign(Object.assign({}, m), { hasRun });
83
+ })));
84
+ for (const m of response) {
85
+ const { hasRun } = m, rest = __rest(m, ["hasRun"]);
86
+ if (hasRun)
87
+ applied.push(rest);
88
+ else
89
+ pending.push(rest);
90
+ }
91
+ return { applied, pending };
92
+ }
93
+ catch (e) {
94
+ const msg = e instanceof Error ? e.message : JSON.stringify(e);
95
+ throw new Error(msg);
96
+ }
97
+ finally {
98
+ if (initialized) {
99
+ yield ds2.destroy();
100
+ }
101
+ }
102
+ });
103
+ exports.migrationStatus = migrationStatus;
104
+ /**
105
+ * Detects local migration files with equivalent normalized `up` SQL.
106
+ *
107
+ * @returns Total migration file count and duplicate matches.
108
+ */
109
+ const checkForDuplicateMig = () => __awaiter(void 0, void 0, void 0, function* () {
110
+ const results = [];
111
+ const dialect = (0, compare_mig_1.getParserDialect)(config_1.cfg.TYPE);
112
+ const files = yield (0, migrate_1.getMigrationFiles)();
113
+ for (const i of files) {
114
+ const existing = files.filter((m) => i.name !== m.name);
115
+ const data = yield fs.readFile(i.file, { encoding: 'utf-8' });
116
+ const resp = yield (0, compare_mig_1.compareMig)(data, existing, dialect);
117
+ if (resp)
118
+ results.push(Object.assign({ duplicateOf: resp }, i));
119
+ else
120
+ continue;
121
+ }
122
+ return {
123
+ total: files.length,
124
+ checks: results,
125
+ };
126
+ });
127
+ exports.checkForDuplicateMig = checkForDuplicateMig;
128
+ /**
129
+ * Checks whether a database with the given name exists.
130
+ * Connects via the default data source and runs a dialect-specific query.
131
+ *
132
+ * @param name - Database name to check (expected to be sanitized).
133
+ * @returns Whether the database exists; includes `error` when the check fails.
134
+ */
135
+ const doesDbExists = (name) => __awaiter(void 0, void 0, void 0, function* () {
136
+ let initialized = false;
137
+ // this datasource connects to the postgres because that always exists so it actually doesn't need
138
+ // a db pass onto its object
139
+ const ds = (0, create_ds_1.createDataSource)();
140
+ try {
141
+ const command = (0, get_commands_1.getDbCheckCommand)();
142
+ yield ds.initialize();
143
+ initialized = true;
144
+ const query = yield ds.query(command, [name]);
145
+ const exists = query.length > 0;
146
+ return {
147
+ databaseOk: exists,
148
+ dbName: name,
149
+ };
150
+ }
151
+ catch (e) {
152
+ const msg = e instanceof Error ? e.message : 'unable to serialize error';
153
+ throw new Error(msg);
154
+ }
155
+ finally {
156
+ if (initialized) {
157
+ yield ds.destroy();
158
+ }
159
+ }
160
+ });
161
+ exports.doesDbExists = doesDbExists;
162
+ /**
163
+ * Inspects a target database and returns its public/base table count.
164
+ * Opens a dedicated TypeORM data source pointed at `name`.
165
+ *
166
+ * @param db - Database to inspect.
167
+ * @returns Table count on success; `tables: 0` and `err` on failure.
168
+ */
169
+ const dbStatus = (db) => __awaiter(void 0, void 0, void 0, function* () {
170
+ // target data source
171
+ let initialized = false;
172
+ const tds = (0, create_ds_1.createDataSource)({ database: db });
173
+ try {
174
+ const command = (0, get_commands_1.getDbTablesCommand)();
175
+ yield tds.initialize();
176
+ initialized = true;
177
+ const response = yield tds.query(command);
178
+ return {
179
+ tables: response.length,
180
+ };
181
+ }
182
+ catch (e) {
183
+ const msg = e instanceof Error ? e.message : 'Unable to serialize';
184
+ throw new Error(msg);
185
+ }
186
+ finally {
187
+ if (initialized) {
188
+ yield tds.destroy();
189
+ }
190
+ }
191
+ });
192
+ exports.dbStatus = dbStatus;
193
+ /**
194
+ * CLI handler for the `status` command.
195
+ * Checks database existence and, if it exists, reports the table count.
196
+ * Prints a JSON object to stdout.
197
+ *
198
+ * @param args - CLI options; `name` defaults to `cfg.DATABASE_NAME`.
199
+ */
200
+ const status = (args) => __awaiter(void 0, void 0, void 0, function* () {
201
+ var _a;
202
+ const name = (0, sanitize_1.sanitize)((_a = args.name) !== null && _a !== void 0 ? _a : config_1.cfg.DATABASE_NAME);
203
+ try {
204
+ let response = {};
205
+ const exists = yield doesDbExists(name);
206
+ if (exists.databaseOk) {
207
+ const check = yield dbStatus(name);
208
+ const migsCheck = yield migrationStatus(name);
209
+ response = Object.assign(Object.assign(Object.assign(Object.assign({}, response), exists), check), { migrations: {
210
+ applied: migsCheck.applied.length,
211
+ pending: migsCheck.pending.length,
212
+ } });
213
+ }
214
+ const migs = yield checkForDuplicateMig();
215
+ response = Object.assign(Object.assign(Object.assign({}, response), exists), { migrations: Object.assign(Object.assign({}, response.migrations), { files: migs.total, duplicates: migs.checks.map((m) => ({
216
+ name: m.name,
217
+ duplicateOf: m.duplicateOf.name,
218
+ })) }) });
219
+ (0, print_1.print)(JSON.stringify(response, null, 2));
220
+ process.exit(0);
221
+ }
222
+ catch (e) {
223
+ const msg = e instanceof Error ? e.message : 'Unable to Serialize';
224
+ (0, print_1.printf)(`Error occurred: ${msg}`);
225
+ process.exit(1);
226
+ }
227
+ });
228
+ exports.status = status;
229
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/features/status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export type { DATAFORGE_CONFIGURATIONS } from './types';
2
+ export { seedEntities } from './libs/seed-entities';
3
+ export { createdb, dropdb, gen, init, migrate, migration, seed, status, } from './features';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EACL,QAAQ,EACR,MAAM,EACN,GAAG,EACH,IAAI,EACJ,OAAO,EACP,SAAS,EACT,IAAI,EACJ,MAAM,GACP,MAAM,YAAY,CAAC"}
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.status = exports.seed = exports.migration = exports.migrate = exports.init = exports.gen = exports.dropdb = exports.createdb = exports.seedEntities = void 0;
4
+ var seed_entities_1 = require("./libs/seed-entities");
5
+ Object.defineProperty(exports, "seedEntities", { enumerable: true, get: function () { return seed_entities_1.seedEntities; } });
6
+ var features_1 = require("./features");
7
+ Object.defineProperty(exports, "createdb", { enumerable: true, get: function () { return features_1.createdb; } });
8
+ Object.defineProperty(exports, "dropdb", { enumerable: true, get: function () { return features_1.dropdb; } });
9
+ Object.defineProperty(exports, "gen", { enumerable: true, get: function () { return features_1.gen; } });
10
+ Object.defineProperty(exports, "init", { enumerable: true, get: function () { return features_1.init; } });
11
+ Object.defineProperty(exports, "migrate", { enumerable: true, get: function () { return features_1.migrate; } });
12
+ Object.defineProperty(exports, "migration", { enumerable: true, get: function () { return features_1.migration; } });
13
+ Object.defineProperty(exports, "seed", { enumerable: true, get: function () { return features_1.seed; } });
14
+ Object.defineProperty(exports, "status", { enumerable: true, get: function () { return features_1.status; } });
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AACA,sDAAoD;AAA3C,6GAAA,YAAY,OAAA;AACrB,uCASoB;AARlB,oGAAA,QAAQ,OAAA;AACR,kGAAA,MAAM,OAAA;AACN,+FAAA,GAAG,OAAA;AACH,gGAAA,IAAI,OAAA;AACJ,mGAAA,OAAO,OAAA;AACP,qGAAA,SAAS,OAAA;AACT,gGAAA,IAAI,OAAA;AACJ,kGAAA,MAAM,OAAA"}
@@ -0,0 +1,27 @@
1
+ import { MigrationItem } from '../features/migrate';
2
+ export type MigrationDuplicate = {
3
+ file: string;
4
+ name: string;
5
+ migHash: string;
6
+ hashes: string[];
7
+ };
8
+ type SqlDialect = 'postgresql' | 'mysql' | 'mariadb' | 'sqlite' | 'transactsql';
9
+ /**
10
+ * Maps a TypeORM driver type to a `node-sql-parser` dialect name.
11
+ *
12
+ * @param type - TypeORM data source type (e.g. `postgres`, `mysql`).
13
+ * @returns SQL parser dialect; defaults to `postgresql` when unknown.
14
+ */
15
+ declare function getParserDialect(type: string): SqlDialect;
16
+ /**
17
+ * Compares a generated migration against existing files by AST hash.
18
+ * Returns the first existing migration whose `up` queries normalize to the same set.
19
+ *
20
+ * @param current - Source text of the newly generated migration.
21
+ * @param existing - Local migration folders to compare against.
22
+ * @param dialect - Parser dialect for the target database.
23
+ * @returns Duplicate match with file path and hash, or `null` when unique.
24
+ */
25
+ declare function compareMig(current: string, existing: MigrationItem[], dialect: SqlDialect): Promise<MigrationDuplicate | null>;
26
+ export { compareMig, getParserDialect };
27
+ //# sourceMappingURL=compare-mig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compare-mig.d.ts","sourceRoot":"","sources":["../../../src/libs/compare-mig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAKnD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC;AAGF,KAAK,UAAU,GACZ,YAAY,GACX,OAAO,GACP,SAAS,GACT,QAAQ,GACR,aAAa,CAAC;AA4BlB;;;;;GAKG;AACH,iBAAS,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAelD;AA2GD;;;;;;;;GAQG;AACH,iBAAe,UAAU,CACvB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,aAAa,EAAE,EACzB,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAiBpC;AAED,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,CAAC"}
@@ -0,0 +1,215 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
36
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
37
+ return new (P || (P = Promise))(function (resolve, reject) {
38
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
39
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
40
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
41
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
42
+ });
43
+ };
44
+ var __importDefault = (this && this.__importDefault) || function (mod) {
45
+ return (mod && mod.__esModule) ? mod : { "default": mod };
46
+ };
47
+ Object.defineProperty(exports, "__esModule", { value: true });
48
+ exports.compareMig = compareMig;
49
+ exports.getParserDialect = getParserDialect;
50
+ const node_sql_parser_1 = require("node-sql-parser");
51
+ const node_crypto_1 = __importDefault(require("node:crypto"));
52
+ const fs = __importStar(require("node:fs"));
53
+ /**
54
+ * Extracts a migration method body by matching its declaration and balancing braces.
55
+ *
56
+ * @param content - Migration file source text.
57
+ * @param method - Migration method to extract.
58
+ * @returns The method body, or an empty string when the method is not found.
59
+ */
60
+ function getMethodBody(content, method) {
61
+ // prettier-ignore
62
+ const pattern = new RegExp(`(?:public\\s+|private\\s+|protected\\s+)?(?:async\\s+)?${method}\\s*\\([^)]*\\)\\s*(?::\\s*[^\\{]+)?\\{`);
63
+ const match = pattern.exec(content);
64
+ if (!match)
65
+ return '';
66
+ const start = match.index + match[0].length;
67
+ let depth = 1;
68
+ for (let i = start; i < content.length; i++) {
69
+ const char = content[i];
70
+ if (char === '{')
71
+ depth += 1;
72
+ if (char === '}')
73
+ depth -= 1;
74
+ if (depth === 0)
75
+ return content.slice(start, i);
76
+ }
77
+ return '';
78
+ }
79
+ /**
80
+ * Maps a TypeORM driver type to a `node-sql-parser` dialect name.
81
+ *
82
+ * @param type - TypeORM data source type (e.g. `postgres`, `mysql`).
83
+ * @returns SQL parser dialect; defaults to `postgresql` when unknown.
84
+ */
85
+ function getParserDialect(type) {
86
+ switch (type) {
87
+ case 'postgres':
88
+ return 'postgresql';
89
+ case 'mysql':
90
+ case 'mariadb':
91
+ return 'mysql';
92
+ case 'sqlite':
93
+ case 'better-sqlite3':
94
+ return 'sqlite';
95
+ case 'mssql':
96
+ return 'transactsql';
97
+ default:
98
+ return 'postgresql';
99
+ }
100
+ }
101
+ /**
102
+ * Recursively sorts object keys so AST JSON serialization is stable.
103
+ *
104
+ * @param value - Value to normalize (object, array, or primitive).
105
+ * @returns A copy with sorted keys at every object level.
106
+ */
107
+ function sortObjectKeys(value) {
108
+ if (Array.isArray(value)) {
109
+ return value.map(sortObjectKeys);
110
+ }
111
+ if (value && typeof value === 'object') {
112
+ return Object.keys(value)
113
+ .sort()
114
+ .reduce((a, b) => {
115
+ a[b] = sortObjectKeys(value[b]);
116
+ return a;
117
+ }, {});
118
+ }
119
+ return value;
120
+ }
121
+ /**
122
+ * Parses SQL into an AST and returns a canonical JSON representation.
123
+ *
124
+ * @param sql - Raw SQL string from a migration query.
125
+ * @param dialect - Parser dialect for the target database.
126
+ * @returns Normalized AST as a JSON string.
127
+ * @throws When the SQL cannot be parsed.
128
+ */
129
+ function normalizeSqlAst(sql, dialect) {
130
+ try {
131
+ const parser = new node_sql_parser_1.Parser();
132
+ const ast = parser.astify(sql, { database: dialect });
133
+ const normalized = sortObjectKeys(ast);
134
+ return JSON.stringify(normalized);
135
+ }
136
+ catch (e) {
137
+ const msg = e instanceof Error ? e.message : JSON.stringify(e);
138
+ throw new Error(`Error parsing sql: ${msg}`);
139
+ }
140
+ }
141
+ /**
142
+ * Extracts raw SQL strings from a TypeORM migration file body.
143
+ * Matches `queryRunner.query(\`...\`)` template-literal calls.
144
+ *
145
+ * @param content - Migration file source text.
146
+ * @returns SQL query strings in file order.
147
+ */
148
+ function getMigQueries(content) {
149
+ // prettier-ignore
150
+ const regex = new RegExp(/queryRunner\.query\(\s*`([\s\S]*?)`\s*(?:,\s*[\s\S]*?)?\)/g);
151
+ const body = getMethodBody(content, 'up');
152
+ const queries = [];
153
+ for (const match of body.matchAll(regex)) {
154
+ const sql = match[1];
155
+ if (sql)
156
+ queries.push(sql);
157
+ }
158
+ return queries;
159
+ }
160
+ /**
161
+ * Builds normalized AST signatures for all `up` queries in a migration file.
162
+ *
163
+ * @param content - Migration file source text.
164
+ * @param dialect - Parser dialect for the target database.
165
+ * @returns Normalized AST strings in file order.
166
+ */
167
+ function getMigAstSignatures(content, dialect) {
168
+ const queries = getMigQueries(content);
169
+ return queries.map((q) => normalizeSqlAst(q, dialect));
170
+ }
171
+ /**
172
+ * Computes a SHA-256 hex digest of a string.
173
+ *
174
+ * @param value - Input to hash.
175
+ * @returns Hex-encoded SHA-256 hash.
176
+ */
177
+ function hash(value) {
178
+ return node_crypto_1.default.createHash('sha256').update(value).digest('hex');
179
+ }
180
+ /**
181
+ * Hashes each normalized `up` query and the sorted migration-level query set.
182
+ *
183
+ * @param content - Migration file source text.
184
+ * @param dialect - Parser dialect for the target database.
185
+ * @returns Query hashes plus a migration hash that is insensitive to query order.
186
+ */
187
+ function getMigAstHashes(content, dialect) {
188
+ const res = getMigAstSignatures(content, dialect);
189
+ const hashes = res.map((r) => hash(r));
190
+ const migHash = hash([...hashes].sort().join('\n'));
191
+ return { migHash, hashes };
192
+ }
193
+ /**
194
+ * Compares a generated migration against existing files by AST hash.
195
+ * Returns the first existing migration whose `up` queries normalize to the same set.
196
+ *
197
+ * @param current - Source text of the newly generated migration.
198
+ * @param existing - Local migration folders to compare against.
199
+ * @param dialect - Parser dialect for the target database.
200
+ * @returns Duplicate match with file path and hash, or `null` when unique.
201
+ */
202
+ function compareMig(current, existing, dialect) {
203
+ return __awaiter(this, void 0, void 0, function* () {
204
+ const newHash = getMigAstHashes(current, dialect);
205
+ for (const f of existing) {
206
+ const existingContent = yield fs.promises.readFile(f.file, 'utf-8');
207
+ const existingHash = getMigAstHashes(existingContent, dialect);
208
+ if (existingHash.migHash === newHash.migHash) {
209
+ return Object.assign({ file: f.file, name: f.name }, existingHash);
210
+ }
211
+ }
212
+ return null;
213
+ });
214
+ }
215
+ //# sourceMappingURL=compare-mig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compare-mig.js","sourceRoot":"","sources":["../../../src/libs/compare-mig.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { DataSourceOptions, DataSource } from 'typeorm';
2
+ /**
3
+ * Builds a TypeORM `DataSource` from app config, with optional overrides.
4
+ *
5
+ * @param opt - Partial options merged on top of defaults (e.g. `{ database: name }`).
6
+ * @returns A configured, uninitialized TypeORM data source.
7
+ */
8
+ declare const createDataSource: (opt?: Partial<DataSourceOptions>) => DataSource;
9
+ export { createDataSource };
10
+ //# sourceMappingURL=create-ds.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-ds.d.ts","sourceRoot":"","sources":["../../../src/libs/create-ds.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAIxD;;;;;GAKG;AACH,QAAA,MAAM,gBAAgB,GAAI,MAAK,OAAO,CAAC,iBAAiB,CAAM,eAyB7D,CAAC;AAEF,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.createDataSource = void 0;
37
+ const typeorm_1 = require("typeorm");
38
+ const config_1 = require("../config");
39
+ const fs = __importStar(require("fs"));
40
+ /**
41
+ * Builds a TypeORM `DataSource` from app config, with optional overrides.
42
+ *
43
+ * @param opt - Partial options merged on top of defaults (e.g. `{ database: name }`).
44
+ * @returns A configured, uninitialized TypeORM data source.
45
+ */
46
+ const createDataSource = (opt = {}) => {
47
+ return new typeorm_1.DataSource(Object.assign({ username: config_1.cfg.DATABASE_USERNAME, password: config_1.cfg.DATABASE_PASSWORD, host: config_1.cfg.DATABASE_HOST, port: config_1.cfg.DATABASE_PORT, type: config_1.cfg.TYPE, database: config_1.cfg.INITIAL_DATABASE, entities: config_1.cfg.ENTITIES, migrations: config_1.cfg.MIGRATIONS, ssl: config_1.cfg.SSL_MODE, extra: config_1.cfg.SSL_MODE
48
+ ? {
49
+ ssl: Object.assign({ rejectUnauthorized: false }, (config_1.cfg.SSL_TYPE === 'heavy'
50
+ ? { ca: fs.readFileSync(config_1.cfg.DATABASE_CA_CERT) }
51
+ : {})),
52
+ }
53
+ : undefined, synchronize: config_1.cfg.SYNCHRONIZE, logging: config_1.cfg.LOGGING }, opt));
54
+ };
55
+ exports.createDataSource = createDataSource;
56
+ //# sourceMappingURL=create-ds.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-ds.js","sourceRoot":"","sources":["../../../src/libs/create-ds.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,qCAAwD;AACxD,qCAA+B;AAC/B,uCAAyB;AAEzB;;;;;GAKG;AACH,MAAM,gBAAgB,GAAG,CAAC,MAAkC,EAAE,EAAE,EAAE;IAChE,OAAO,IAAI,oBAAU,iBACnB,QAAQ,EAAE,YAAG,CAAC,iBAAiB,EAC/B,QAAQ,EAAE,YAAG,CAAC,iBAAiB,EAC/B,IAAI,EAAE,YAAG,CAAC,aAAa,EACvB,IAAI,EAAE,YAAG,CAAC,aAAa,EACvB,IAAI,EAAE,YAAG,CAAC,IAAW,EACrB,QAAQ,EAAE,YAAG,CAAC,gBAAgB,EAC9B,QAAQ,EAAE,YAAG,CAAC,QAAQ,EACtB,UAAU,EAAE,YAAG,CAAC,UAAU,EAC1B,GAAG,EAAE,YAAG,CAAC,QAAQ,EACjB,KAAK,EAAE,YAAG,CAAC,QAAQ;YACjB,CAAC,CAAC;gBACE,GAAG,kBACD,kBAAkB,EAAE,KAAK,IACtB,CAAC,YAAG,CAAC,QAAQ,KAAK,OAAO;oBAC1B,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,YAAY,CAAC,YAAG,CAAC,gBAAgB,CAAC,EAAE;oBAC/C,CAAC,CAAC,EAAE,CAAC,CACR;aACF;YACH,CAAC,CAAC,SAAS,EACb,WAAW,EAAE,YAAG,CAAC,WAAW,EAC5B,OAAO,EAAE,YAAG,CAAC,OAAO,IAChB,GAAW,EACf,CAAC;AACL,CAAC,CAAC;AAEO,4CAAgB"}
@@ -0,0 +1,45 @@
1
+ import { DataSourceOptions } from 'typeorm';
2
+ type Params = DataSourceOptions['type'];
3
+ /**
4
+ * Returns the SQL used to list user/base tables for the given DB type.
5
+ *
6
+ * @param type - Database driver type; defaults to `cfg.TYPE`.
7
+ * @returns Parameter-free SQL query string.
8
+ */
9
+ declare const getDbTablesCommand: (type?: Params) => "SELECT table_name FROM information_schema.tables WHERE table_schema = 'public' AND table_type = 'BASE TABLE'" | "SELECT table_name FROM information_schema.tables WHERE table_schema = DATABASE() AND table_type = 'BASE TABLE'" | "SELECT name FROM sqlite_master WHERE type = 'table'" | "SELECT table_name FROM user_tables" | "SELECT TABLE_NAME AS table_name FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE'";
10
+ /**
11
+ * Returns the parameterized SQL used to check whether a database exists.
12
+ *
13
+ * @param type - Database driver type; defaults to `cfg.TYPE`.
14
+ * @returns Parameterized SQL query string.
15
+ * @throws When the type is unsupported (e.g. SQLite uses filesystem checks).
16
+ */
17
+ declare const getDbCheckCommand: (type?: Params) => "SELECT 1 FROM pg_database WHERE DATNAME = $1" | "SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = ?" | "SELECT name FROM sys.databases WHERE name = @0" | "SELECT username FROM all_users WHERE username = :1";
18
+ /**
19
+ * Returns the SQL used to drop a database for the given DB type.
20
+ *
21
+ * @param name - Database name to drop.
22
+ * @param type - Database driver type; defaults to `cfg.TYPE`.
23
+ * @returns Parameterized or literal SQL query string.
24
+ * @throws When the type is unsupported.
25
+ */
26
+ declare const getDropDbCommand: (name: string, type?: Params) => string;
27
+ /**
28
+ * Returns the SQL used to create a database for the given DB type.
29
+ *
30
+ * @param name - Database name to create.
31
+ * @param type - Database driver type; defaults to `cfg.TYPE`.
32
+ * @returns Literal SQL query string for creating the database.
33
+ * @throws When the type is unsupported.
34
+ */
35
+ declare const getCreateDbCommand: (name: string, type?: Params) => string;
36
+ /**
37
+ * Returns the parameterized SQL used to check if a migration has been applied.
38
+ *
39
+ * @param type - Database driver type; defaults to `cfg.TYPE`.
40
+ * @returns Parameterized SQL query string for TypeORM's `migrations` table.
41
+ * @throws When the type is unsupported.
42
+ */
43
+ declare const getCheckMigrationCommand: (type?: Params) => "SELECT 1 FROM migrations WHERE name = $1 LIMIT 1" | "SELECT 1 FROM migrations WHERE name = ? LIMIT 1" | "SELECT TOP 1 1 FROM migrations WHERE name = @0";
44
+ export { getDbTablesCommand, getDbCheckCommand, getDropDbCommand, getCreateDbCommand, getCheckMigrationCommand, };
45
+ //# sourceMappingURL=get-commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-commands.d.ts","sourceRoot":"","sources":["../../../src/libs/get-commands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAG5C,KAAK,MAAM,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;AAExC;;;;;GAKG;AACH,QAAA,MAAM,kBAAkB,GAAI,OAAM,MAAiB,waAsBlD,CAAC;AAEF;;;;;;GAMG;AACH,QAAA,MAAM,iBAAiB,GAAI,OAAM,MAAiB,2OAwBjD,CAAC;AAEF;;;;;;;GAOG;AACH,QAAA,MAAM,gBAAgB,GAAI,MAAM,MAAM,EAAE,OAAM,MAAiB,WAwB9D,CAAC;AAEF;;;;;;;GAOG;AACH,QAAA,MAAM,kBAAkB,GAAI,MAAM,MAAM,EAAE,OAAM,MAAiB,WAqBhE,CAAC;AAEF;;;;;;GAMG;AACH,QAAA,MAAM,wBAAwB,GAAI,OAAM,MAAiB,8JAcxD,CAAC;AAEF,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,wBAAwB,GACzB,CAAC"}