@dogulabs/sql-migrator 1.1.0 → 1.1.1

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 (47) hide show
  1. package/dist/index.js +185 -16
  2. package/package.json +1 -1
  3. package/src/index.ts +5 -1
  4. package/src/module/pg/pg.ts +1 -0
  5. package/dist/config/config.d.ts +0 -25
  6. package/dist/config/config.d.ts.map +0 -1
  7. package/dist/config/config.js +0 -46
  8. package/dist/config/config.js.map +0 -1
  9. package/dist/index.d.ts +0 -3
  10. package/dist/index.d.ts.map +0 -1
  11. package/dist/index.js.map +0 -1
  12. package/dist/module/ch/ch.d.ts +0 -2
  13. package/dist/module/ch/ch.d.ts.map +0 -1
  14. package/dist/module/ch/ch.js +0 -65
  15. package/dist/module/ch/ch.js.map +0 -1
  16. package/dist/module/ch/migrate-down.ch.d.ts +0 -3
  17. package/dist/module/ch/migrate-down.ch.d.ts.map +0 -1
  18. package/dist/module/ch/migrate-down.ch.js +0 -37
  19. package/dist/module/ch/migrate-down.ch.js.map +0 -1
  20. package/dist/module/ch/migrate-reset.ch.d.ts +0 -3
  21. package/dist/module/ch/migrate-reset.ch.d.ts.map +0 -1
  22. package/dist/module/ch/migrate-reset.ch.js +0 -53
  23. package/dist/module/ch/migrate-reset.ch.js.map +0 -1
  24. package/dist/module/ch/migrate-up.ch.d.ts +0 -3
  25. package/dist/module/ch/migrate-up.ch.d.ts.map +0 -1
  26. package/dist/module/ch/migrate-up.ch.js +0 -39
  27. package/dist/module/ch/migrate-up.ch.js.map +0 -1
  28. package/dist/module/common/generate-migration.common.d.ts +0 -2
  29. package/dist/module/common/generate-migration.common.d.ts.map +0 -1
  30. package/dist/module/common/generate-migration.common.js +0 -25
  31. package/dist/module/common/generate-migration.common.js.map +0 -1
  32. package/dist/module/pg/migrate-down.pg.d.ts +0 -3
  33. package/dist/module/pg/migrate-down.pg.d.ts.map +0 -1
  34. package/dist/module/pg/migrate-down.pg.js +0 -31
  35. package/dist/module/pg/migrate-down.pg.js.map +0 -1
  36. package/dist/module/pg/migrate-reset.pg.d.ts +0 -3
  37. package/dist/module/pg/migrate-reset.pg.d.ts.map +0 -1
  38. package/dist/module/pg/migrate-reset.pg.js +0 -50
  39. package/dist/module/pg/migrate-reset.pg.js.map +0 -1
  40. package/dist/module/pg/migrate-up.pg.d.ts +0 -3
  41. package/dist/module/pg/migrate-up.pg.d.ts.map +0 -1
  42. package/dist/module/pg/migrate-up.pg.js +0 -33
  43. package/dist/module/pg/migrate-up.pg.js.map +0 -1
  44. package/dist/module/pg/pg.d.ts +0 -2
  45. package/dist/module/pg/pg.d.ts.map +0 -1
  46. package/dist/module/pg/pg.js +0 -64
  47. package/dist/module/pg/pg.js.map +0 -1
package/dist/index.js CHANGED
@@ -1,26 +1,195 @@
1
1
  #!/usr/bin/env node
2
+ import fs from 'fs';
3
+ import { join } from 'path';
4
+ import { Pool } from "pg";
2
5
  import 'dotenv/config';
3
- import { pg } from "./module/pg/pg.js";
4
- import { ch } from "./module/ch/ch.js";
5
- import { loadVaultConfig } from "./config/config.js";
6
6
  function getArg(key, defaultValue = "") {
7
7
  const arg = process.argv.find((a) => a.startsWith(`--${key}=`));
8
8
  return arg ? arg.split("=")[1] : defaultValue;
9
9
  }
