@pristine-ts/mysql-cli 2.0.16

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 (175) hide show
  1. package/LICENSE +201 -0
  2. package/dist/lib/cjs/commands/commands.js +25 -0
  3. package/dist/lib/cjs/commands/commands.js.map +1 -0
  4. package/dist/lib/cjs/commands/mysql-migrate-create.command-options.js +37 -0
  5. package/dist/lib/cjs/commands/mysql-migrate-create.command-options.js.map +1 -0
  6. package/dist/lib/cjs/commands/mysql-migrate-create.command.js +120 -0
  7. package/dist/lib/cjs/commands/mysql-migrate-create.command.js.map +1 -0
  8. package/dist/lib/cjs/commands/mysql-migrate-status.command-options.js +27 -0
  9. package/dist/lib/cjs/commands/mysql-migrate-status.command-options.js.map +1 -0
  10. package/dist/lib/cjs/commands/mysql-migrate-status.command.js +104 -0
  11. package/dist/lib/cjs/commands/mysql-migrate-status.command.js.map +1 -0
  12. package/dist/lib/cjs/commands/mysql-migrate-verify.command-options.js +27 -0
  13. package/dist/lib/cjs/commands/mysql-migrate-verify.command-options.js.map +1 -0
  14. package/dist/lib/cjs/commands/mysql-migrate-verify.command.js +74 -0
  15. package/dist/lib/cjs/commands/mysql-migrate-verify.command.js.map +1 -0
  16. package/dist/lib/cjs/commands/mysql-migrate.command-options.js +41 -0
  17. package/dist/lib/cjs/commands/mysql-migrate.command-options.js.map +1 -0
  18. package/dist/lib/cjs/commands/mysql-migrate.command.js +86 -0
  19. package/dist/lib/cjs/commands/mysql-migrate.command.js.map +1 -0
  20. package/dist/lib/cjs/enums/enums.js +18 -0
  21. package/dist/lib/cjs/enums/enums.js.map +1 -0
  22. package/dist/lib/cjs/enums/migration-state.enum.js +28 -0
  23. package/dist/lib/cjs/enums/migration-state.enum.js.map +1 -0
  24. package/dist/lib/cjs/errors/errors.js +22 -0
  25. package/dist/lib/cjs/errors/errors.js.map +1 -0
  26. package/dist/lib/cjs/errors/migration-checksum-mismatch.error.js +24 -0
  27. package/dist/lib/cjs/errors/migration-checksum-mismatch.error.js.map +1 -0
  28. package/dist/lib/cjs/errors/migration-duplicate-name.error.js +21 -0
  29. package/dist/lib/cjs/errors/migration-duplicate-name.error.js.map +1 -0
  30. package/dist/lib/cjs/errors/migration-execution.error.js +21 -0
  31. package/dist/lib/cjs/errors/migration-execution.error.js.map +1 -0
  32. package/dist/lib/cjs/errors/migration-invalid-name.error.js +20 -0
  33. package/dist/lib/cjs/errors/migration-invalid-name.error.js.map +1 -0
  34. package/dist/lib/cjs/errors/migration-orphaned-record.error.js +22 -0
  35. package/dist/lib/cjs/errors/migration-orphaned-record.error.js.map +1 -0
  36. package/dist/lib/cjs/interfaces/interfaces.js +18 -0
  37. package/dist/lib/cjs/interfaces/interfaces.js.map +1 -0
  38. package/dist/lib/cjs/interfaces/mysql-migration.interface.js +3 -0
  39. package/dist/lib/cjs/interfaces/mysql-migration.interface.js.map +1 -0
  40. package/dist/lib/cjs/managers/managers.js +22 -0
  41. package/dist/lib/cjs/managers/managers.js.map +1 -0
  42. package/dist/lib/cjs/managers/mysql-migration-checksum.manager.js +35 -0
  43. package/dist/lib/cjs/managers/mysql-migration-checksum.manager.js.map +1 -0
  44. package/dist/lib/cjs/managers/mysql-migration-record.manager.js +96 -0
  45. package/dist/lib/cjs/managers/mysql-migration-record.manager.js.map +1 -0
  46. package/dist/lib/cjs/managers/mysql-migration-runner.manager.js +96 -0
  47. package/dist/lib/cjs/managers/mysql-migration-runner.manager.js.map +1 -0
  48. package/dist/lib/cjs/managers/mysql-migration-scaffold.manager.js +217 -0
  49. package/dist/lib/cjs/managers/mysql-migration-scaffold.manager.js.map +1 -0
  50. package/dist/lib/cjs/managers/mysql-migration.manager.js +261 -0
  51. package/dist/lib/cjs/managers/mysql-migration.manager.js.map +1 -0
  52. package/dist/lib/cjs/models/migration-apply-entry.model.js +11 -0
  53. package/dist/lib/cjs/models/migration-apply-entry.model.js.map +1 -0
  54. package/dist/lib/cjs/models/migration-apply-result.model.js +18 -0
  55. package/dist/lib/cjs/models/migration-apply-result.model.js.map +1 -0
  56. package/dist/lib/cjs/models/migration-plan-entry.model.js +11 -0
  57. package/dist/lib/cjs/models/migration-plan-entry.model.js.map +1 -0
  58. package/dist/lib/cjs/models/migration-plan.model.js +24 -0
  59. package/dist/lib/cjs/models/migration-plan.model.js.map +1 -0
  60. package/dist/lib/cjs/models/migration-record.model.js +12 -0
  61. package/dist/lib/cjs/models/migration-record.model.js.map +1 -0
  62. package/dist/lib/cjs/models/models.js +22 -0
  63. package/dist/lib/cjs/models/models.js.map +1 -0
  64. package/dist/lib/cjs/mysql-cli.configuration-keys.js +20 -0
  65. package/dist/lib/cjs/mysql-cli.configuration-keys.js.map +1 -0
  66. package/dist/lib/cjs/mysql-cli.module.js +63 -0
  67. package/dist/lib/cjs/mysql-cli.module.js.map +1 -0
  68. package/dist/lib/cjs/mysql-cli.module.keyname.js +5 -0
  69. package/dist/lib/cjs/mysql-cli.module.keyname.js.map +1 -0
  70. package/dist/lib/cjs/tsconfig.cjs.tsbuildinfo +1 -0
  71. package/dist/lib/esm/commands/commands.js +9 -0
  72. package/dist/lib/esm/commands/commands.js.map +1 -0
  73. package/dist/lib/esm/commands/mysql-migrate-create.command-options.js +33 -0
  74. package/dist/lib/esm/commands/mysql-migrate-create.command-options.js.map +1 -0
  75. package/dist/lib/esm/commands/mysql-migrate-create.command.js +114 -0
  76. package/dist/lib/esm/commands/mysql-migrate-create.command.js.map +1 -0
  77. package/dist/lib/esm/commands/mysql-migrate-status.command-options.js +23 -0
  78. package/dist/lib/esm/commands/mysql-migrate-status.command-options.js.map +1 -0
  79. package/dist/lib/esm/commands/mysql-migrate-status.command.js +101 -0
  80. package/dist/lib/esm/commands/mysql-migrate-status.command.js.map +1 -0
  81. package/dist/lib/esm/commands/mysql-migrate-verify.command-options.js +23 -0
  82. package/dist/lib/esm/commands/mysql-migrate-verify.command-options.js.map +1 -0
  83. package/dist/lib/esm/commands/mysql-migrate-verify.command.js +71 -0
  84. package/dist/lib/esm/commands/mysql-migrate-verify.command.js.map +1 -0
  85. package/dist/lib/esm/commands/mysql-migrate.command-options.js +37 -0
  86. package/dist/lib/esm/commands/mysql-migrate.command-options.js.map +1 -0
  87. package/dist/lib/esm/commands/mysql-migrate.command.js +83 -0
  88. package/dist/lib/esm/commands/mysql-migrate.command.js.map +1 -0
  89. package/dist/lib/esm/enums/enums.js +2 -0
  90. package/dist/lib/esm/enums/enums.js.map +1 -0
  91. package/dist/lib/esm/enums/migration-state.enum.js +25 -0
  92. package/dist/lib/esm/enums/migration-state.enum.js.map +1 -0
  93. package/dist/lib/esm/errors/errors.js +6 -0
  94. package/dist/lib/esm/errors/errors.js.map +1 -0
  95. package/dist/lib/esm/errors/migration-checksum-mismatch.error.js +20 -0
  96. package/dist/lib/esm/errors/migration-checksum-mismatch.error.js.map +1 -0
  97. package/dist/lib/esm/errors/migration-duplicate-name.error.js +17 -0
  98. package/dist/lib/esm/errors/migration-duplicate-name.error.js.map +1 -0
  99. package/dist/lib/esm/errors/migration-execution.error.js +17 -0
  100. package/dist/lib/esm/errors/migration-execution.error.js.map +1 -0
  101. package/dist/lib/esm/errors/migration-invalid-name.error.js +16 -0
  102. package/dist/lib/esm/errors/migration-invalid-name.error.js.map +1 -0
  103. package/dist/lib/esm/errors/migration-orphaned-record.error.js +18 -0
  104. package/dist/lib/esm/errors/migration-orphaned-record.error.js.map +1 -0
  105. package/dist/lib/esm/interfaces/interfaces.js +2 -0
  106. package/dist/lib/esm/interfaces/interfaces.js.map +1 -0
  107. package/dist/lib/esm/interfaces/mysql-migration.interface.js +2 -0
  108. package/dist/lib/esm/interfaces/mysql-migration.interface.js.map +1 -0
  109. package/dist/lib/esm/managers/managers.js +6 -0
  110. package/dist/lib/esm/managers/managers.js.map +1 -0
  111. package/dist/lib/esm/managers/mysql-migration-checksum.manager.js +32 -0
  112. package/dist/lib/esm/managers/mysql-migration-checksum.manager.js.map +1 -0
  113. package/dist/lib/esm/managers/mysql-migration-record.manager.js +93 -0
  114. package/dist/lib/esm/managers/mysql-migration-record.manager.js.map +1 -0
  115. package/dist/lib/esm/managers/mysql-migration-runner.manager.js +93 -0
  116. package/dist/lib/esm/managers/mysql-migration-runner.manager.js.map +1 -0
  117. package/dist/lib/esm/managers/mysql-migration-scaffold.manager.js +211 -0
  118. package/dist/lib/esm/managers/mysql-migration-scaffold.manager.js.map +1 -0
  119. package/dist/lib/esm/managers/mysql-migration.manager.js +258 -0
  120. package/dist/lib/esm/managers/mysql-migration.manager.js.map +1 -0
  121. package/dist/lib/esm/models/migration-apply-entry.model.js +7 -0
  122. package/dist/lib/esm/models/migration-apply-entry.model.js.map +1 -0
  123. package/dist/lib/esm/models/migration-apply-result.model.js +14 -0
  124. package/dist/lib/esm/models/migration-apply-result.model.js.map +1 -0
  125. package/dist/lib/esm/models/migration-plan-entry.model.js +7 -0
  126. package/dist/lib/esm/models/migration-plan-entry.model.js.map +1 -0
  127. package/dist/lib/esm/models/migration-plan.model.js +20 -0
  128. package/dist/lib/esm/models/migration-plan.model.js.map +1 -0
  129. package/dist/lib/esm/models/migration-record.model.js +8 -0
  130. package/dist/lib/esm/models/migration-record.model.js.map +1 -0
  131. package/dist/lib/esm/models/models.js +6 -0
  132. package/dist/lib/esm/models/models.js.map +1 -0
  133. package/dist/lib/esm/mysql-cli.configuration-keys.js +17 -0
  134. package/dist/lib/esm/mysql-cli.configuration-keys.js.map +1 -0
  135. package/dist/lib/esm/mysql-cli.module.js +46 -0
  136. package/dist/lib/esm/mysql-cli.module.js.map +1 -0
  137. package/dist/lib/esm/mysql-cli.module.keyname.js +2 -0
  138. package/dist/lib/esm/mysql-cli.module.keyname.js.map +1 -0
  139. package/dist/lib/esm/tsconfig.tsbuildinfo +1 -0
  140. package/dist/types/commands/commands.d.ts +8 -0
  141. package/dist/types/commands/mysql-migrate-create.command-options.d.ts +12 -0
  142. package/dist/types/commands/mysql-migrate-create.command.d.ts +32 -0
  143. package/dist/types/commands/mysql-migrate-status.command-options.d.ts +8 -0
  144. package/dist/types/commands/mysql-migrate-status.command.d.ts +25 -0
  145. package/dist/types/commands/mysql-migrate-verify.command-options.d.ts +8 -0
  146. package/dist/types/commands/mysql-migrate-verify.command.d.ts +23 -0
  147. package/dist/types/commands/mysql-migrate.command-options.d.ts +14 -0
  148. package/dist/types/commands/mysql-migrate.command.d.ts +23 -0
  149. package/dist/types/enums/enums.d.ts +1 -0
  150. package/dist/types/enums/migration-state.enum.d.ts +23 -0
  151. package/dist/types/errors/errors.d.ts +5 -0
  152. package/dist/types/errors/migration-checksum-mismatch.error.d.ts +14 -0
  153. package/dist/types/errors/migration-duplicate-name.error.d.ts +11 -0
  154. package/dist/types/errors/migration-execution.error.d.ts +12 -0
  155. package/dist/types/errors/migration-invalid-name.error.d.ts +10 -0
  156. package/dist/types/errors/migration-orphaned-record.error.d.ts +12 -0
  157. package/dist/types/interfaces/interfaces.d.ts +1 -0
  158. package/dist/types/interfaces/mysql-migration.interface.d.ts +40 -0
  159. package/dist/types/managers/managers.d.ts +5 -0
  160. package/dist/types/managers/mysql-migration-checksum.manager.d.ts +15 -0
  161. package/dist/types/managers/mysql-migration-record.manager.d.ts +22 -0
  162. package/dist/types/managers/mysql-migration-runner.manager.d.ts +16 -0
  163. package/dist/types/managers/mysql-migration-scaffold.manager.d.ts +40 -0
  164. package/dist/types/managers/mysql-migration.manager.d.ts +41 -0
  165. package/dist/types/models/migration-apply-entry.model.d.ts +9 -0
  166. package/dist/types/models/migration-apply-result.model.d.ts +14 -0
  167. package/dist/types/models/migration-plan-entry.model.d.ts +15 -0
  168. package/dist/types/models/migration-plan.model.d.ts +14 -0
  169. package/dist/types/models/migration-record.model.d.ts +12 -0
  170. package/dist/types/models/models.d.ts +5 -0
  171. package/dist/types/mysql-cli.configuration-keys.d.ts +29 -0
  172. package/dist/types/mysql-cli.module.d.ts +10 -0
  173. package/dist/types/mysql-cli.module.keyname.d.ts +1 -0
  174. package/package.json +75 -0
  175. package/readme.md +195 -0
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
15
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
16
+ return new (P || (P = Promise))(function (resolve, reject) {
17
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
18
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
19
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
20
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
21
+ });
22
+ };
23
+ Object.defineProperty(exports, "__esModule", { value: true });
24
+ exports.MysqlMigrationRecordManager = void 0;
25
+ const tsyringe_1 = require("tsyringe");
26
+ const migration_record_model_1 = require("../models/migration-record.model");
27
+ /**
28
+ * Owns the `pristine_migrations` bookkeeping table — creates it on demand, reads
29
+ * the applied rows back, and inserts a new row when a migration finishes.
30
+ *
31
+ * Uses the regular `MysqlClient` pool (no `multipleStatements` needed for any of
32
+ * these queries — they're single statements with parameter placeholders).
33
+ */
34
+ let MysqlMigrationRecordManager = class MysqlMigrationRecordManager {
35
+ constructor(mysqlClient, logHandler) {
36
+ this.mysqlClient = mysqlClient;
37
+ this.logHandler = logHandler;
38
+ }
39
+ ensureTable(configUniqueKeyname, tableName) {
40
+ return __awaiter(this, void 0, void 0, function* () {
41
+ const sql = `CREATE TABLE IF NOT EXISTS \`${tableName}\` (
42
+ id INT UNSIGNED NOT NULL AUTO_INCREMENT,
43
+ filename VARCHAR(255) NOT NULL,
44
+ checksum CHAR(64) NOT NULL,
45
+ applied_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
46
+ execution_time_ms INT UNSIGNED NULL,
47
+ PRIMARY KEY (id),
48
+ UNIQUE KEY uniq_filename (filename)
49
+ )`;
50
+ yield this.mysqlClient.executeSql(configUniqueKeyname, sql, []);
51
+ this.logHandler.debug("MysqlMigrationRecordManager: ensured bookkeeping table.", {
52
+ highlights: { tableName, configUniqueKeyname },
53
+ });
54
+ });
55
+ }
56
+ listApplied(configUniqueKeyname, tableName) {
57
+ return __awaiter(this, void 0, void 0, function* () {
58
+ const sql = `SELECT id, filename, checksum, applied_at, execution_time_ms
59
+ FROM \`${tableName}\`
60
+ ORDER BY filename ASC`;
61
+ const rows = yield this.mysqlClient.executeSql(configUniqueKeyname, sql, []);
62
+ return rows.map((row) => {
63
+ var _a;
64
+ const record = new migration_record_model_1.MigrationRecord();
65
+ record.id = row.id;
66
+ record.filename = row.filename;
67
+ record.checksum = row.checksum;
68
+ record.appliedAt = row.applied_at instanceof Date ? row.applied_at : new Date(row.applied_at);
69
+ record.executionTimeMs = (_a = row.execution_time_ms) !== null && _a !== void 0 ? _a : undefined;
70
+ return record;
71
+ });
72
+ });
73
+ }
74
+ recordApplied(configUniqueKeyname, tableName, record) {
75
+ return __awaiter(this, void 0, void 0, function* () {
76
+ const sql = `INSERT INTO \`${tableName}\` (filename, checksum, execution_time_ms)
77
+ VALUES (?, ?, ?)`;
78
+ yield this.mysqlClient.executeSql(configUniqueKeyname, sql, [
79
+ record.filename,
80
+ record.checksum,
81
+ record.executionTimeMs,
82
+ ]);
83
+ this.logHandler.debug("MysqlMigrationRecordManager: recorded applied migration.", {
84
+ highlights: { tableName, configUniqueKeyname, filename: record.filename },
85
+ });
86
+ });
87
+ }
88
+ };
89
+ exports.MysqlMigrationRecordManager = MysqlMigrationRecordManager;
90
+ exports.MysqlMigrationRecordManager = MysqlMigrationRecordManager = __decorate([
91
+ (0, tsyringe_1.injectable)(),
92
+ __param(0, (0, tsyringe_1.inject)("MysqlClientInterface")),
93
+ __param(1, (0, tsyringe_1.inject)("LogHandlerInterface")),
94
+ __metadata("design:paramtypes", [Object, Object])
95
+ ], MysqlMigrationRecordManager);
96
+ //# sourceMappingURL=mysql-migration-record.manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mysql-migration-record.manager.js","sourceRoot":"","sources":["../../../../src/managers/mysql-migration-record.manager.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAA4C;AAG5C,6EAAiE;AAEjE;;;;;;GAMG;AAEI,IAAM,2BAA2B,GAAjC,MAAM,2BAA2B;IACtC,YACmD,WAAiC,EAClC,UAA+B;QAD9B,gBAAW,GAAX,WAAW,CAAsB;QAClC,eAAU,GAAV,UAAU,CAAqB;IAEjF,CAAC;IAEY,WAAW,CAAC,mBAA2B,EAAE,SAAiB;;YACrE,MAAM,GAAG,GAAG,gCAAgC,SAAS;;;;;;;;MAQnD,CAAC;YAEH,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,mBAAmB,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;YAEhE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,yDAAyD,EAAE;gBAC/E,UAAU,EAAE,EAAC,SAAS,EAAE,mBAAmB,EAAC;aAC7C,CAAC,CAAC;QACL,CAAC;KAAA;IAEY,WAAW,CAAC,mBAA2B,EAAE,SAAiB;;YACrE,MAAM,GAAG,GAAG;0BACU,SAAS;uCACI,CAAC;YAEpC,MAAM,IAAI,GAML,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,mBAAmB,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;YAErE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;;gBACtB,MAAM,MAAM,GAAG,IAAI,wCAAe,EAAE,CAAC;gBACrC,MAAM,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;gBACnB,MAAM,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;gBAC/B,MAAM,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;gBAC/B,MAAM,CAAC,SAAS,GAAG,GAAG,CAAC,UAAU,YAAY,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;gBAC9F,MAAM,CAAC,eAAe,GAAG,MAAA,GAAG,CAAC,iBAAiB,mCAAI,SAAS,CAAC;gBAC5D,OAAO,MAAM,CAAC;YAChB,CAAC,CAAC,CAAC;QACL,CAAC;KAAA;IAEY,aAAa,CACxB,mBAA2B,EAC3B,SAAiB,EACjB,MAAuE;;YAEvE,MAAM,GAAG,GAAG,iBAAiB,SAAS;kCACR,CAAC;YAE/B,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,mBAAmB,EAAE,GAAG,EAAE;gBAC1D,MAAM,CAAC,QAAQ;gBACf,MAAM,CAAC,QAAQ;gBACf,MAAM,CAAC,eAAe;aACvB,CAAC,CAAC;YAEH,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,0DAA0D,EAAE;gBAChF,UAAU,EAAE,EAAC,SAAS,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAC;aACxE,CAAC,CAAC;QACL,CAAC;KAAA;CACF,CAAA;AAnEY,kEAA2B;sCAA3B,2BAA2B;IADvC,IAAA,qBAAU,GAAE;IAGR,WAAA,IAAA,iBAAM,EAAC,sBAAsB,CAAC,CAAA;IAC9B,WAAA,IAAA,iBAAM,EAAC,qBAAqB,CAAC,CAAA;;GAHrB,2BAA2B,CAmEvC"}
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
15
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
16
+ return new (P || (P = Promise))(function (resolve, reject) {
17
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
18
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
19
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
20
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
21
+ });
22
+ };
23
+ Object.defineProperty(exports, "__esModule", { value: true });
24
+ exports.MysqlMigrationRunner = void 0;
25
+ const tsyringe_1 = require("tsyringe");
26
+ const promise_1 = require("mysql2/promise");
27
+ const migration_execution_error_1 = require("../errors/migration-execution.error");
28
+ /**
29
+ * Executes a single migration's SQL string against a target database. Opens a
30
+ * one-shot mysql2 connection with `multipleStatements: true` for the call and
31
+ * closes it in `finally` — does NOT touch the cached `MysqlClient` pool because
32
+ * flipping `multipleStatements` on the pool would leak to every other consumer
33
+ * of the client. A dedicated connection per migration is the cleanest isolation.
34
+ */
35
+ let MysqlMigrationRunner = class MysqlMigrationRunner {
36
+ constructor(mysqlConfigProviders, logHandler) {
37
+ this.mysqlConfigProviders = mysqlConfigProviders;
38
+ this.logHandler = logHandler;
39
+ }
40
+ execute(configUniqueKeyname, migrationName, sql) {
41
+ return __awaiter(this, void 0, void 0, function* () {
42
+ const config = yield this.resolveConfig(configUniqueKeyname);
43
+ const connection = yield (0, promise_1.createConnection)({
44
+ host: config.host,
45
+ port: config.port,
46
+ user: config.user,
47
+ password: config.password,
48
+ database: config.database,
49
+ debug: config.debug,
50
+ multipleStatements: true,
51
+ });
52
+ const startedAt = Date.now();
53
+ try {
54
+ yield connection.query(sql);
55
+ const executionTimeMs = Date.now() - startedAt;
56
+ this.logHandler.debug("MysqlMigrationRunner: migration executed successfully.", {
57
+ highlights: { configUniqueKeyname, migrationName, executionTimeMs },
58
+ });
59
+ return executionTimeMs;
60
+ }
61
+ catch (error) {
62
+ this.logHandler.error("MysqlMigrationRunner: migration execution failed.", {
63
+ highlights: { configUniqueKeyname, migrationName, error },
64
+ });
65
+ throw new migration_execution_error_1.MigrationExecutionError(migrationName, configUniqueKeyname, error);
66
+ }
67
+ finally {
68
+ try {
69
+ yield connection.end();
70
+ }
71
+ catch (closeError) {
72
+ this.logHandler.warning("MysqlMigrationRunner: failed to close migration connection cleanly.", {
73
+ highlights: { configUniqueKeyname, migrationName, error: closeError },
74
+ });
75
+ }
76
+ }
77
+ });
78
+ }
79
+ resolveConfig(configUniqueKeyname) {
80
+ return __awaiter(this, void 0, void 0, function* () {
81
+ const provider = this.mysqlConfigProviders.find((p) => p.supports(configUniqueKeyname));
82
+ if (provider === undefined) {
83
+ throw new Error(`No MysqlConfigProvider supports the unique keyname "${configUniqueKeyname}".`);
84
+ }
85
+ return provider.getMysqlConfig(configUniqueKeyname);
86
+ });
87
+ }
88
+ };
89
+ exports.MysqlMigrationRunner = MysqlMigrationRunner;
90
+ exports.MysqlMigrationRunner = MysqlMigrationRunner = __decorate([
91
+ (0, tsyringe_1.injectable)(),
92
+ __param(0, (0, tsyringe_1.injectAll)("MysqlConfigProviderInterface")),
93
+ __param(1, (0, tsyringe_1.inject)("LogHandlerInterface")),
94
+ __metadata("design:paramtypes", [Array, Object])
95
+ ], MysqlMigrationRunner);
96
+ //# sourceMappingURL=mysql-migration-runner.manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mysql-migration-runner.manager.js","sourceRoot":"","sources":["../../../../src/managers/mysql-migration-runner.manager.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAuD;AACvD,4CAAgD;AAGhD,mFAA4E;AAE5E;;;;;;GAMG;AAEI,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;IAC/B,YAC8D,oBAAoD,EAChE,UAA+B;QADnB,yBAAoB,GAApB,oBAAoB,CAAgC;QAChE,eAAU,GAAV,UAAU,CAAqB;IAEjF,CAAC;IAEY,OAAO,CAAC,mBAA2B,EAAE,aAAqB,EAAE,GAAW;;YAClF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC;YAE7D,MAAM,UAAU,GAAG,MAAM,IAAA,0BAAgB,EAAC;gBACxC,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,kBAAkB,EAAE,IAAI;aACzB,CAAC,CAAC;YAEH,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAE7B,IAAI,CAAC;gBACH,MAAM,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC5B,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;gBAE/C,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,wDAAwD,EAAE;oBAC9E,UAAU,EAAE,EAAC,mBAAmB,EAAE,aAAa,EAAE,eAAe,EAAC;iBAClE,CAAC,CAAC;gBAEH,OAAO,eAAe,CAAC;YACzB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,mDAAmD,EAAE;oBACzE,UAAU,EAAE,EAAC,mBAAmB,EAAE,aAAa,EAAE,KAAK,EAAC;iBACxD,CAAC,CAAC;gBAEH,MAAM,IAAI,mDAAuB,CAAC,aAAa,EAAE,mBAAmB,EAAE,KAAc,CAAC,CAAC;YACxF,CAAC;oBAAS,CAAC;gBACT,IAAI,CAAC;oBACH,MAAM,UAAU,CAAC,GAAG,EAAE,CAAC;gBACzB,CAAC;gBAAC,OAAO,UAAU,EAAE,CAAC;oBACpB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,qEAAqE,EAAE;wBAC7F,UAAU,EAAE,EAAC,mBAAmB,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,EAAC;qBACpE,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;KAAA;IAEa,aAAa,CAAC,mBAA2B;;YACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC;YAExF,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC3B,MAAM,IAAI,KAAK,CAAC,uDAAuD,mBAAmB,IAAI,CAAC,CAAC;YAClG,CAAC;YAED,OAAO,QAAQ,CAAC,cAAc,CAAC,mBAAmB,CAAC,CAAC;QACtD,CAAC;KAAA;CACF,CAAA;AAzDY,oDAAoB;+BAApB,oBAAoB;IADhC,IAAA,qBAAU,GAAE;IAGR,WAAA,IAAA,oBAAS,EAAC,8BAA8B,CAAC,CAAA;IACzC,WAAA,IAAA,iBAAM,EAAC,qBAAqB,CAAC,CAAA;;GAHrB,oBAAoB,CAyDhC"}
@@ -0,0 +1,217 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
15
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
16
+ return new (P || (P = Promise))(function (resolve, reject) {
17
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
18
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
19
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
20
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
21
+ });
22
+ };
23
+ var __importDefault = (this && this.__importDefault) || function (mod) {
24
+ return (mod && mod.__esModule) ? mod : { "default": mod };
25
+ };
26
+ var MysqlMigrationScaffoldManager_1;
27
+ Object.defineProperty(exports, "__esModule", { value: true });
28
+ exports.MysqlMigrationScaffoldManager = void 0;
29
+ const path_1 = __importDefault(require("path"));
30
+ const fs_1 = require("fs");
31
+ const tsyringe_1 = require("tsyringe");
32
+ /**
33
+ * Generates a new `.sql-migrations.ts` file and optionally splices its registration
34
+ * into a marker-annotated migrations module file. Pure dev-time scaffolding — never
35
+ * touches the database, never resolved at runtime in production.
36
+ *
37
+ * Numbering: scans the target directory for files matching `<digits>-<slug>.sql-migrations.ts`,
38
+ * picks `max + 1`, and pads to the current width (default 2 digits, never narrows).
39
+ * If you cross 99 you'll want to rename existing files to 3-digit padding once; the
40
+ * scaffold respects whichever width it finds.
41
+ */
42
+ let MysqlMigrationScaffoldManager = MysqlMigrationScaffoldManager_1 = class MysqlMigrationScaffoldManager {
43
+ constructor(logHandler) {
44
+ this.logHandler = logHandler;
45
+ }
46
+ create(options) {
47
+ return __awaiter(this, void 0, void 0, function* () {
48
+ const slug = this.slugify(options.descriptiveName);
49
+ if (slug.length === 0) {
50
+ throw new Error(`Cannot scaffold a migration from an empty/symbol-only name: "${options.descriptiveName}".`);
51
+ }
52
+ yield fs_1.promises.mkdir(options.scaffoldPath, { recursive: true });
53
+ const existingPrefixes = yield this.listExistingNumberPrefixes(options.scaffoldPath);
54
+ const width = this.resolveWidth(existingPrefixes);
55
+ const nextNumber = (existingPrefixes.length === 0 ? 0 : Math.max(...existingPrefixes)) + 1;
56
+ const paddedNumber = nextNumber.toString().padStart(width, "0");
57
+ const migrationName = `${paddedNumber}-${slug}`;
58
+ const fileName = `${migrationName}.sql-migrations.ts`;
59
+ const filePath = path_1.default.join(options.scaffoldPath, fileName);
60
+ if (yield this.exists(filePath)) {
61
+ throw new Error(`Refusing to overwrite existing migration file at ${filePath}.`);
62
+ }
63
+ const className = this.buildClassName(slug, paddedNumber);
64
+ const fileContent = this.renderMigrationFile(className, migrationName, options.configUniqueKeynames);
65
+ yield fs_1.promises.writeFile(filePath, fileContent, "utf8");
66
+ let barrelUpdated = false;
67
+ if (options.barrelPath !== undefined) {
68
+ barrelUpdated = yield this.tryUpdateBarrel({
69
+ barrelPath: options.barrelPath,
70
+ scaffoldPath: options.scaffoldPath,
71
+ migrationFileName: fileName,
72
+ className,
73
+ });
74
+ }
75
+ return { filePath, className, migrationName, barrelUpdated };
76
+ });
77
+ }
78
+ renderMigrationFile(className, migrationName, configUniqueKeynames) {
79
+ const configLine = configUniqueKeynames === undefined || configUniqueKeynames.length === 0
80
+ ? ` // readonly configUniqueKeynames = ["__default__"]; // uncomment to scope to specific configs`
81
+ : ` readonly configUniqueKeynames = ${JSON.stringify(configUniqueKeynames)};`;
82
+ return `import {injectable} from "tsyringe";
83
+ import {tag} from "@pristine-ts/common";
84
+ import {MysqlMigrationInterface} from "@pristine-ts/mysql-cli";
85
+
86
+ @tag("MysqlMigrationInterface")
87
+ @injectable()
88
+ export class ${className} implements MysqlMigrationInterface {
89
+ readonly name = "${migrationName}";
90
+ ${configLine}
91
+
92
+ up(): string {
93
+ return \`
94
+ -- write your SQL here
95
+ \`;
96
+ }
97
+ }
98
+ `;
99
+ }
100
+ buildClassName(slug, paddedNumber) {
101
+ const pascal = slug
102
+ .split("-")
103
+ .filter((part) => part.length > 0)
104
+ .map((part) => part.charAt(0).toUpperCase() + part.slice(1))
105
+ .join("");
106
+ return `${pascal}_${paddedNumber}`;
107
+ }
108
+ slugify(input) {
109
+ return input
110
+ .toLowerCase()
111
+ .replace(/[^a-z0-9]+/g, "-")
112
+ .replace(/^-+|-+$/g, "");
113
+ }
114
+ tryUpdateBarrel(options) {
115
+ return __awaiter(this, void 0, void 0, function* () {
116
+ if (!(yield this.exists(options.barrelPath))) {
117
+ this.logHandler.warning("MysqlMigrationScaffoldManager: barrel file not found; skipping auto-edit.", {
118
+ highlights: { barrelPath: options.barrelPath },
119
+ });
120
+ return false;
121
+ }
122
+ const original = yield fs_1.promises.readFile(options.barrelPath, "utf8");
123
+ if (original.indexOf(MysqlMigrationScaffoldManager_1.ImportsStart) === -1 ||
124
+ original.indexOf(MysqlMigrationScaffoldManager_1.ImportsEnd) === -1 ||
125
+ original.indexOf(MysqlMigrationScaffoldManager_1.ServicesStart) === -1 ||
126
+ original.indexOf(MysqlMigrationScaffoldManager_1.ServicesEnd) === -1) {
127
+ this.logHandler.warning("MysqlMigrationScaffoldManager: marker comments not found in barrel; skipping auto-edit.", {
128
+ highlights: { barrelPath: options.barrelPath },
129
+ });
130
+ return false;
131
+ }
132
+ const relativeImport = this.relativeImportSpecifier(options.barrelPath, options.scaffoldPath, options.migrationFileName);
133
+ const importLine = `import {${options.className}} from "${relativeImport}";`;
134
+ const serviceLine = `${options.className},`;
135
+ const withImport = this.insertSortedBetween(original, MysqlMigrationScaffoldManager_1.ImportsStart, MysqlMigrationScaffoldManager_1.ImportsEnd, importLine);
136
+ const withService = this.insertSortedBetween(withImport, MysqlMigrationScaffoldManager_1.ServicesStart, MysqlMigrationScaffoldManager_1.ServicesEnd, serviceLine);
137
+ yield fs_1.promises.writeFile(options.barrelPath, withService, "utf8");
138
+ return true;
139
+ });
140
+ }
141
+ insertSortedBetween(source, startMarker, endMarker, newLine) {
142
+ var _a;
143
+ const lines = source.split("\n");
144
+ const startIndex = lines.findIndex((line) => line.trim() === startMarker);
145
+ const endIndex = lines.findIndex((line) => line.trim() === endMarker);
146
+ if (startIndex === -1 || endIndex === -1 || endIndex <= startIndex) {
147
+ return source;
148
+ }
149
+ const indent = ((_a = lines[startIndex].match(/^\s*/)) !== null && _a !== void 0 ? _a : [""])[0];
150
+ const existing = lines.slice(startIndex + 1, endIndex).filter((line) => line.trim().length > 0);
151
+ if (existing.some((line) => line.trim() === newLine.trim())) {
152
+ return source;
153
+ }
154
+ const merged = [...existing, `${indent}${newLine}`].sort((a, b) => a.trim().localeCompare(b.trim()));
155
+ return [
156
+ ...lines.slice(0, startIndex + 1),
157
+ ...merged,
158
+ ...lines.slice(endIndex),
159
+ ].join("\n");
160
+ }
161
+ relativeImportSpecifier(barrelPath, scaffoldPath, migrationFileName) {
162
+ const barrelDir = path_1.default.dirname(path_1.default.resolve(barrelPath));
163
+ const migrationAbs = path_1.default.resolve(scaffoldPath, migrationFileName);
164
+ let rel = path_1.default.relative(barrelDir, migrationAbs).replace(/\\/g, "/");
165
+ rel = rel.replace(/\.ts$/, "");
166
+ if (rel.startsWith(".") === false) {
167
+ rel = `./${rel}`;
168
+ }
169
+ return rel;
170
+ }
171
+ listExistingNumberPrefixes(dir) {
172
+ return __awaiter(this, void 0, void 0, function* () {
173
+ if (!(yield this.exists(dir))) {
174
+ return [];
175
+ }
176
+ const entries = yield fs_1.promises.readdir(dir);
177
+ const prefixes = [];
178
+ for (const entry of entries) {
179
+ const match = MysqlMigrationScaffoldManager_1.FilenamePattern.exec(entry);
180
+ if (match) {
181
+ prefixes.push(parseInt(match[1], 10));
182
+ }
183
+ }
184
+ return prefixes;
185
+ });
186
+ }
187
+ resolveWidth(existingPrefixes) {
188
+ if (existingPrefixes.length === 0) {
189
+ return 2;
190
+ }
191
+ const maxDigits = Math.max(...existingPrefixes.map((n) => n.toString().length));
192
+ return Math.max(2, maxDigits);
193
+ }
194
+ exists(filePath) {
195
+ return __awaiter(this, void 0, void 0, function* () {
196
+ try {
197
+ yield fs_1.promises.access(filePath);
198
+ return true;
199
+ }
200
+ catch (_a) {
201
+ return false;
202
+ }
203
+ });
204
+ }
205
+ };
206
+ exports.MysqlMigrationScaffoldManager = MysqlMigrationScaffoldManager;
207
+ MysqlMigrationScaffoldManager.FilenamePattern = /^(\d+)-([a-z0-9-]+)\.sql-migrations\.ts$/;
208
+ MysqlMigrationScaffoldManager.ImportsStart = "// <pristine:migration-imports:start>";
209
+ MysqlMigrationScaffoldManager.ImportsEnd = "// <pristine:migration-imports:end>";
210
+ MysqlMigrationScaffoldManager.ServicesStart = "// <pristine:migration-services:start>";
211
+ MysqlMigrationScaffoldManager.ServicesEnd = "// <pristine:migration-services:end>";
212
+ exports.MysqlMigrationScaffoldManager = MysqlMigrationScaffoldManager = MysqlMigrationScaffoldManager_1 = __decorate([
213
+ (0, tsyringe_1.injectable)(),
214
+ __param(0, (0, tsyringe_1.inject)("LogHandlerInterface")),
215
+ __metadata("design:paramtypes", [Object])
216
+ ], MysqlMigrationScaffoldManager);
217
+ //# sourceMappingURL=mysql-migration-scaffold.manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mysql-migration-scaffold.manager.js","sourceRoot":"","sources":["../../../../src/managers/mysql-migration-scaffold.manager.ts"],"names":[],"mappings":"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"}