inray 0.0.4 → 0.0.6

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 (98) hide show
  1. package/LICENSE.md +29 -27
  2. package/README.md +57 -29
  3. package/dist/cli/mod.d.ts +2 -0
  4. package/dist/cli/mod.d.ts.map +1 -0
  5. package/dist/cli/mod.js +2 -0
  6. package/dist/cli/mod.js.map +1 -0
  7. package/dist/cli/src/index.d.ts +25 -0
  8. package/dist/cli/src/index.d.ts.map +1 -0
  9. package/dist/cli/src/index.js +25 -0
  10. package/dist/cli/src/index.js.map +1 -0
  11. package/dist/cli/src/lib/argument.d.ts +82 -0
  12. package/dist/cli/src/lib/argument.d.ts.map +1 -0
  13. package/dist/cli/src/lib/argument.js +143 -0
  14. package/dist/cli/src/lib/argument.js.map +1 -0
  15. package/dist/cli/src/lib/command.d.ts +1051 -0
  16. package/dist/cli/src/lib/command.d.ts.map +1 -0
  17. package/dist/cli/src/lib/command.js +2208 -0
  18. package/dist/cli/src/lib/command.js.map +1 -0
  19. package/dist/cli/src/lib/error.d.ts +35 -0
  20. package/dist/cli/src/lib/error.d.ts.map +1 -0
  21. package/dist/cli/src/lib/error.js +49 -0
  22. package/dist/cli/src/lib/error.js.map +1 -0
  23. package/dist/cli/src/lib/help.d.ts +250 -0
  24. package/dist/cli/src/lib/help.d.ts.map +1 -0
  25. package/dist/cli/src/lib/help.js +583 -0
  26. package/dist/cli/src/lib/help.js.map +1 -0
  27. package/dist/cli/src/lib/option.d.ts +189 -0
  28. package/dist/cli/src/lib/option.d.ts.map +1 -0
  29. package/dist/cli/src/lib/option.js +364 -0
  30. package/dist/cli/src/lib/option.js.map +1 -0
  31. package/dist/cli/src/lib/suggestSimilar.d.ts +18 -0
  32. package/dist/cli/src/lib/suggestSimilar.d.ts.map +1 -0
  33. package/dist/cli/src/lib/suggestSimilar.js +99 -0
  34. package/dist/cli/src/lib/suggestSimilar.js.map +1 -0
  35. package/dist/db/postgres/src/bytes.js +1 -0
  36. package/dist/db/postgres/src/connection.js +1 -0
  37. package/dist/db/postgres/src/errors.js +1 -0
  38. package/dist/db/postgres/src/index.js +1 -0
  39. package/dist/db/postgres/src/large.js +1 -0
  40. package/dist/db/postgres/src/query.js +1 -0
  41. package/dist/db/postgres/src/queue.js +1 -0
  42. package/dist/db/postgres/src/result.js +1 -0
  43. package/dist/db/postgres/src/subscribe.js +1 -0
  44. package/dist/db/postgres/src/types.js +1 -0
  45. package/dist/db-migrator/src/bin.d.ts +3 -0
  46. package/dist/db-migrator/src/bin.d.ts.map +1 -0
  47. package/dist/db-migrator/src/bin.js +72 -0
  48. package/dist/db-migrator/src/bin.js.map +1 -0
  49. package/dist/db-migrator/src/index.d.ts +5 -0
  50. package/dist/db-migrator/src/index.d.ts.map +1 -0
  51. package/dist/db-migrator/src/index.js +4 -0
  52. package/dist/db-migrator/src/index.js.map +1 -0
  53. package/dist/db-migrator/src/lib/MigrationError.d.ts +5 -0
  54. package/dist/db-migrator/src/lib/MigrationError.d.ts.map +1 -0
  55. package/dist/db-migrator/src/lib/MigrationError.js +12 -0
  56. package/dist/db-migrator/src/lib/MigrationError.js.map +1 -0
  57. package/dist/db-migrator/src/lib/clients/index.d.ts +9 -0
  58. package/dist/db-migrator/src/lib/clients/index.d.ts.map +1 -0
  59. package/dist/db-migrator/src/lib/clients/index.js +10 -0
  60. package/dist/db-migrator/src/lib/clients/index.js.map +1 -0
  61. package/dist/db-migrator/src/lib/clients/postgres.d.ts +3 -0
  62. package/dist/db-migrator/src/lib/clients/postgres.d.ts.map +1 -0
  63. package/dist/db-migrator/src/lib/clients/postgres.js +44 -0
  64. package/dist/db-migrator/src/lib/clients/postgres.js.map +1 -0
  65. package/dist/db-migrator/src/lib/migrator.log.d.ts +4 -0
  66. package/dist/db-migrator/src/lib/migrator.log.d.ts.map +1 -0
  67. package/dist/db-migrator/src/lib/migrator.log.js +46 -0
  68. package/dist/db-migrator/src/lib/migrator.log.js.map +1 -0
  69. package/dist/db-migrator/src/lib/migrator.sql.d.ts +5 -0
  70. package/dist/db-migrator/src/lib/migrator.sql.d.ts.map +1 -0
  71. package/dist/db-migrator/src/lib/migrator.sql.js +13 -0
  72. package/dist/db-migrator/src/lib/migrator.sql.js.map +1 -0
  73. package/dist/db-migrator/src/lib/migrator.types.d.ts +55 -0
  74. package/dist/db-migrator/src/lib/migrator.types.d.ts.map +1 -0
  75. package/dist/db-migrator/src/lib/migrator.types.js +2 -0
  76. package/dist/db-migrator/src/lib/migrator.types.js.map +1 -0
  77. package/dist/db-migrator/src/lib/util.d.ts +9 -0
  78. package/dist/db-migrator/src/lib/util.d.ts.map +1 -0
  79. package/dist/db-migrator/src/lib/util.js +93 -0
  80. package/dist/db-migrator/src/lib/util.js.map +1 -0
  81. package/dist/db-migrator/src/migrator.d.ts +6 -0
  82. package/dist/db-migrator/src/migrator.d.ts.map +1 -0
  83. package/dist/db-migrator/src/migrator.js +121 -0
  84. package/dist/db-migrator/src/migrator.js.map +1 -0
  85. package/dist/utils/mkdirs.d.ts +15 -0
  86. package/dist/utils/mkdirs.d.ts.map +1 -0
  87. package/dist/utils/mkdirs.js +42 -0
  88. package/dist/utils/mkdirs.js.map +1 -0
  89. package/dist/utils/mod.d.ts +2 -0
  90. package/dist/utils/mod.d.ts.map +1 -1
  91. package/dist/utils/mod.js +2 -0
  92. package/dist/utils/mod.js.map +1 -1
  93. package/dist/utils/totalist.d.ts +13 -0
  94. package/dist/utils/totalist.d.ts.map +1 -0
  95. package/dist/utils/totalist.js +39 -0
  96. package/dist/utils/totalist.js.map +1 -0
  97. package/dist/utils/validation/vEnvBoolean.d.ts +1 -1
  98. package/package.json +15 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"suggestSimilar.js","sourceRoot":"","sources":["../../../../src/cli/src/lib/suggestSimilar.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,7 @@
6
6
  * - Evgeniy Bushin
7
7
  */
8
8
  /***/
9
+ // @ts-nocheck
9
10
 
10
11
  const size = 256;
11
12
  let buffer = Buffer.allocUnsafe(size);
@@ -6,6 +6,7 @@
6
6
  * - Evgeniy Bushin
7
7
  */
8
8
  /***/
9
+ // @ts-nocheck
9
10
 
10
11
  import net from 'net';
11
12
  import tls from 'tls';
@@ -6,6 +6,7 @@
6
6
  * - Evgeniy Bushin
7
7
  */
8
8
  /***/
9
+ // @ts-nocheck
9
10
 
10
11
  export class PostgresError extends Error {
11
12
  constructor(x) {
@@ -6,6 +6,7 @@
6
6
  * - Evgeniy Bushin
7
7
  */
8
8
  /***/
9
+ // @ts-nocheck
9
10
 
10
11
  import os from 'os';
11
12
  import fs from 'fs';
@@ -6,6 +6,7 @@
6
6
  * - Evgeniy Bushin
7
7
  */
8
8
  /***/
9
+ // @ts-nocheck
9
10
 
10
11
  import Stream from 'stream';
11
12
 
@@ -6,6 +6,7 @@
6
6
  * - Evgeniy Bushin
7
7
  */
8
8
  /***/
9
+ // @ts-nocheck
9
10
 
10
11
  const originCache = new Map(),
11
12
  originStackCache = new Map(),
@@ -6,6 +6,7 @@
6
6
  * - Evgeniy Bushin
7
7
  */
8
8
  /***/
9
+ // @ts-nocheck
9
10
 
10
11
  export default Queue;
11
12
 
@@ -6,6 +6,7 @@
6
6
  * - Evgeniy Bushin
7
7
  */
8
8
  /***/
9
+ // @ts-nocheck
9
10
 
10
11
  export default class Result extends Array {
11
12
  constructor() {
@@ -6,6 +6,7 @@
6
6
  * - Evgeniy Bushin
7
7
  */
8
8
  /***/
9
+ // @ts-nocheck
9
10
 
10
11
  const noop = () => {
11
12
  /* noop */
@@ -6,6 +6,7 @@
6
6
  * - Evgeniy Bushin
7
7
  */
8
8
  /***/
9
+ // @ts-nocheck
9
10
 
10
11
  import { Query } from './query.js';
11
12
  import { Errors } from './errors.js';
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=bin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.d.ts","sourceRoot":"","sources":["../../../src/db-migrator/src/bin.ts"],"names":[],"mappings":""}
@@ -0,0 +1,72 @@
1
+ #!/usr/bin/env node
2
+ import { program } from "../../cli/mod.js";
3
+ import { toConfig } from "./lib/util.js";
4
+ import * as log from "./lib/migrator.log.js";
5
+ import { create, down, status, up } from "./migrator.js";
6
+ async function withConfig(opts) {
7
+ const path = typeof opts.config === 'string' ? opts.config : undefined;
8
+ const loaded = await toConfig(path, opts.cwd || '.');
9
+ if (loaded) {
10
+ log.info('Loading configuration');
11
+ return {
12
+ ...opts,
13
+ config: await (typeof loaded === 'function' ? loaded() : loaded)
14
+ };
15
+ }
16
+ const { config: _unused, ...rest } = opts;
17
+ return rest;
18
+ }
19
+ function action(run) {
20
+ return async (...args) => {
21
+ const cmd = args.at(-1);
22
+ try {
23
+ const result = await run(await withConfig(cmd.optsWithGlobals()));
24
+ log.done(cmd.name(), result);
25
+ }
26
+ catch (err) {
27
+ log.bail(err);
28
+ }
29
+ };
30
+ }
31
+ program
32
+ .name('inray-migrator')
33
+ .version('0.0.0')
34
+ .option('-C, --cwd <dir>', 'The current directory to resolve from', '.')
35
+ .option('-d, --dir <dir>', 'The directory of migration files to run', 'migrations')
36
+ .option('-c, --config <path>', 'Path to config file', 'ley.config.js');
37
+ program
38
+ .command('up')
39
+ .description('Run "up" migration(s). Applies all outstanding items.')
40
+ .option('-s, --single', 'Only run a single migration')
41
+ .action(action((opts) => up(opts)));
42
+ program
43
+ .command('down')
44
+ .description('Run "down" migration(s). Defaults to one at a time.')
45
+ .option('-a, --all', 'Run all "down" migrations')
46
+ .action(action((opts) => down(opts)));
47
+ program
48
+ .command('status')
49
+ .description('Check for migration status. Counts unapplied migrations.')
50
+ .action(action((opts) => status(opts)));
51
+ program
52
+ .command('new')
53
+ .argument('<filename>', 'Migration name')
54
+ .description('Create a new migration file.')
55
+ .option('-t, --timestamp', 'Prefix the filename with a timestamp')
56
+ .option('-l, --length <n>', 'The length of prefix, if not timestamp', '5')
57
+ .action(async (filename, _opts, cmd) => {
58
+ try {
59
+ const opts = await withConfig(cmd.optsWithGlobals());
60
+ const result = await create({
61
+ ...opts,
62
+ filename,
63
+ length: Number(opts.length ?? 5)
64
+ });
65
+ log.done('new', result);
66
+ }
67
+ catch (err) {
68
+ log.bail(err);
69
+ }
70
+ });
71
+ await program.parseAsync(process.argv);
72
+ //# sourceMappingURL=bin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.js","sourceRoot":"","sources":["../../../src/db-migrator/src/bin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export type * from './lib/migrator.types.ts';
2
+ export { create, create as new, down, status, up } from './migrator.ts';
3
+ export { clients, postgresDriver } from './lib/clients/index.ts';
4
+ export { MigrationError } from './lib/MigrationError.ts';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/db-migrator/src/index.ts"],"names":[],"mappings":"AAAA,mBAAmB,yBAAyB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,eAAe,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { create, create as new, down, status, up } from "./migrator.js";
2
+ export { clients, postgresDriver } from "./lib/clients/index.js";
3
+ export { MigrationError } from "./lib/MigrationError.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/db-migrator/src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,eAAe,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare class MigrationError extends Error {
2
+ readonly migration: Record<'name' | 'abs', string>;
3
+ constructor(err: Error, file: Record<'name' | 'abs', string>);
4
+ }
5
+ //# sourceMappingURL=MigrationError.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MigrationError.d.ts","sourceRoot":"","sources":["../../../../src/db-migrator/src/lib/MigrationError.ts"],"names":[],"mappings":"AAAA,qBAAa,cAAe,SAAQ,KAAK;IACvC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,GAAG,KAAK,EAAE,MAAM,CAAC,CAAC;gBAEvC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,GAAG,KAAK,EAAE,MAAM,CAAC;CAQ7D"}
@@ -0,0 +1,12 @@
1
+ export class MigrationError extends Error {
2
+ migration;
3
+ constructor(err, file) {
4
+ super(err.message);
5
+ const details = err.stack?.replace(/^(.*?)(?:[\n\r])/, '') ?? '';
6
+ Error.captureStackTrace(this, MigrationError);
7
+ this.stack = `${this.stack ?? ''}\n${details}`;
8
+ Object.assign(this, err);
9
+ this.migration = file;
10
+ }
11
+ }
12
+ //# sourceMappingURL=MigrationError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MigrationError.js","sourceRoot":"","sources":["../../../../src/db-migrator/src/lib/MigrationError.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,cAAe,SAAQ,KAAK;IAC9B,SAAS,CAAiC;IAEnD,YAAY,GAAU,EAAE,IAAoC;QAC1D,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACnB,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;QACjE,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;QAC9C,IAAI,CAAC,KAAK,GAAG,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,KAAK,OAAO,EAAE,CAAC;QAC/C,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACzB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;IACxB,CAAC;CACF"}
@@ -0,0 +1,9 @@
1
+ import type { IMigrationDriver, MigratorAvailableDriver } from '../migrator.types.ts';
2
+ import { postgresDriver } from './postgres.ts';
3
+ export { postgresDriver };
4
+ /**
5
+ * Built-in drivers keyed by {@link MigratorAvailableDriver}.
6
+ * Add a new client file and one entry here when another engine is supported.
7
+ */
8
+ export declare const clients: Record<MigratorAvailableDriver, IMigrationDriver>;
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/db-migrator/src/lib/clients/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AACtF,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,OAAO,EAAE,cAAc,EAAE,CAAC;AAE1B;;;GAGG;AACH,eAAO,MAAM,OAAO,EAAE,MAAM,CAAC,uBAAuB,EAAE,gBAAgB,CAErE,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { postgresDriver } from "./postgres.js";
2
+ export { postgresDriver };
3
+ /**
4
+ * Built-in drivers keyed by {@link MigratorAvailableDriver}.
5
+ * Add a new client file and one entry here when another engine is supported.
6
+ */
7
+ export const clients = {
8
+ postgres: postgresDriver
9
+ };
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/db-migrator/src/lib/clients/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,OAAO,EAAE,cAAc,EAAE,CAAC;AAE1B;;;GAGG;AACH,MAAM,CAAC,MAAM,OAAO,GAAsD;IACxE,QAAQ,EAAE,cAAc;CACzB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { IMigrationDriver } from '../migrator.types.ts';
2
+ export declare const postgresDriver: IMigrationDriver;
3
+ //# sourceMappingURL=postgres.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../../../../src/db-migrator/src/lib/clients/postgres.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,gBAAgB,EAMjB,MAAM,sBAAsB,CAAC;AAG9B,eAAO,MAAM,cAAc,EAAE,gBAyC5B,CAAC"}
@@ -0,0 +1,44 @@
1
+ import { MigrationError } from "../MigrationError.js";
2
+ import { MigrationSQL } from "../migrator.sql.js";
3
+ import { load } from "../util.js";
4
+ export const postgresDriver = {
5
+ async connect(config) {
6
+ const { driver: _driver, ...options } = config ?? {};
7
+ // @ts-ignore не проверять
8
+ const m = (await import('../../../../db/postgres/src/index.js'));
9
+ // @ts-ignore ожидает перевода postgres.js на TypeScript
10
+ return m.default({
11
+ onnotice: () => { },
12
+ ...options,
13
+ max: 1
14
+ });
15
+ },
16
+ async setup(dbClient) {
17
+ await dbClient.unsafe(MigrationSQL.table);
18
+ return dbClient.unsafe(MigrationSQL.exists);
19
+ },
20
+ async loop(dbClient, files, method) {
21
+ // @ts-ignore
22
+ await dbClient.begin(async (sql) => {
23
+ for (const obj of files) {
24
+ const file = await load(obj.abs);
25
+ const migrate = file[method];
26
+ if (typeof migrate === 'function') {
27
+ await Promise.resolve(migrate(sql)).catch((err) => {
28
+ throw new MigrationError(err instanceof Error ? err : new Error(String(err)), obj);
29
+ });
30
+ }
31
+ if (method === 'up') {
32
+ await sql `insert into migrations (name,created_at) values (${obj.name},now());`;
33
+ }
34
+ else if (method === 'down') {
35
+ await sql `delete from migrations where name = ${obj.name};`;
36
+ }
37
+ }
38
+ });
39
+ },
40
+ async end(dbClient) {
41
+ await dbClient.end();
42
+ }
43
+ };
44
+ //# sourceMappingURL=postgres.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgres.js","sourceRoot":"","sources":["../../../../../src/db-migrator/src/lib/clients/postgres.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AASlD,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAElC,MAAM,CAAC,MAAM,cAAc,GAAqB;IAC9C,KAAK,CAAC,OAAO,CAAC,MAAwB;QACpC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,GAAG,MAAM,IAAI,EAAE,CAAC;QACrD,0BAA0B;QAC1B,MAAM,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,sCAAsC,CAAC,CAAQ,CAAC;QACxE,wDAAwD;QACxD,OAAO,CAAC,CAAC,OAAO,CAAC;YACf,QAAQ,EAAE,GAAG,EAAE,GAAE,CAAC;YAClB,GAAG,OAAO;YACV,GAAG,EAAE,CAAC;SACP,CAAqB,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,QAA0B;QACpC,MAAM,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAC1C,OAAO,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,QAA0B,EAAE,KAAsB,EAAE,MAAuB;QACpF,aAAa;QACb,MAAM,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;YACjC,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;gBACxB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACjC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC7B,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE,CAAC;oBAClC,MAAM,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;wBACzD,MAAM,IAAI,cAAc,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;oBACrF,CAAC,CAAC,CAAC;gBACL,CAAC;gBACD,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;oBACpB,MAAM,GAAG,CAAA,oDAAoD,GAAG,CAAC,IAAI,UAAU,CAAC;gBAClF,CAAC;qBAAM,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;oBAC7B,MAAM,GAAG,CAAA,uCAAuC,GAAG,CAAC,IAAI,GAAG,CAAC;gBAC9D,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,QAA0B;QAClC,MAAM,QAAQ,CAAC,GAAG,EAAE,CAAC;IACvB,CAAC;CACF,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare const info: (msg: string) => void;
2
+ export declare const done: (type: string, arr: string | string[]) => void;
3
+ export declare const bail: (mix: unknown) => never;
4
+ //# sourceMappingURL=migrator.log.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrator.log.d.ts","sourceRoot":"","sources":["../../../../src/db-migrator/src/lib/migrator.log.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,IAAI,GAAI,KAAK,MAAM,SAE/B,CAAC;AAEF,eAAO,MAAM,IAAI,GAAI,MAAM,MAAM,EAAE,KAAK,MAAM,GAAG,MAAM,EAAE,SAoBxD,CAAC;AAEF,eAAO,MAAM,IAAI,GAAI,KAAK,OAAO,UAkBhC,CAAC"}
@@ -0,0 +1,46 @@
1
+ import { cyan, dim, gray, green, red, underline, yellow } from "../../../fmt/colors.js";
2
+ import { MigrationError } from "./MigrationError.js";
3
+ const PREFIX = '[migrator] ';
4
+ export const info = (msg) => {
5
+ console.log(cyan(PREFIX) + msg);
6
+ };
7
+ export const done = (type, arr) => {
8
+ const files = Array.isArray(arr) ? arr : [arr];
9
+ let msg = '';
10
+ if (type === 'new') {
11
+ msg += 'Created ' + green('1') + ' file:';
12
+ msg += green(dim('\n ⌁ ')) + underline(gray(files[0] ?? ''));
13
+ }
14
+ else if (files.length > 0) {
15
+ const arrow = type === 'down' ? '↓' : '↑';
16
+ const cc = type === 'status' ? yellow : green;
17
+ msg += type === 'status' ? 'Awaiting ' : 'Migrated ';
18
+ msg += cc(String(files.length)) + (files.length > 1 ? ' files:' : ' file:');
19
+ for (const file of files) {
20
+ msg += cc(dim(`\n ${arrow} `)) + underline(gray(file));
21
+ }
22
+ }
23
+ else {
24
+ msg += 'All caught up! 🎉';
25
+ }
26
+ process.stdout.write('\n' + green(PREFIX) + msg + '\n\n');
27
+ };
28
+ export const bail = (mix) => {
29
+ let msg = mix instanceof MigrationError ? `Error with "${underline(mix.migration.name)}" migration:` : 'An error occurred:';
30
+ if (mix instanceof Error) {
31
+ let pfx = `\n `;
32
+ const [title, ...rest] = mix.stack?.split(/[\n\r]+/g) ?? [];
33
+ msg += '\n\n ' + red(dim(underline(title ?? mix.message)));
34
+ rest.forEach((str) => (msg += dim('\n ' + str)));
35
+ if (!rest.length)
36
+ pfx += ' ';
37
+ for (const [key, value] of Object.entries(mix)) {
38
+ if (key === 'migration' || value === undefined)
39
+ continue;
40
+ msg += pfx + `${key}: ` + dim(String(value));
41
+ }
42
+ }
43
+ process.stdout.write('\n' + red(PREFIX) + msg + '\n\n');
44
+ process.exit(1);
45
+ };
46
+ //# sourceMappingURL=migrator.log.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrator.log.js","sourceRoot":"","sources":["../../../../src/db-migrator/src/lib/migrator.log.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare const MigrationSQL: {
2
+ table: string;
3
+ exists: string;
4
+ };
5
+ //# sourceMappingURL=migrator.sql.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrator.sql.d.ts","sourceRoot":"","sources":["../../../../src/db-migrator/src/lib/migrator.sql.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY;;;CAWxB,CAAC"}
@@ -0,0 +1,13 @@
1
+ export const MigrationSQL = {
2
+ table: `
3
+ create table if not exists migrations (
4
+ id serial primary key,
5
+ name varchar(255) NOT NULL,
6
+ created_at timestamp NOT NULL
7
+ );
8
+ `,
9
+ exists: `
10
+ select name from migrations order by id asc;
11
+ `
12
+ };
13
+ //# sourceMappingURL=migrator.sql.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrator.sql.js","sourceRoot":"","sources":["../../../../src/db-migrator/src/lib/migrator.sql.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,KAAK,EAAE;;;;;;CAMR;IACC,MAAM,EAAE;;CAET;CACA,CAAC"}
@@ -0,0 +1,55 @@
1
+ export type MigrationMethod = 'up' | 'down';
2
+ export type MigrationFile = {
3
+ /** The absolute file path */
4
+ abs: string;
5
+ /** The relative file path from `opts.dir` */
6
+ name: string;
7
+ };
8
+ export type MigrationExisting = Pick<MigrationFile, 'name'>;
9
+ export type MigratorAvailableDriver = 'postgres';
10
+ export type MigrationConfig = Record<string, unknown> & {
11
+ driver?: MigratorAvailableDriver;
12
+ };
13
+ export type MigrationOptionsBase = {
14
+ cwd?: string;
15
+ /** Built-in driver name, or a custom driver object. Defaults to `"postgres"`. */
16
+ driver?: MigratorAvailableDriver | IMigrationDriver;
17
+ config?: MigrationConfig;
18
+ dir?: string;
19
+ };
20
+ export type MigrationOptionsUp = MigrationOptionsBase & {
21
+ single?: boolean;
22
+ };
23
+ export type MigrationOptionsDown = MigrationOptionsBase & {
24
+ all?: boolean;
25
+ };
26
+ export type MigrationOptionsNew = MigrationOptionsBase & {
27
+ filename: string;
28
+ timestamp?: boolean;
29
+ length?: number;
30
+ };
31
+ /** Client passed to `up` / `down`. Widen this union when more drivers are added. */
32
+ export type MigratorDbClient = any;
33
+ export interface IMigrationDriver {
34
+ /**
35
+ * Create a new Database Client connection using supplied options/config.
36
+ * @important Must return the `MigratorDbClient` for further usage.
37
+ */
38
+ connect(config?: MigrationConfig): Promise<MigratorDbClient> | MigratorDbClient;
39
+ /**
40
+ * Create `migrations` table and query for existing/applied migrations.
41
+ * @important Must return the `name` of any existing migrations.
42
+ */
43
+ setup(dbClient: MigratorDbClient): Promise<MigrationExisting[]>;
44
+ /**
45
+ * Loop `files` and apply the target `method` action.
46
+ * @note Whenever possible, *all* files should partake in the same transaction.
47
+ */
48
+ loop(dbClient: MigratorDbClient, files: MigrationFile[], method: MigrationMethod): Promise<void>;
49
+ /**
50
+ * Gracefully terminate your client.
51
+ * Runs after *all* migrations have been applied, or after an error is thrown.
52
+ */
53
+ end(dbClient: MigratorDbClient): Promise<void> | void;
54
+ }
55
+ //# sourceMappingURL=migrator.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrator.types.d.ts","sourceRoot":"","sources":["../../../../src/db-migrator/src/lib/migrator.types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GAAG,IAAI,GAAG,MAAM,CAAC;AAE5C,MAAM,MAAM,aAAa,GAAG;IAC1B,6BAA6B;IAC7B,GAAG,EAAE,MAAM,CAAC;IAEZ,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;AAE5D,MAAM,MAAM,uBAAuB,GAAG,UAAU,CAAC;AAEjD,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IACtD,MAAM,CAAC,EAAE,uBAAuB,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,iFAAiF;IACjF,MAAM,CAAC,EAAE,uBAAuB,GAAG,gBAAgB,CAAC;IACpD,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,oBAAoB,GAAG;IACtD,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,oBAAoB,GAAG;IACxD,GAAG,CAAC,EAAE,OAAO,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,oBAAoB,GAAG;IACvD,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,oFAAoF;AACpF,MAAM,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAEnC,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC,GAAG,gBAAgB,CAAC;IAEhF;;;OAGG;IACH,KAAK,CAAC,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAEhE;;;OAGG;IACH,IAAI,CAAC,QAAQ,EAAE,gBAAgB,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjG;;;OAGG;IACH,GAAG,CAAC,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CACvD"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=migrator.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrator.types.js","sourceRoot":"","sources":["../../../../src/db-migrator/src/lib/migrator.types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,9 @@
1
+ import type { IMigrationDriver, MigrationConfig, MigrationExisting, MigrationFile } from './migrator.types.ts';
2
+ export type MigrationConfigSource = MigrationConfig | (() => MigrationConfig | Promise<MigrationConfig>);
3
+ export declare function glob(dir: string): Promise<MigrationFile[]>;
4
+ export declare function diff<T extends MigrationExisting>(prevs: (MigrationExisting | MigrationFile)[], nexts: T[]): T[];
5
+ export declare function pluck<T extends MigrationExisting>(prevs: (MigrationExisting | MigrationFile)[], nexts: T[]): T[];
6
+ export declare function load(id: string): Promise<Record<string, unknown>>;
7
+ export declare function isDriver(ctx: unknown): asserts ctx is IMigrationDriver;
8
+ export declare function toConfig(str: string | undefined, cwd?: string): Promise<MigrationConfigSource | undefined>;
9
+ //# sourceMappingURL=util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../../src/db-migrator/src/lib/util.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAE/G,MAAM,MAAM,qBAAqB,GAAG,eAAe,GAAG,CAAC,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC;AAEzG,wBAAsB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAYhE;AAED,wBAAgB,IAAI,CAAC,CAAC,SAAS,iBAAiB,EAAE,KAAK,EAAE,CAAC,iBAAiB,GAAG,aAAa,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAW/G;AAED,wBAAgB,KAAK,CAAC,CAAC,SAAS,iBAAiB,EAAE,KAAK,EAAE,CAAC,iBAAiB,GAAG,aAAa,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAchH;AAED,wBAAsB,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAKvE;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,IAAI,gBAAgB,CAUtE;AAED,wBAAsB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC,CAahH"}
@@ -0,0 +1,93 @@
1
+ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
2
+ if (typeof path === "string" && /^\.\.?\//.test(path)) {
3
+ return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
4
+ return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
5
+ });
6
+ }
7
+ return path;
8
+ };
9
+ import { existsSync } from 'node:fs';
10
+ import { resolve } from 'node:path';
11
+ import { pathToFileURL } from 'node:url';
12
+ import { totalist } from "../../../utils/totalist.js";
13
+ export async function glob(dir) {
14
+ const output = [];
15
+ const rgx = /\.[cm]?[tj]s$/;
16
+ try {
17
+ await totalist(dir, (name, abs) => {
18
+ if (rgx.test(name))
19
+ output.push({ name, abs });
20
+ });
21
+ }
22
+ catch (err) {
23
+ if (isErrno(err) && err.code === 'ENOENT')
24
+ return [];
25
+ throw err;
26
+ }
27
+ return output.sort((a, b) => a.name.localeCompare(b.name, undefined, { numeric: true }));
28
+ }
29
+ export function diff(prevs, nexts) {
30
+ const out = [];
31
+ for (let i = 0; i < nexts.length; i++) {
32
+ const tmp = nexts[i];
33
+ const ran = prevs[i];
34
+ if (!ran)
35
+ out.push(tmp);
36
+ else if (tmp.name === ran.name)
37
+ continue;
38
+ else
39
+ throw new Error(`Cannot run "${tmp.name}" after "${ran.name}" has been applied`);
40
+ }
41
+ return out;
42
+ }
43
+ export function pluck(prevs, nexts) {
44
+ const out = [];
45
+ outer: for (let i = 0; i < prevs.length; i++) {
46
+ const ran = prevs[i];
47
+ for (let j = i; j < nexts.length; j++) {
48
+ const tmp = nexts[j];
49
+ if (tmp.name === ran.name) {
50
+ out.push(tmp);
51
+ continue outer;
52
+ }
53
+ }
54
+ throw new Error(`Cannot find "${ran.name}" migration file`);
55
+ }
56
+ return out;
57
+ }
58
+ export async function load(id) {
59
+ const m = await import(__rewriteRelativeImportExtension(pathToFileURL(id).href));
60
+ const mod = m.default ?? m;
61
+ if (mod && typeof mod === 'object')
62
+ return mod;
63
+ return {};
64
+ }
65
+ export function isDriver(ctx) {
66
+ if (ctx === null || typeof ctx !== 'object') {
67
+ throw new Error(`Driver must have "connect" function`);
68
+ }
69
+ const rec = ctx;
70
+ for (const key of ['connect', 'setup', 'loop', 'end']) {
71
+ if (typeof rec[key] !== 'function') {
72
+ throw new Error(`Driver must have "${key}" function`);
73
+ }
74
+ }
75
+ }
76
+ export async function toConfig(str, cwd) {
77
+ if (!str)
78
+ return undefined;
79
+ const resolved = resolve(cwd || '.', str);
80
+ const candidates = /\.js$/.test(str)
81
+ ? ['.js', '.mjs', '.cjs', '.ts'].map((ext) => resolved.replace(/\.js$/, ext))
82
+ : [resolved];
83
+ for (const file of candidates) {
84
+ if (!existsSync(file))
85
+ continue;
86
+ const m = await import(__rewriteRelativeImportExtension(pathToFileURL(file).href));
87
+ return (m.default ?? m);
88
+ }
89
+ }
90
+ function isErrno(err) {
91
+ return Boolean(err && typeof err === 'object' && 'code' in err);
92
+ }
93
+ //# sourceMappingURL=util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../../../../src/db-migrator/src/lib/util.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { MigrationOptionsBase, MigrationOptionsDown, MigrationOptionsNew, MigrationOptionsUp } from './lib/migrator.types.ts';
2
+ export declare function up(opts?: MigrationOptionsUp): Promise<string[]>;
3
+ export declare function down(opts?: MigrationOptionsDown): Promise<string[]>;
4
+ export declare function status(opts?: MigrationOptionsBase): Promise<string[]>;
5
+ export declare function create(opts: MigrationOptionsNew): Promise<string>;
6
+ //# sourceMappingURL=migrator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrator.d.ts","sourceRoot":"","sources":["../../../src/db-migrator/src/migrator.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAGV,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,EAGnB,MAAM,yBAAyB,CAAC;AAmCjC,wBAAsB,EAAE,CAAC,IAAI,GAAE,kBAAuB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAiBzE;AAED,wBAAsB,IAAI,CAAC,IAAI,GAAE,oBAAyB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAwB7E;AAED,wBAAsB,MAAM,CAAC,IAAI,GAAE,oBAAyB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAW/E;AAED,wBAAsB,MAAM,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,CAsCvE"}