10
10
  async function runMigrations() {
11
- await loadVaultConfig();
12
- const action = getArg("action", "up") ?? "up";
13
- const driver = getArg("driver", "postgres") ?? "postgres";
14
- const type = getArg("type", "migration") ?? "migration";
15
- const name = getArg("name", "") ?? "";
16
- switch (driver) {
17
- case "clickhouse":
18
- await ch(type, action, name);
19
- break;
20
- default:
21
- await pg(type, action, name);
22
- break;
11
+ const action = getArg("action", "up");
12
+ const driver = getArg("driver", "postgres");
13
+ const type = getArg("type", "migration");
14
+ const name = getArg("name", "");
15
+ if (!['migration', 'seed'].includes(type)) {
16
+ console.log('Invalid type. Please use "migration" or "seed".');
17
+ process.exit(1);
23
18
  }
19
+ if (action === 'new' && type === 'seed' && name === '') {
20
+ console.log('Invalid name. Please use "new seed" following by name.');
21
+ process.exit(1);
22
+ }
23
+ try {
24
+ let pg = null;
25
+ if (action !== 'new') {
26
+ const pgConfig = {
27
+ host: process.env.PG_HOST,
28
+ port: Number(process.env.PG_PORT),
29
+ password: process.env.PG_PASS,
30
+ user: process.env.PG_USER,
31
+ database: process.env.PG_DB,
32
+ };
33
+ if (process.env.PG_CA?.length) {
34
+ pgConfig.ssl = { ca: process.env.PG_CA };
35
+ }
36
+ pg = new Pool(pgConfig);
37
+ await pg.query(`CREATE TABLE IF NOT EXISTS node_migrator_${type}s (
38
+ id BIGSERIAL PRIMARY KEY,
39
+ version VARCHAR(255) NOT NULL,
40
+ created_at TIMESTAMP NOT NULL DEFAULT NOW()
41
+ )`);
42
+ }
43
+ // @ts-ignore
44
+ const scriptsDir = join(process.cwd(), 'db', driver, type === 'migration' ? 'migration' : 'seed');
45
+ switch (action) {
46
+ case 'up':
47
+ await migrateUp(pg, scriptsDir, type);
48
+ break;
49
+ case 'down':
50
+ await migrateDown(pg, scriptsDir, type);
51
+ break;
52
+ case 'reset':
53
+ await migrateReset(pg, scriptsDir, type);
54
+ break;
55
+ case 'new':
56
+ generateMigration(scriptsDir, name, type);
57
+ break;
58
+ default:
59
+ console.log('Invalid action. Please use "up", "down", or "reset".');
60
+ process.exit(1);
61
+ }
62
+ }
63
+ catch (e) {
64
+ console.error('Migration failed: ', e.message);
65
+ process.exit(1);
66
+ }
67
+ finally {
68
+ process.exit(0);
69
+ }
70
+ }
71
+ async function migrateUp(db, scriptsDir, type) {
72
+ if (!db)
73
+ throw Error('Database connection is required');
74
+ try {
75
+ console.log(`Pushing database ${type}s...`);
76
+ const res = await db.query(`SELECT version FROM node_migrator_${type}s`);
77
+ const versions = res.rows.map((row) => row.version);
78
+ const files = fs.readdirSync(scriptsDir)
79
+ .filter((file) => {
80
+ const isVersion = versions.includes(file.split('_')[0]);
81
+ return !isVersion && file.endsWith('.sql');
82
+ }).sort();
83
+ for (const file of files) {
84
+ const migrationPath = join(scriptsDir, file);
85
+ const migrationScripts = fs.readFileSync(migrationPath, 'utf8');
86
+ const sqls = migrationScripts.split('-- +migrator UP')[1] || '';
87
+ const sql = sqls?.split('-- +migrator DOWN')[0] || '';
88
+ await db.query(sql);
89
+ const version = file.split('_')[0];
90
+ await db.query(`INSERT INTO node_migrator_${type}s (version) VALUES ($1)`, [version]);
91
+ console.log(`✓ Migration pushed: ${file}`);
92
+ }
93
+ console.log(`All ${type}s pushed successfully!`);
94
+ }
95
+ catch (e) {
96
+ console.error('Migration UP failed: ', e.message);
97
+ process.exit(1);
98
+ }
99
+ }
100
+ async function migrateDown(db, scriptsDir, type) {
101
+ if (type === 'seed') {
102
+ throw new Error("Seeder cannot be reverted. use 'reset' instead.");
103
+ }
104
+ if (!db)
105
+ throw Error('Database connection is required');
106
+ try {
107
+ console.log(`Rolling back database ${type}s...`);
108
+ const res = await db.query(`SELECT version FROM node_migrator_${type}s ORDER BY created_at DESC LIMIT 1`);
109
+ const version = res.rows[0].version;
110
+ const file = fs.readdirSync(scriptsDir)
111
+ .find((file) => file.startsWith(`${version}_`) && file.endsWith('.sql'));
112
+ if (!file)
113
+ throw Error(`Migration script version ${version} not found`);
114
+ const migrationPath = join(scriptsDir, file);
115
+ const migrationScripts = fs.readFileSync(migrationPath, 'utf8');
116
+ const sqls = migrationScripts.split('-- +migrator DOWN')[1] || '';
117
+ const sql = sqls?.split('-- +migrator UP')[0] || '';
118
+ await db.query(sql);
119
+ await db.query(`DELETE FROM node_migrator_${type}s WHERE version = $1`, [version]);
120
+ console.log(`✓ Migration reverted: ${file}`);
121
+ }
122
+ catch (e) {
123
+ console.error('Migration DOWN failed: ', e.message);
124
+ process.exit(1);
125
+ }
126
+ }
127
+ async function migrateReset(db, scriptsDir, type) {
128
+ if (!db)
129
+ throw Error('Database connection is required');
130
+ try {
131
+ console.log(`Reverting database ${type}s...`);
132
+ if (type === 'seed') {
133
+ await db.query("DROP TABLE IF EXISTS node_migrator_seeds");
134
+ console.log("✓ Seed cleaned");
135
+ return;
136
+ }
137
+ const res = await db.query(`SELECT version FROM node_migrator_${type}s`);
138
+ const versions = res.rows.map((row) => row.version);
139
+ const scripts = [];
140
+ const availableVersions = [];
141
+ const files = fs.readdirSync(scriptsDir)
142
+ .filter((file) => {
143
+ const isVersion = versions.includes(file.split('_')[0]);
144
+ return isVersion && file.endsWith('.sql');
145
+ }).sort().reverse();
146
+ for (const file of files) {
147
+ if (files.includes(file)) {
148
+ scripts.push(file);
149
+ availableVersions.push(file.split('_')[0]);
150
+ }
151
+ }
152
+ if (scripts.length !== res.rowCount) {
153
+ const missingVersions = versions.filter((v) => !availableVersions.includes(v));
154
+ throw Error(`Missing version: ${missingVersions}`);
155
+ }
156
+ for (const file of scripts) {
157
+ const migrationPath = join(scriptsDir, file);
158
+ const migrationScripts = fs.readFileSync(migrationPath, 'utf8');
159
+ const sqls = migrationScripts.split('-- +migrator DOWN')[1] || '';
160
+ const sql = sqls?.split('-- +migrator UP')[0] || '';
161
+ await db.query(sql);
162
+ console.log(`✓ Migration ${file} reverted`);
163
+ }
164
+ await db.query(`DELETE FROM node_migrator_${type}s`);
165
+ await db.query("DROP TABLE IF EXISTS node_migrator_seeds");
166
+ console.log("Migrations rolled back");
167
+ }
168
+ catch (e) {
169
+ console.error('Migration DOWN failed: ', e.message);
170
+ process.exit(1);
171
+ }
172
+ }
173
+ function generateMigration(scriptsDir, name, type) {
174
+ if (name.length < 1)
175
+ throw Error("name argument required");
176
+ const timestamp = new Date().toISOString().replace(/\..+/, "").replace(/[^0-9]/g, "");
177
+ const migrationPath = join(scriptsDir, `${timestamp}_${name}.sql`);
178
+ if (!fs.existsSync(scriptsDir)) {
179
+ fs.mkdirSync(scriptsDir, { recursive: true });
180
+ }
181
+ const migrationScripts = `-- +migrator UP
182
+ -- +migrator statement BEGIN
183
+
184
+ -- +migrator statement END
185
+
186
+
187
+ -- +migrator DOWN
188
+ -- +migrator statement BEGIN
189
+
190
+ -- +migrator statement END
191
+ `;
192
+ fs.writeFileSync(migrationPath, migrationScripts);
193
+ console.log(`✓ ${type} created: ${timestamp}_${name}.sql`);
24
194
  }
25
195
  await runMigrations();
26
- //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dogulabs/sql-migrator",
3
- "version": "1.1.0",
3
+ "version": "1.1.1",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
package/src/index.ts CHANGED
@@ -15,7 +15,7 @@ async function runMigrations() {
15
15
  await loadVaultConfig()
16
16
 
17
17
  const action = getArg("action", "up") ?? "up";
18
- const driver = getArg("driver", "postgres") ?? "postgres";
18
+ const driver = getArg("driver", "postgres") ?? "";
19
19
  const type = getArg("type", "migration") ?? "migration";
20
20
  const name = getArg("name", "") ?? "";
21
21
 
@@ -23,7 +23,11 @@ async function runMigrations() {
23
23
  case "clickhouse":
24
24
  await ch(type, action, name);
25
25
  break;
26
+ case "postgres":
27
+ await pg(type, action, name);
28
+ break;
26
29
  default:
30
+ await ch(type, action, name);
27
31
  await pg(type, action, name);
28
32
  break;
29
33
  }
@@ -5,6 +5,7 @@ import { migrateDownPg } from "./migrate-down.pg.js";
5
5
  import { migrateResetPg } from "./migrate-reset.pg.js";
6
6
  import { generateMigrationCommon } from "../common/generate-migration.common.js";
7
7
  import { envConfig } from "../../config/config.js";
8
+ import { join } from "path";
8
9
 
9
10
 
10
11
  export async function pg(type: string, action: string, name: string) {
@@ -1,25 +0,0 @@
1
- type EnvConfig = {
2
- pg: PgConfig;
3
- clickHouse: ClickHouseConfig;
4
- };
5
- type PgConfig = {
6
- host: string;
7
- port: number;
8
- user: string;
9
- password: string;
10
- database: string;
11
- queryTimeout: number;
12
- connectionTimeout: number;
13
- };
14
- type ClickHouseConfig = {
15
- port: number;
16
- host: string;
17
- database: string;
18
- pass: string;
19
- user: string;
20
- ssl: boolean;
21
- };
22
- export declare const envConfig: EnvConfig;
23
- export declare function loadVaultConfig(): Promise<void>;
24
- export {};
25
- //# sourceMappingURL=config.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config/config.ts"],"names":[],"mappings":"AAKA,KAAK,SAAS,GAAG;IACf,EAAE,EAAE,QAAQ,CAAC;IACb,UAAU,EAAE,gBAAgB,CAAC;CAC9B,CAAA;AAED,KAAK,QAAQ,GAAG;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;CAC3B,CAAA;AAED,KAAK,gBAAgB,GAAG;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,OAAO,CAAC;CACd,CAAA;AAqBD,eAAO,MAAM,SAAS,EAAE,SAGvB,CAAC;AAGF,wBAAsB,eAAe,kBAoBpC"}
@@ -1,46 +0,0 @@
1
- import dotenv from 'dotenv';
2
- import vaultClient from 'node-vault-client';
3
- dotenv.config();
4
- const pgConfig = {
5
- host: process.env.PG_HOST || 'localhost',
6
- port: Number(process.env.PG_PORT) || 5432,
7
- user: process.env.PG_USER || '',
8
- password: process.env.PG_PASS || '',
9
- database: process.env.PG_DB || '',
10
- queryTimeout: Number(process.env.PG_QUERY_TIMEOUT) || 30000,
11
- connectionTimeout: Number(process.env.PG_CONNECTION_TIMEOUT) || 5000,
12
- };
13
- const clickHouseConfig = {
14
- port: Number(process.env.CH_PORT) || 0,
15
- host: process.env.CH_HOST || 'localhost',
16
- database: process.env.CH_DB || '',
17
- pass: process.env.CH_PASS || '',
18
- user: process.env.CH_USER || '',
19
- ssl: process.env.CH_SSL === 'true' || process.env.CH_SSL === '1',
20
- };
21
- export const envConfig = {
22
- pg: pgConfig,
23
- clickHouse: clickHouseConfig,
24
- };
25
- export async function loadVaultConfig() {
26
- try {
27
- const vault = vaultClient.boot('main', {
28
- api: {
29
- url: process.env.VAULT_URL ?? '',
30
- apiVersion: 'v1',
31
- },
32
- auth: {
33
- type: 'token',
34
- config: { token: process.env.VAULT_TOKEN ?? '' },
35
- },
36
- });
37
- const kv = await vault.read(process.env.VAULT_PATH ?? '');
38
- Object.assign(envConfig, kv.getData());
39
- console.log(`Vault loaded from ${process.env.VAULT_URL}, with path ${process.env.VAULT_PATH}`);
40
- }
41
- catch (e) {
42
- console.log(`Vault failed to load: ${e.message}`);
43
- console.log('using .env');
44
- }
45
- }
46
- //# sourceMappingURL=config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config/config.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,WAAW,MAAM,mBAAmB,CAAC;AAE5C,MAAM,CAAC,MAAM,EAAE,CAAC;AA0BhB,MAAM,QAAQ,GAAa;IACzB,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,WAAW;IACxC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI;IACzC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE;IAC/B,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE;IACnC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE;IACjC,YAAY,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,KAAK;IAC3D,iBAAiB,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,IAAI,IAAI;CACrE,CAAA;AAED,MAAM,gBAAgB,GAAqB;IACzC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC;IACtC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,WAAW;IACxC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE;IACjC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE;IAC/B,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE;IAC/B,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,GAAG;CACjE,CAAA;AAED,MAAM,CAAC,MAAM,SAAS,GAAc;IAClC,EAAE,EAAE,QAAQ;IACZ,UAAU,EAAE,gBAAgB;CAC7B,CAAC;AAGF,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE;YACrC,GAAG,EAAE;gBACH,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE;gBAChC,UAAU,EAAE,IAAI;aACjB;YACD,IAAI,EAAE;gBACJ,IAAI,EAAE,OAAO;gBACb,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,EAAC;aAChD;SACF,CAAC,CAAC;QACH,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;QAE1D,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,CAAA;QACtC,OAAO,CAAC,GAAG,CAAC,qBAAqB,OAAO,CAAC,GAAG,CAAC,SAAS,eAAe,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;IACjG,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,yBAA0B,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;IAC3B,CAAC;AACH,CAAC"}
package/dist/index.d.ts DELETED
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env node
2
- import 'dotenv/config';
3
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,eAAe,CAAA"}
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,eAAe,CAAA;AACtB,OAAO,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AACvC,OAAO,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAGrD,SAAS,MAAM,CAAC,GAAW,EAAE,YAAY,GAAG,EAAE;IAC5C,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC;IAChE,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;AAChD,CAAC;AAED,KAAK,UAAU,aAAa;IAC1B,MAAM,eAAe,EAAE,CAAA;IAEvB,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC;IAC9C,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,UAAU,CAAC;IAC1D,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,IAAI,WAAW,CAAC;IACxD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;IAEtC,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,YAAY;YACf,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;YAC7B,MAAM;QACR;YACE,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;YAC7B,MAAM;IACV,CAAC;AACH,CAAC;AAED,MAAM,aAAa,EAAE,CAAC"}
@@ -1,2 +0,0 @@
1
- export declare function ch(type: string, action: string, name: string): Promise<void>;
2
- //# sourceMappingURL=ch.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ch.d.ts","sourceRoot":"","sources":["../../../src/module/ch/ch.ts"],"names":[],"mappings":"AAUA,wBAAsB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,iBAuDlE"}
@@ -1,65 +0,0 @@
1
- import { migrateUpCh } from "./migrate-up.ch.js";
2
- import { migrateDownCh } from "./migrate-down.ch.js";
3
- import { migrateResetCh } from "./migrate-reset.ch.js";
4
- import { generateMigrationCommon } from "../common/generate-migration.common.js";
5
- import { createClient } from "@clickhouse/client";
6
- import { NodeClickHouseClient } from "@clickhouse/client/dist/client.js";
7
- import { envConfig } from "../../config/config.js";
8
- import { join } from "path";
9
- export async function ch(type, action, name) {
10
- if (!['migration', 'seed'].includes(type)) {
11
- console.log('Invalid type. Please use "migration" or "seed".');
12
- process.exit(1);
13
- }
14
- if (action === 'new' && type === 'seed' && name === '') {
15
- console.log('Invalid name. Please use "new seed" following by name.');
16
- process.exit(1);
17
- }
18
- try {
19
- const client = createClient({
20
- url: `${envConfig.clickHouse.ssl ? "https" : "http"}://${envConfig.clickHouse.host}:${envConfig.clickHouse.port}`,
21
- username: envConfig.clickHouse.user,
22
- password: envConfig.clickHouse.pass,
23
- database: envConfig.clickHouse.database,
24
- request_timeout: 10_000,
25
- });
26
- if (action !== 'new') {
27
- await client.query({
28
- query: `
29
- CREATE TABLE IF NOT EXISTS node_migrator_${type}s (
30
- id Int64 PRIMARY KEY,
31
- version String NOT NULL,
32
- created_at DateTime('UTC') NOT NULL DEFAULT now()
33
- )`,
34
- format: 'JSONEachRow',
35
- });
36
- }
37
- // @ts-ignore
38
- const scriptsDir = join(process.cwd(), 'db', 'clickhouse', type === 'migration' ? 'migration' : 'seed');
39
- switch (action) {
40
- case 'up':
41
- await migrateUpCh(client, scriptsDir, type);
42
- break;
43
- case 'down':
44
- await migrateDownCh(client, scriptsDir, type);
45
- break;
46
- case 'reset':
47
- await migrateResetCh(client, scriptsDir, type);
48
- break;
49
- case 'new':
50
- generateMigrationCommon(scriptsDir, name, type);
51
- break;
52
- default:
53
- console.log('Invalid action. Please use "up", "down", or "reset".');
54
- process.exit(1);
55
- }
56
- }
57
- catch (e) {
58
- console.error('Migration failed: ', e.message);
59
- process.exit(1);
60
- }
61
- finally {
62
- process.exit(0);
63
- }
64
- }
65
- //# sourceMappingURL=ch.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ch.js","sourceRoot":"","sources":["../../../src/module/ch/ch.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import type { NodeClickHouseClient } from "@clickhouse/client/dist/client";
2
- export declare function migrateDownCh(db: NodeClickHouseClient | null, scriptsDir: string, type: string): Promise<void>;
3
- //# sourceMappingURL=migrate-down.ch.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"migrate-down.ch.d.ts","sourceRoot":"","sources":["../../../src/module/ch/migrate-down.ch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAK3E,wBAAsB,aAAa,CAAC,EAAE,EAAE,oBAAoB,GAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,iBAsClG"}
@@ -1,37 +0,0 @@
1
- import fs from "fs";
2
- import { join } from "path";
3
- export async function migrateDownCh(db, scriptsDir, type) {
4
- if (type === 'seed') {
5
- throw new Error("Seeder cannot be reverted. use 'reset' instead.");
6
- }
7
- if (!db)
8
- throw Error('Database connection is required');
9
- try {
10
- console.log(`Rolling back database ${type}s...`);
11
- const res = await db.query({
12
- query: `SELECT version FROM node_migrator_${type}s`,
13
- format: 'JSONEachRow',
14
- });
15
- const data = await res.json();
16
- const version = data[0].version;
17
- const file = fs.readdirSync(scriptsDir)
18
- .find((file) => file.startsWith(`${version}_`) && file.endsWith('.sql'));
19
- if (!file)
20
- throw Error(`Migration script version ${version} not found`);
21
- const migrationPath = join(scriptsDir, file);
22
- const migrationScripts = fs.readFileSync(migrationPath, 'utf8');
23
- const sqls = migrationScripts.split('-- +migrator DOWN')[1] || '';
24
- const sql = sqls?.split('-- +migrator UP')[0] || '';
25
- await db.exec({ query: sql });
26
- await db.exec({
27
- query: `DELETE FROM node_migrator_${type}s WHERE version = {val1: String}`,
28
- query_params: { val1: version },
29
- });
30
- console.log(`✓ Migration reverted: ${file}`);
31
- }
32
- catch (e) {
33
- console.error('Migration DOWN failed: ', e.message);
34
- process.exit(1);
35
- }
36
- }
37
- //# sourceMappingURL=migrate-down.ch.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"migrate-down.ch.js","sourceRoot":"","sources":["../../../src/module/ch/migrate-down.ch.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAG5B,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,EAA6B,EAAE,UAAkB,EAAE,IAAY;IACjG,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAA;IACpE,CAAC;IAED,IAAI,CAAC,EAAE;QAAE,MAAM,KAAK,CAAC,iCAAiC,CAAC,CAAA;IACvD,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,yBAAyB,IAAI,MAAM,CAAC,CAAC;QAEjD,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC;YACzB,KAAK,EAAE,qCAAqC,IAAI,GAAG;YACnD,MAAM,EAAE,aAAa;SACtB,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAS,CAAC;QACrC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;QAGhC,MAAM,IAAI,GAAG,EAAE,CAAC,WAAW,CAAC,UAAU,CAAC;aACpC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,OAAO,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAA;QAE1E,IAAI,CAAC,IAAI;YAAE,MAAM,KAAK,CAAC,4BAA4B,OAAO,YAAY,CAAC,CAAA;QACvE,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAC7C,MAAM,gBAAgB,GAAG,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;QAEhE,MAAM,IAAI,GAAG,gBAAgB,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;QACjE,MAAM,GAAG,GAAI,IAAI,EAAE,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;QACpD,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QAE9B,MAAM,EAAE,CAAC,IAAI,CAAC;YACZ,KAAK,EAAE,6BAA6B,IAAI,kCAAkC;YAC1E,YAAY,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;SAChC,CAAC,CAAA;QACF,OAAO,CAAC,GAAG,CAAC,yBAAyB,IAAI,EAAE,CAAC,CAAC;IAC/C,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAG,CAAW,CAAC,OAAO,CAAC,CAAC;QAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -1,3 +0,0 @@
1
- import type { NodeClickHouseClient } from "@clickhouse/client/dist/client";
2
- export declare function migrateResetCh(db: NodeClickHouseClient | null, scriptsDir: string, type: string): Promise<void>;
3
- //# sourceMappingURL=migrate-reset.ch.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"migrate-reset.ch.d.ts","sourceRoot":"","sources":["../../../src/module/ch/migrate-reset.ch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAK3E,wBAAsB,cAAc,CAAC,EAAE,EAAE,oBAAoB,GAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,iBAyDnG"}
@@ -1,53 +0,0 @@
1
- import fs from "fs";
2
- import { join } from "path";
3
- export async function migrateResetCh(db, scriptsDir, type) {
4
- if (!db)
5
- throw Error('Database connection is required');
6
- try {
7
- console.log(`Reverting database ${type}s...`);
8
- if (type === 'seed') {
9
- await db.exec({ query: "DROP TABLE IF EXISTS node_migrator_seeds" });
10
- console.log("✓ Seed cleaned");
11
- return;
12
- }
13
- const res = await db.query({
14
- query: `SELECT version FROM node_migrator_${type}s`,
15
- format: 'JSONEachRow',
16
- });
17
- const data = await res.json();
18
- const versions = data.map((row) => row.version);
19
- const scripts = [];
20
- const availableVersions = [];
21
- const files = fs.readdirSync(scriptsDir)
22
- .filter((file) => {
23
- const isVersion = versions.includes(file.split('_')[0]);
24
- return isVersion && file.endsWith('.sql');
25
- }).sort().reverse();
26
- for (const file of files) {
27
- if (files.includes(file)) {
28
- scripts.push(file);
29
- availableVersions.push(file.split('_')[0]);
30
- }
31
- }
32
- if (scripts.length !== data.length) {
33
- const missingVersions = versions.filter((v) => !availableVersions.includes(v));
34
- throw Error(`Missing version: ${missingVersions}`);
35
- }
36
- for (const file of scripts) {
37
- const migrationPath = join(scriptsDir, file);
38
- const migrationScripts = fs.readFileSync(migrationPath, 'utf8');
39
- const sqls = migrationScripts.split('-- +migrator DOWN')[1] || '';
40
- const sql = sqls?.split('-- +migrator UP')[0] || '';
41
- await db.exec({ query: sql });
42
- console.log(`✓ Migration ${file} reverted`);
43
- }
44
- await db.exec({ query: `DELETE FROM node_migrator_${type}s WHERE 1=1` });
45
- await db.exec({ query: "DROP TABLE IF EXISTS node_migrator_seeds" });
46
- console.log("Migrations rolled back");
47
- }
48
- catch (e) {
49
- console.error('Migration RESET failed: ', e.message);
50
- process.exit(1);
51
- }
52
- }
53
- //# sourceMappingURL=migrate-reset.ch.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"migrate-reset.ch.js","sourceRoot":"","sources":["../../../src/module/ch/migrate-reset.ch.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import type { NodeClickHouseClient } from "@clickhouse/client/dist/client";
2
- export declare function migrateUpCh(db: NodeClickHouseClient | null, scriptsDir: string, type: string): Promise<void>;
3
- //# sourceMappingURL=migrate-up.ch.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"migrate-up.ch.d.ts","sourceRoot":"","sources":["../../../src/module/ch/migrate-up.ch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAK3E,wBAAsB,WAAW,CAAC,EAAE,EAAE,oBAAoB,GAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,iBAuChG"}
@@ -1,39 +0,0 @@
1
- import fs from "fs";
2
- import { join } from "path";
3
- export async function migrateUpCh(db, scriptsDir, type) {
4
- if (!db)
5
- throw Error('Database connection is required');
6
- try {
7
- console.log(`Pushing database ${type}s...`);
8
- const res = await db.query({
9
- query: `SELECT version FROM node_migrator_${type}s`,
10
- format: 'JSONEachRow',
11
- });
12
- const data = await res.json();
13
- const versions = data.map((row) => row.version);
14
- const files = fs.readdirSync(scriptsDir)
15
- .filter((file) => {
16
- const isVersion = versions.includes(file.split('_')[0]);
17
- return !isVersion && file.endsWith('.sql');
18
- }).sort();
19
- for (const file of files) {
20
- const migrationPath = join(scriptsDir, file);
21
- const migrationScripts = fs.readFileSync(migrationPath, 'utf8');
22
- const sqls = migrationScripts.split('-- +migrator UP')[1] || '';
23
- const sql = sqls?.split('-- +migrator DOWN')[0] || '';
24
- await db.exec({ query: sql });
25
- const version = file.split('_')[0];
26
- await db.exec({
27
- query: `INSERT INTO node_migrator_${type}s (version) VALUES ({val: String})`,
28
- query_params: { val: version },
29
- });
30
- console.log(`✓ Migration pushed: ${file}`);
31
- }
32
- console.log(`All ${type}s pushed successfully!`);
33
- }
34
- catch (e) {
35
- console.error('Migration UP failed: ', e.message);
36
- process.exit(1);
37
- }
38
- }
39
- //# sourceMappingURL=migrate-up.ch.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"migrate-up.ch.js","sourceRoot":"","sources":["../../../src/module/ch/migrate-up.ch.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAG5B,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,EAA6B,EAAE,UAAkB,EAAE,IAAY;IAC/F,IAAI,CAAC,EAAE;QAAE,MAAM,KAAK,CAAC,iCAAiC,CAAC,CAAA;IACvD,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,MAAM,CAAC,CAAC;QAC5C,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC;YACzB,KAAK,EAAE,qCAAqC,IAAI,GAAG;YACnD,MAAM,EAAE,aAAa;SACtB,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAS,CAAC;QACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAsB,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QAElE,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,UAAU,CAAC;aACrC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;YACf,MAAM,SAAS,GAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YACxD,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;QAC5C,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;QAEX,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;YAC7C,MAAM,gBAAgB,GAAG,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;YAEhE,MAAM,IAAI,GAAG,gBAAgB,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;YAC/D,MAAM,GAAG,GAAI,IAAI,EAAE,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;YACtD,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;YAE9B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;YAClC,MAAM,EAAE,CAAC,IAAI,CAAC;gBACZ,KAAK,EAAE,6BAA6B,IAAI,oCAAoC;gBAC5E,YAAY,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE;aAC/B,CAAC,CAAA;YACF,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,EAAE,CAAC,CAAC;QAC7C,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,wBAAwB,CAAC,CAAC;IACnD,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAG,CAAW,CAAC,OAAO,CAAC,CAAC;QAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -1,2 +0,0 @@
1
- export declare function generateMigrationCommon(scriptsDir: string, name: string, type: string): void;
2
- //# sourceMappingURL=generate-migration.common.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"generate-migration.common.d.ts","sourceRoot":"","sources":["../../../src/module/common/generate-migration.common.ts"],"names":[],"mappings":"AAIA,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAuBrF"}
@@ -1,25 +0,0 @@
1
- import { join } from "path";
2
- import fs from "fs";
3
- export function generateMigrationCommon(scriptsDir, name, type) {
4
- if (name.length < 1)
5
- throw Error("name argument required");
6
- const timestamp = new Date().toISOString().replace(/\..+/, "").replace(/[^0-9]/g, "");
7
- const migrationPath = join(scriptsDir, `${timestamp}_${name}.sql`);
8
- if (!fs.existsSync(scriptsDir)) {
9
- fs.mkdirSync(scriptsDir, { recursive: true });
10
- }
11
- const migrationScripts = `-- +migrator UP
12
- -- +migrator statement BEGIN
13
-
14
- -- +migrator statement END
15
-
16
-
17
- -- +migrator DOWN
18
- -- +migrator statement BEGIN
19
-
20
- -- +migrator statement END
21
- `;
22
- fs.writeFileSync(migrationPath, migrationScripts);
23
- console.log(`✓ ${type} created: ${timestamp}_${name}.sql`);
24
- }
25
- //# sourceMappingURL=generate-migration.common.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"generate-migration.common.js","sourceRoot":"","sources":["../../../src/module/common/generate-migration.common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,MAAM,IAAI,CAAC;AAGpB,MAAM,UAAU,uBAAuB,CAAC,UAAkB,EAAE,IAAY,EAAE,IAAY;IACpF,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,KAAK,CAAC,wBAAwB,CAAC,CAAA;IAC1D,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAA;IACrF,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,SAAS,IAAI,IAAI,MAAM,CAAC,CAAC;IAEnE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,MAAM,gBAAgB,GAAG;;;;;;;;;;CAU1B,CAAA;IACC,EAAE,CAAC,aAAa,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC;IAElD,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,aAAa,SAAS,IAAI,IAAI,MAAM,CAAC,CAAC;AAC7D,CAAC"}
@@ -1,3 +0,0 @@
1
- import { Pool } from "pg";
2
- export declare function migrateDownPg(db: Pool | null, scriptsDir: string, type: string): Promise<void>;
3
- //# sourceMappingURL=migrate-down.pg.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"migrate-down.pg.d.ts","sourceRoot":"","sources":["../../../src/module/pg/migrate-down.pg.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAK1B,wBAAsB,aAAa,CAAC,EAAE,EAAE,IAAI,GAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,iBA4BlF"}
@@ -1,31 +0,0 @@
1
- import { Pool } from "pg";
2
- import fs from "fs";
3
- import { join } from "path";
4
- export async function migrateDownPg(db, scriptsDir, type) {
5
- if (type === 'seed') {
6
- throw new Error("Seeder cannot be reverted. use 'reset' instead.");
7
- }
8
- if (!db)
9
- throw Error('Database connection is required');
10
- try {
11
- console.log(`Rolling back database ${type}s...`);
12
- const res = await db.query(`SELECT version FROM node_migrator_${type}s ORDER BY created_at DESC LIMIT 1`);
13
- const version = res.rows[0].version;
14
- const file = fs.readdirSync(scriptsDir)
15
- .find((file) => file.startsWith(`${version}_`) && file.endsWith('.sql'));
16
- if (!file)
17
- throw Error(`Migration script version ${version} not found`);
18
- const migrationPath = join(scriptsDir, file);
19
- const migrationScripts = fs.readFileSync(migrationPath, 'utf8');
20
- const sqls = migrationScripts.split('-- +migrator DOWN')[1] || '';
21
- const sql = sqls?.split('-- +migrator UP')[0] || '';
22
- await db.query(sql);
23
- await db.query(`DELETE FROM node_migrator_${type}s WHERE version = $1`, [version]);
24
- console.log(`✓ Migration reverted: ${file}`);
25
- }
26
- catch (e) {
27
- console.error('Migration DOWN failed: ', e.message);
28
- process.exit(1);
29
- }
30
- }
31
- //# sourceMappingURL=migrate-down.pg.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"migrate-down.pg.js","sourceRoot":"","sources":["../../../src/module/pg/migrate-down.pg.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC1B,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAG5B,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,EAAa,EAAE,UAAkB,EAAE,IAAY;IACjF,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAA;IACpE,CAAC;IAED,IAAI,CAAC,EAAE;QAAE,MAAM,KAAK,CAAC,iCAAiC,CAAC,CAAA;IACvD,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,yBAAyB,IAAI,MAAM,CAAC,CAAC;QACjD,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,qCAAqC,IAAI,oCAAoC,CAAC,CAAA;QACzG,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAA;QAEnC,MAAM,IAAI,GAAG,EAAE,CAAC,WAAW,CAAC,UAAU,CAAC;aACpC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,OAAO,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAA;QAE1E,IAAI,CAAC,IAAI;YAAE,MAAM,KAAK,CAAC,4BAA4B,OAAO,YAAY,CAAC,CAAA;QACvE,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAC7C,MAAM,gBAAgB,GAAG,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;QAEhE,MAAM,IAAI,GAAG,gBAAgB,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;QACjE,MAAM,GAAG,GAAI,IAAI,EAAE,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;QACpD,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAEpB,MAAM,EAAE,CAAC,KAAK,CAAC,6BAA6B,IAAI,sBAAsB,EAAE,CAAC,OAAO,CAAC,CAAC,CAAA;QAClF,OAAO,CAAC,GAAG,CAAC,yBAAyB,IAAI,EAAE,CAAC,CAAC;IAC/C,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAG,CAAW,CAAC,OAAO,CAAC,CAAC;QAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -1,3 +0,0 @@
1
- import { Pool } from "pg";
2
- export declare function migrateResetPg(db: Pool | null, scriptsDir: string, type: string): Promise<void>;
3
- //# sourceMappingURL=migrate-reset.pg.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"migrate-reset.pg.d.ts","sourceRoot":"","sources":["../../../src/module/pg/migrate-reset.pg.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAK1B,wBAAsB,cAAc,CAAC,EAAE,EAAE,IAAI,GAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,iBAkDnF"}
@@ -1,50 +0,0 @@
1
- import { Pool } from "pg";
2
- import fs from "fs";
3
- import { join } from "path";
4
- export async function migrateResetPg(db, scriptsDir, type) {
5
- if (!db)
6
- throw Error('Database connection is required');
7
- try {
8
- console.log(`Reverting database ${type}s...`);
9
- if (type === 'seed') {
10
- await db.query("DROP TABLE IF EXISTS node_migrator_seeds");
11
- console.log("✓ Seed cleaned");
12
- return;
13
- }
14
- const res = await db.query(`SELECT version FROM node_migrator_${type}s`);
15
- const versions = res.rows.map((row) => row.version);
16
- const scripts = [];
17
- const availableVersions = [];
18
- const files = fs.readdirSync(scriptsDir)
19
- .filter((file) => {
20
- const isVersion = versions.includes(file.split('_')[0] ?? '');
21
- return isVersion && file.endsWith('.sql');
22
- }).sort().reverse();
23
- for (const file of files) {
24
- if (files.includes(file)) {
25
- scripts.push(file);
26
- availableVersions.push(file.split('_')[0]);
27
- }
28
- }
29
- if (scripts.length !== res.rowCount) {
30
- const missingVersions = versions.filter((v) => !availableVersions.includes(v));
31
- throw Error(`Missing version: ${missingVersions}`);
32
- }
33
- for (const file of scripts) {
34
- const migrationPath = join(scriptsDir, file);
35
- const migrationScripts = fs.readFileSync(migrationPath, 'utf8');
36
- const sqls = migrationScripts.split('-- +migrator DOWN')[1] || '';
37
- const sql = sqls?.split('-- +migrator UP')[0] || '';
38
- await db.query(sql);
39
- console.log(`✓ Migration ${file} reverted`);
40
- }
41
- await db.query(`DELETE FROM node_migrator_${type}s`);
42
- await db.query("DROP TABLE IF EXISTS node_migrator_seeds");
43
- console.log("Migrations rolled back");
44
- }
45
- catch (e) {
46
- console.error('Migration RESET failed: ', e.message);
47
- process.exit(1);
48
- }
49
- }
50
- //# sourceMappingURL=migrate-reset.pg.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"migrate-reset.pg.js","sourceRoot":"","sources":["../../../src/module/pg/migrate-reset.pg.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC1B,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAG5B,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,EAAa,EAAE,UAAkB,EAAE,IAAY;IAClF,IAAI,CAAC,EAAE;QAAE,MAAM,KAAK,CAAC,iCAAiC,CAAC,CAAA;IACvD,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,MAAM,CAAC,CAAC;QAC9C,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YACpB,MAAM,EAAE,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;YAC3D,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;YAC9B,OAAO;QACT,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,qCAAqC,IAAI,GAAG,CAAC,CAAA;QACxE,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAsB,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QACtE,MAAM,OAAO,GAAa,EAAE,CAAA;QAC5B,MAAM,iBAAiB,GAAa,EAAE,CAAA;QAEtC,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,UAAU,CAAC;aACrC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;YACf,MAAM,SAAS,GAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;YAC9D,OAAO,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;QAC3C,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,CAAA;QAErB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBAClB,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAW,CAAC,CAAA;YACtD,CAAC;QACH,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,KAAK,GAAG,CAAC,QAAQ,EAAE,CAAC;YACpC,MAAM,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;YACtF,MAAM,KAAK,CAAC,oBAAoB,eAAe,EAAE,CAAC,CAAA;QACpD,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;YAC3B,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;YAC7C,MAAM,gBAAgB,GAAG,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;YAEhE,MAAM,IAAI,GAAG,gBAAgB,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;YACjE,MAAM,GAAG,GAAI,IAAI,EAAE,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;YACpD,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAEpB,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,WAAW,CAAC,CAAC;QAC9C,CAAC;QAED,MAAM,EAAE,CAAC,KAAK,CAAC,6BAA6B,IAAI,GAAG,CAAC,CAAA;QACpD,MAAM,EAAE,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC3D,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IACxC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAG,CAAW,CAAC,OAAO,CAAC,CAAC;QAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -1,3 +0,0 @@
1
- import { Pool } from "pg";
2
- export declare function migrateUpPg(db: Pool | null, scriptsDir: string, type: string): Promise<void>;
3
- //# sourceMappingURL=migrate-up.pg.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"migrate-up.pg.d.ts","sourceRoot":"","sources":["../../../src/module/pg/migrate-up.pg.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAK1B,wBAAsB,WAAW,CAAC,EAAE,EAAE,IAAI,GAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,iBA+BhF"}
@@ -1,33 +0,0 @@
1
- import { Pool } from "pg";
2
- import fs from "fs";
3
- import { join } from "path";
4
- export async function migrateUpPg(db, scriptsDir, type) {
5
- if (!db)
6
- throw Error('Database connection is required');
7
- try {
8
- console.log(`Pushing database ${type}s...`);
9
- const res = await db.query(`SELECT version FROM node_migrator_${type}s`);
10
- const versions = res.rows.map((row) => row.version);
11
- const files = fs.readdirSync(scriptsDir)
12
- .filter((file) => {
13
- const isVersion = versions.includes(file.split('_')[0] ?? '');
14
- return !isVersion && file.endsWith('.sql');
15
- }).sort();
16
- for (const file of files) {
17
- const migrationPath = join(scriptsDir, file);
18
- const migrationScripts = fs.readFileSync(migrationPath, 'utf8');
19
- const sqls = migrationScripts.split('-- +migrator UP')[1] || '';
20
- const sql = sqls?.split('-- +migrator DOWN')[0] || '';
21
- await db.query(sql);
22
- const version = file.split('_')[0];
23
- await db.query(`INSERT INTO node_migrator_${type}s (version) VALUES ($1)`, [version]);
24
- console.log(`✓ Migration pushed: ${file}`);
25
- }
26
- console.log(`All ${type}s pushed successfully!`);
27
- }
28
- catch (e) {
29
- console.error('Migration UP failed: ', e.message);
30
- process.exit(1);
31
- }
32
- }
33
- //# sourceMappingURL=migrate-up.pg.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"migrate-up.pg.js","sourceRoot":"","sources":["../../../src/module/pg/migrate-up.pg.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC1B,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAG5B,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,EAAa,EAAE,UAAkB,EAAE,IAAY;IAC/E,IAAI,CAAC,EAAE;QAAE,MAAM,KAAK,CAAC,iCAAiC,CAAC,CAAA;IACvD,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,MAAM,CAAC,CAAC;QAC5C,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,qCAAqC,IAAI,GAAG,CAAC,CAAA;QACxE,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAsB,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QAEtE,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,UAAU,CAAC;aACrC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;YACf,MAAM,SAAS,GAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;YAC9D,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;QAC5C,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;QAEX,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;YAC7C,MAAM,gBAAgB,GAAG,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;YAEhE,MAAM,IAAI,GAAG,gBAAgB,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;YAC/D,MAAM,GAAG,GAAI,IAAI,EAAE,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;YACtD,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAEpB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;YAClC,MAAM,EAAE,CAAC,KAAK,CAAC,6BAA6B,IAAI,yBAAyB,EAAE,CAAC,OAAO,CAAC,CAAC,CAAA;YACrF,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,EAAE,CAAC,CAAC;QAC7C,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,wBAAwB,CAAC,CAAC;IACnD,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAG,CAAW,CAAC,OAAO,CAAC,CAAC;QAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -1,2 +0,0 @@
1
- export declare function pg(type: string, action: string, name: string): Promise<void>;
2
- //# sourceMappingURL=pg.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pg.d.ts","sourceRoot":"","sources":["../../../src/module/pg/pg.ts"],"names":[],"mappings":"AASA,wBAAsB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,iBA0DlE"}
@@ -1,64 +0,0 @@
1
- import { Pool } from "pg";
2
- import { migrateUpPg } from "./migrate-up.pg.js";
3
- import { migrateDownPg } from "./migrate-down.pg.js";
4
- import { migrateResetPg } from "./migrate-reset.pg.js";
5
- import { generateMigrationCommon } from "../common/generate-migration.common.js";
6
- import { envConfig } from "../../config/config.js";
7
- export async function pg(type, action, name) {
8
- if (!['migration', 'seed'].includes(type)) {
9
- console.log('Invalid type. Please use "migration" or "seed".');
10
- process.exit(1);
11
- }
12
- if (action === 'new' && type === 'seed' && name === '') {
13
- console.log('Invalid name. Please use "new seed" following by name.');
14
- process.exit(1);
15
- }
16
- try {
17
- let pg = null;
18
- if (action !== 'new') {
19
- const pgConfig = {
20
- host: envConfig.pg.host,
21
- port: envConfig.pg.port,
22
- password: envConfig.pg.password,
23
- user: envConfig.pg.user,
24
- database: envConfig.pg.database,
25
- };
26
- if (process.env.PG_CA?.length) {
27
- pgConfig.ssl = { ca: process.env.PG_CA };
28
- }
29
- pg = new Pool(pgConfig);
30
- await pg.query(`CREATE TABLE IF NOT EXISTS node_migrator_${type}s (
31
- id BIGSERIAL PRIMARY KEY,
32
- version VARCHAR(255) NOT NULL,
33
- created_at TIMESTAMP NOT NULL DEFAULT NOW()
34
- )`);
35
- }
36
- // @ts-ignore
37
- const scriptsDir = join(process.cwd(), 'db', 'postgres', type === 'migration' ? 'migration' : 'seed');
38
- switch (action) {
39
- case 'up':
40
- await migrateUpPg(pg, scriptsDir, type);
41
- break;
42
- case 'down':
43
- await migrateDownPg(pg, scriptsDir, type);
44
- break;
45
- case 'reset':
46
- await migrateResetPg(pg, scriptsDir, type);
47
- break;
48
- case 'new':
49
- generateMigrationCommon(scriptsDir, name, type);
50
- break;
51
- default:
52
- console.log('Invalid action. Please use "up", "down", or "reset".');
53
- process.exit(1);
54
- }
55
- }
56
- catch (e) {
57
- console.error('Migration failed: ', e.message);
58
- process.exit(1);
59
- }
60
- finally {
61
- process.exit(0);
62
- }
63
- }
64
- //# sourceMappingURL=pg.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pg.js","sourceRoot":"","sources":["../../../src/module/pg/pg.ts"],"names":[],"mappings":"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"}