purplekit 1.0.5 → 1.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 (76) hide show
  1. package/README.md +46 -6
  2. package/build/src/app.js +48 -12
  3. package/build/src/app.js.map +1 -1
  4. package/build/src/config/constants.d.ts +2 -1
  5. package/build/src/config/constants.d.ts.map +1 -1
  6. package/build/src/config/constants.js +3 -1
  7. package/build/src/config/constants.js.map +1 -1
  8. package/build/src/config/index.d.ts +7 -1
  9. package/build/src/config/index.d.ts.map +1 -1
  10. package/build/src/config/index.js +30 -1
  11. package/build/src/config/index.js.map +1 -1
  12. package/build/src/features/createdb.d.ts +1 -1
  13. package/build/src/features/createdb.d.ts.map +1 -1
  14. package/build/src/features/createdb.js +6 -7
  15. package/build/src/features/createdb.js.map +1 -1
  16. package/build/src/features/dropdb.d.ts +1 -1
  17. package/build/src/features/dropdb.d.ts.map +1 -1
  18. package/build/src/features/dropdb.js +6 -7
  19. package/build/src/features/dropdb.js.map +1 -1
  20. package/build/src/features/gen.d.ts +5 -5
  21. package/build/src/features/gen.d.ts.map +1 -1
  22. package/build/src/features/gen.js +17 -15
  23. package/build/src/features/gen.js.map +1 -1
  24. package/build/src/features/init.d.ts +1 -1
  25. package/build/src/features/init.d.ts.map +1 -1
  26. package/build/src/features/init.js +18 -9
  27. package/build/src/features/init.js.map +1 -1
  28. package/build/src/features/migrate.d.ts +3 -2
  29. package/build/src/features/migrate.d.ts.map +1 -1
  30. package/build/src/features/migrate.js +28 -39
  31. package/build/src/features/migrate.js.map +1 -1
  32. package/build/src/features/migration.d.ts +3 -1
  33. package/build/src/features/migration.d.ts.map +1 -1
  34. package/build/src/features/migration.js +13 -8
  35. package/build/src/features/migration.js.map +1 -1
  36. package/build/src/features/seed.d.ts +1 -1
  37. package/build/src/features/seed.d.ts.map +1 -1
  38. package/build/src/features/seed.js +5 -8
  39. package/build/src/features/seed.js.map +1 -1
  40. package/build/src/features/status.d.ts +1 -1
  41. package/build/src/features/status.d.ts.map +1 -1
  42. package/build/src/features/status.js +11 -19
  43. package/build/src/features/status.js.map +1 -1
  44. package/build/src/index.d.ts +1 -1
  45. package/build/src/index.d.ts.map +1 -1
  46. package/build/src/index.js.map +1 -1
  47. package/build/src/libs/compare-mig.d.ts +2 -2
  48. package/build/src/libs/compare-mig.d.ts.map +1 -1
  49. package/build/src/libs/compare-mig.js +1 -6
  50. package/build/src/libs/compare-mig.js.map +1 -1
  51. package/build/src/libs/create-ds.d.ts +19 -1
  52. package/build/src/libs/create-ds.d.ts.map +1 -1
  53. package/build/src/libs/create-ds.js +35 -8
  54. package/build/src/libs/create-ds.js.map +1 -1
  55. package/build/src/libs/format-error.d.ts +12 -0
  56. package/build/src/libs/format-error.d.ts.map +1 -0
  57. package/build/src/libs/format-error.js +56 -0
  58. package/build/src/libs/format-error.js.map +1 -0
  59. package/build/src/libs/get-commands.d.ts +9 -9
  60. package/build/src/libs/get-commands.d.ts.map +1 -1
  61. package/build/src/libs/get-commands.js +10 -35
  62. package/build/src/libs/get-commands.js.map +1 -1
  63. package/build/src/libs/print.d.ts +1 -1
  64. package/build/src/libs/print.js +2 -2
  65. package/build/src/libs/print.js.map +1 -1
  66. package/build/src/libs/sanitize.d.ts +8 -4
  67. package/build/src/libs/sanitize.d.ts.map +1 -1
  68. package/build/src/libs/sanitize.js +19 -9
  69. package/build/src/libs/sanitize.js.map +1 -1
  70. package/build/src/libs/version.d.ts +10 -0
  71. package/build/src/libs/version.d.ts.map +1 -0
  72. package/build/src/libs/version.js +64 -0
  73. package/build/src/libs/version.js.map +1 -0
  74. package/build/src/types.d.ts +12 -2
  75. package/build/src/types.d.ts.map +1 -1
  76. package/package.json +7 -5
@@ -5,11 +5,11 @@ export type MigrationDuplicate = {
5
5
  migHash: string;
6
6
  hashes: string[];
7
7
  };
8
- type SqlDialect = 'postgresql' | 'mysql' | 'mariadb' | 'sqlite' | 'transactsql';
8
+ type SqlDialect = 'postgresql' | 'mysql';
9
9
  /**
10
10
  * Maps a TypeORM driver type to a `node-sql-parser` dialect name.
11
11
  *
12
- * @param type - TypeORM data source type (e.g. `postgres`, `mysql`).
12
+ * @param type - TypeORM data source type (`postgres`, `mysql` or `mariadb`).
13
13
  * @returns SQL parser dialect; defaults to `postgresql` when unknown.
14
14
  */
15
15
  declare function getParserDialect(type: string): SqlDialect;
@@ -1 +1 @@
1
- {"version":3,"file":"compare-mig.d.ts","sourceRoot":"","sources":["../../../src/libs/compare-mig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAKnD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC;AAGF,KAAK,UAAU,GACZ,YAAY,GACX,OAAO,GACP,SAAS,GACT,QAAQ,GACR,aAAa,CAAC;AA4BlB;;;;;GAKG;AACH,iBAAS,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAelD;AAiHD;;;;;;;;GAQG;AACH,iBAAe,UAAU,CACvB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,aAAa,EAAE,EACzB,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAiBpC;AAED,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,CAAC"}
1
+ {"version":3,"file":"compare-mig.d.ts","sourceRoot":"","sources":["../../../src/libs/compare-mig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAKnD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC;AAGF,KAAK,UAAU,GAAG,YAAY,GAAG,OAAO,CAAC;AA4BzC;;;;;GAKG;AACH,iBAAS,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAUlD;AAiHD;;;;;;;;GAQG;AACH,iBAAe,UAAU,CACvB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,aAAa,EAAE,EACzB,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAiBpC;AAED,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,CAAC"}
@@ -79,7 +79,7 @@ function getMethodBody(content, method) {
79
79
  /**
80
80
  * Maps a TypeORM driver type to a `node-sql-parser` dialect name.
81
81
  *
82
- * @param type - TypeORM data source type (e.g. `postgres`, `mysql`).
82
+ * @param type - TypeORM data source type (`postgres`, `mysql` or `mariadb`).
83
83
  * @returns SQL parser dialect; defaults to `postgresql` when unknown.
84
84
  */
85
85
  function getParserDialect(type) {
@@ -89,11 +89,6 @@ function getParserDialect(type) {
89
89
  case 'mysql':
90
90
  case 'mariadb':
91
91
  return 'mysql';
92
- case 'sqlite':
93
- case 'better-sqlite3':
94
- return 'sqlite';
95
- case 'mssql':
96
- return 'transactsql';
97
92
  default:
98
93
  return 'postgresql';
99
94
  }
@@ -1 +1 @@
1
- {"version":3,"file":"compare-mig.js","sourceRoot":"","sources":["../../../src/libs/compare-mig.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"compare-mig.js","sourceRoot":"","sources":["../../../src/libs/compare-mig.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,22 @@
1
1
  import { DataSourceOptions, DataSource } from 'typeorm';
2
+ /**
3
+ * Builds the TLS options for SSL connections.
4
+ * - `light`: encrypts the connection.
5
+ * - `heavy`: also supplies `DATABASE_CA_CERT` as the trusted CA.
6
+ *
7
+ * In both modes `rejectUnauthorized` comes from `SSL_REJECT_UNAUTHORIZED` and
8
+ * defaults to `false` (the previous behaviour). Set it to `true` to have the
9
+ * driver reject servers whose certificate does not verify.
10
+ *
11
+ * @returns TLS options passed to the database driver.
12
+ */
13
+ declare const getSslOptions: () => {
14
+ rejectUnauthorized: boolean;
15
+ ca: NonSharedBuffer;
16
+ } | {
17
+ rejectUnauthorized: boolean;
18
+ ca?: never;
19
+ };
2
20
  /**
3
21
  * Builds a TypeORM `DataSource` from app config, with optional overrides.
4
22
  *
@@ -6,5 +24,5 @@ import { DataSourceOptions, DataSource } from 'typeorm';
6
24
  * @returns A configured, uninitialized TypeORM data source.
7
25
  */
8
26
  declare const createDataSource: (opt?: Partial<DataSourceOptions>) => DataSource;
9
- export { createDataSource };
27
+ export { createDataSource, getSslOptions };
10
28
  //# sourceMappingURL=create-ds.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-ds.d.ts","sourceRoot":"","sources":["../../../src/libs/create-ds.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAIxD;;;;;GAKG;AACH,QAAA,MAAM,gBAAgB,GAAI,MAAK,OAAO,CAAC,iBAAiB,CAAM,eAyB7D,CAAC;AAEF,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
1
+ {"version":3,"file":"create-ds.d.ts","sourceRoot":"","sources":["../../../src/libs/create-ds.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAoBxD;;;;;;;;;;GAUG;AACH,QAAA,MAAM,aAAa;;;;;;CAMlB,CAAC;AAEF;;;;;GAKG;AACH,QAAA,MAAM,gBAAgB,GAAI,MAAK,OAAO,CAAC,iBAAiB,CAAM,eAgB7D,CAAC;AAEF,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,CAAC"}
@@ -33,10 +33,43 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.createDataSource = void 0;
36
+ exports.getSslOptions = exports.createDataSource = void 0;
37
37
  const typeorm_1 = require("typeorm");
38
38
  const config_1 = require("../config");
39
39
  const fs = __importStar(require("fs"));
40
+ /**
41
+ * Reads the CA certificate used for `SSL_TYPE: 'heavy'`, with a clear message
42
+ * when the configured path is missing or points at a directory.
43
+ *
44
+ * @param file - Path from `DATABASE_CA_CERT`.
45
+ * @returns The certificate contents.
46
+ */
47
+ const readCaCert = (file) => {
48
+ if (!fs.existsSync(file) || !fs.statSync(file).isFile()) {
49
+ throw new Error(`SSL_TYPE is 'heavy' but DATABASE_CA_CERT ('${file}') is not a certificate file. Set DATABASE_CA_CERT to the path of your CA certificate.`);
50
+ }
51
+ return fs.readFileSync(file);
52
+ };
53
+ /**
54
+ * Builds the TLS options for SSL connections.
55
+ * - `light`: encrypts the connection.
56
+ * - `heavy`: also supplies `DATABASE_CA_CERT` as the trusted CA.
57
+ *
58
+ * In both modes `rejectUnauthorized` comes from `SSL_REJECT_UNAUTHORIZED` and
59
+ * defaults to `false` (the previous behaviour). Set it to `true` to have the
60
+ * driver reject servers whose certificate does not verify.
61
+ *
62
+ * @returns TLS options passed to the database driver.
63
+ */
64
+ const getSslOptions = () => {
65
+ var _a;
66
+ const rejectUnauthorized = (_a = config_1.cfg.SSL_REJECT_UNAUTHORIZED) !== null && _a !== void 0 ? _a : false;
67
+ if (config_1.cfg.SSL_TYPE === 'heavy') {
68
+ return { rejectUnauthorized, ca: readCaCert(config_1.cfg.DATABASE_CA_CERT) };
69
+ }
70
+ return { rejectUnauthorized };
71
+ };
72
+ exports.getSslOptions = getSslOptions;
40
73
  /**
41
74
  * Builds a TypeORM `DataSource` from app config, with optional overrides.
42
75
  *
@@ -44,13 +77,7 @@ const fs = __importStar(require("fs"));
44
77
  * @returns A configured, uninitialized TypeORM data source.
45
78
  */
46
79
  const createDataSource = (opt = {}) => {
47
- return new typeorm_1.DataSource(Object.assign({ username: config_1.cfg.DATABASE_USERNAME, password: config_1.cfg.DATABASE_PASSWORD, host: config_1.cfg.DATABASE_HOST, port: config_1.cfg.DATABASE_PORT, type: config_1.cfg.TYPE, database: config_1.cfg.INITIAL_DATABASE, entities: config_1.cfg.ENTITIES, migrations: config_1.cfg.MIGRATIONS, ssl: config_1.cfg.SSL_MODE, extra: config_1.cfg.SSL_MODE
48
- ? {
49
- ssl: Object.assign({ rejectUnauthorized: false }, (config_1.cfg.SSL_TYPE === 'heavy'
50
- ? { ca: fs.readFileSync(config_1.cfg.DATABASE_CA_CERT) }
51
- : {})),
52
- }
53
- : undefined, synchronize: config_1.cfg.SYNCHRONIZE, logging: config_1.cfg.LOGGING }, opt));
80
+ return new typeorm_1.DataSource(Object.assign({ username: config_1.cfg.DATABASE_USERNAME, password: config_1.cfg.DATABASE_PASSWORD, host: config_1.cfg.DATABASE_HOST, port: config_1.cfg.DATABASE_PORT, type: config_1.cfg.TYPE, database: config_1.cfg.INITIAL_DATABASE, entities: config_1.cfg.ENTITIES, migrations: config_1.cfg.MIGRATIONS, ssl: config_1.cfg.SSL_MODE, extra: config_1.cfg.SSL_MODE ? { ssl: getSslOptions() } : undefined, synchronize: config_1.cfg.SYNCHRONIZE, logging: config_1.cfg.LOGGING }, opt));
54
81
  };
55
82
  exports.createDataSource = createDataSource;
56
83
  //# sourceMappingURL=create-ds.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-ds.js","sourceRoot":"","sources":["../../../src/libs/create-ds.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,qCAAwD;AACxD,qCAA+B;AAC/B,uCAAyB;AAEzB;;;;;GAKG;AACH,MAAM,gBAAgB,GAAG,CAAC,MAAkC,EAAE,EAAE,EAAE;IAChE,OAAO,IAAI,oBAAU,iBACnB,QAAQ,EAAE,YAAG,CAAC,iBAAiB,EAC/B,QAAQ,EAAE,YAAG,CAAC,iBAAiB,EAC/B,IAAI,EAAE,YAAG,CAAC,aAAa,EACvB,IAAI,EAAE,YAAG,CAAC,aAAa,EACvB,IAAI,EAAE,YAAG,CAAC,IAAW,EACrB,QAAQ,EAAE,YAAG,CAAC,gBAAgB,EAC9B,QAAQ,EAAE,YAAG,CAAC,QAAQ,EACtB,UAAU,EAAE,YAAG,CAAC,UAAU,EAC1B,GAAG,EAAE,YAAG,CAAC,QAAQ,EACjB,KAAK,EAAE,YAAG,CAAC,QAAQ;YACjB,CAAC,CAAC;gBACE,GAAG,kBACD,kBAAkB,EAAE,KAAK,IACtB,CAAC,YAAG,CAAC,QAAQ,KAAK,OAAO;oBAC1B,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,YAAY,CAAC,YAAG,CAAC,gBAAgB,CAAC,EAAE;oBAC/C,CAAC,CAAC,EAAE,CAAC,CACR;aACF;YACH,CAAC,CAAC,SAAS,EACb,WAAW,EAAE,YAAG,CAAC,WAAW,EAC5B,OAAO,EAAE,YAAG,CAAC,OAAO,IAChB,GAAW,EACf,CAAC;AACL,CAAC,CAAC;AAEO,4CAAgB"}
1
+ {"version":3,"file":"create-ds.js","sourceRoot":"","sources":["../../../src/libs/create-ds.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,qCAAwD;AACxD,qCAA+B;AAC/B,uCAAyB;AAEzB;;;;;;GAMG;AACH,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,EAAE;IAClC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;QACxD,MAAM,IAAI,KAAK,CACb,8CAA8C,IAAI,wFAAwF,CAC3I,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC,CAAC;AAEF;;;;;;;;;;GAUG;AACH,MAAM,aAAa,GAAG,GAAG,EAAE;;IACzB,MAAM,kBAAkB,GAAG,MAAA,YAAG,CAAC,uBAAuB,mCAAI,KAAK,CAAC;IAChE,IAAI,YAAG,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QAC7B,OAAO,EAAE,kBAAkB,EAAE,EAAE,EAAE,UAAU,CAAC,YAAG,CAAC,gBAAgB,CAAC,EAAE,CAAC;IACtE,CAAC;IACD,OAAO,EAAE,kBAAkB,EAAE,CAAC;AAChC,CAAC,CAAC;AA0ByB,sCAAa;AAxBxC;;;;;GAKG;AACH,MAAM,gBAAgB,GAAG,CAAC,MAAkC,EAAE,EAAE,EAAE;IAChE,OAAO,IAAI,oBAAU,iBACnB,QAAQ,EAAE,YAAG,CAAC,iBAAiB,EAC/B,QAAQ,EAAE,YAAG,CAAC,iBAAiB,EAC/B,IAAI,EAAE,YAAG,CAAC,aAAa,EACvB,IAAI,EAAE,YAAG,CAAC,aAAa,EACvB,IAAI,EAAE,YAAG,CAAC,IAAW,EACrB,QAAQ,EAAE,YAAG,CAAC,gBAAgB,EAC9B,QAAQ,EAAE,YAAG,CAAC,QAAQ,EACtB,UAAU,EAAE,YAAG,CAAC,UAAU,EAC1B,GAAG,EAAE,YAAG,CAAC,QAAQ,EACjB,KAAK,EAAE,YAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,EAC1D,WAAW,EAAE,YAAG,CAAC,WAAW,EAC5B,OAAO,EAAE,YAAG,CAAC,OAAO,IAChB,GAAW,EACf,CAAC;AACL,CAAC,CAAC;AAEO,4CAAgB"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Turns any thrown value into a non-empty, human-readable message.
3
+ * Handles errors with empty messages (e.g. Node's `AggregateError` raised when
4
+ * every address for `localhost` refuses the connection), error codes, causes,
5
+ * and non-`Error` values that cannot be JSON-serialized.
6
+ *
7
+ * @param e - The thrown value.
8
+ * @returns A message that is never empty.
9
+ */
10
+ declare function formatError(e: unknown): string;
11
+ export { formatError };
12
+ //# sourceMappingURL=format-error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format-error.d.ts","sourceRoot":"","sources":["../../../src/libs/format-error.ts"],"names":[],"mappings":"AAMA;;;;;;;;GAQG;AACH,iBAAS,WAAW,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAEvC;AAqCD,OAAO,EAAE,WAAW,EAAE,CAAC"}
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.formatError = formatError;
4
+ const HINTS = {
5
+ ECONNREFUSED: 'is the database server running and reachable?',
6
+ ENOTFOUND: 'check DATABASE_HOST in your purplekit config.',
7
+ ETIMEDOUT: 'the database did not respond in time.',
8
+ };
9
+ /**
10
+ * Turns any thrown value into a non-empty, human-readable message.
11
+ * Handles errors with empty messages (e.g. Node's `AggregateError` raised when
12
+ * every address for `localhost` refuses the connection), error codes, causes,
13
+ * and non-`Error` values that cannot be JSON-serialized.
14
+ *
15
+ * @param e - The thrown value.
16
+ * @returns A message that is never empty.
17
+ */
18
+ function formatError(e) {
19
+ return describe(e, 0) || 'An unknown error occurred.';
20
+ }
21
+ function describe(e, depth) {
22
+ if (depth > 3 || e === null || e === undefined)
23
+ return '';
24
+ if (typeof e === 'string')
25
+ return e.trim();
26
+ if (e instanceof Error) {
27
+ const code = e.code;
28
+ let msg = e.message.trim();
29
+ // AggregateError (and similar) keep the useful details in `errors`
30
+ const nested = e.errors;
31
+ if (Array.isArray(nested) && nested.length > 0) {
32
+ const inner = Array.from(new Set(nested.map((n) => describe(n, depth + 1)).filter(Boolean))).join('; ');
33
+ if (inner)
34
+ msg = msg ? `${msg} (${inner})` : inner;
35
+ }
36
+ if (!msg)
37
+ msg = describe(e.cause, depth + 1);
38
+ if (!msg && code)
39
+ msg = code;
40
+ if (!msg)
41
+ msg = e.name && e.name !== 'Error' ? e.name : '';
42
+ const hint = depth === 0 && typeof code === 'string' ? HINTS[code] : '';
43
+ return hint && msg ? `${msg} — ${hint}` : msg;
44
+ }
45
+ try {
46
+ const json = JSON.stringify(e);
47
+ if (json && json !== '{}')
48
+ return json;
49
+ }
50
+ catch (_a) {
51
+ // circular or otherwise unserializable; fall through
52
+ }
53
+ const str = String(e);
54
+ return str === '[object Object]' ? '' : str;
55
+ }
56
+ //# sourceMappingURL=format-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format-error.js","sourceRoot":"","sources":["../../../src/libs/format-error.ts"],"names":[],"mappings":";;AAsDS,kCAAW;AAtDpB,MAAM,KAAK,GAA2B;IACpC,YAAY,EAAE,+CAA+C;IAC7D,SAAS,EAAE,+CAA+C;IAC1D,SAAS,EAAE,uCAAuC;CACnD,CAAC;AAEF;;;;;;;;GAQG;AACH,SAAS,WAAW,CAAC,CAAU;IAC7B,OAAO,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,4BAA4B,CAAC;AACxD,CAAC;AAED,SAAS,QAAQ,CAAC,CAAU,EAAE,KAAa;IACzC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IAC1D,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;IAE3C,IAAI,CAAC,YAAY,KAAK,EAAE,CAAC;QACvB,MAAM,IAAI,GAAI,CAA2B,CAAC,IAAI,CAAC;QAC/C,IAAI,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAE3B,mEAAmE;QACnE,MAAM,MAAM,GAAI,CAA0B,CAAC,MAAM,CAAC;QAClD,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/C,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CACtB,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CACnE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACb,IAAI,KAAK;gBAAE,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;QACrD,CAAC;QAED,IAAI,CAAC,GAAG;YAAE,GAAG,GAAG,QAAQ,CAAE,CAAyB,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;QACtE,IAAI,CAAC,GAAG,IAAI,IAAI;YAAE,GAAG,GAAG,IAAI,CAAC;QAC7B,IAAI,CAAC,GAAG;YAAE,GAAG,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAE3D,MAAM,IAAI,GAAG,KAAK,KAAK,CAAC,IAAI,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACxE,OAAO,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;IAChD,CAAC;IAED,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;IACzC,CAAC;IAAC,WAAM,CAAC;QACP,qDAAqD;IACvD,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACtB,OAAO,GAAG,KAAK,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;AAC9C,CAAC"}
@@ -1,29 +1,29 @@
1
- import { DataSourceOptions } from 'typeorm';
2
- type Params = DataSourceOptions['type'];
1
+ import { SupportedType } from '../types';
3
2
  /**
4
3
  * Returns the SQL used to list user/base tables for the given DB type.
5
4
  *
6
5
  * @param type - Database driver type; defaults to `cfg.TYPE`.
7
6
  * @returns Parameter-free SQL query string.
7
+ * @throws When the type is unsupported.
8
8
  */
9
- declare const getDbTablesCommand: (type?: Params) => "SELECT table_name FROM information_schema.tables WHERE table_schema = 'public' AND table_type = 'BASE TABLE'" | "SELECT table_name FROM information_schema.tables WHERE table_schema = DATABASE() AND table_type = 'BASE TABLE'" | "SELECT name FROM sqlite_master WHERE type = 'table'" | "SELECT table_name FROM user_tables" | "SELECT TABLE_NAME AS table_name FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE'";
9
+ declare const getDbTablesCommand: (type?: SupportedType) => "SELECT table_name FROM information_schema.tables WHERE table_schema = 'public' AND table_type = 'BASE TABLE'" | "SELECT table_name FROM information_schema.tables WHERE table_schema = DATABASE() AND table_type = 'BASE TABLE'";
10
10
  /**
11
11
  * Returns the parameterized SQL used to check whether a database exists.
12
12
  *
13
13
  * @param type - Database driver type; defaults to `cfg.TYPE`.
14
14
  * @returns Parameterized SQL query string.
15
- * @throws When the type is unsupported (e.g. SQLite uses filesystem checks).
15
+ * @throws When the type is unsupported.
16
16
  */
17
- declare const getDbCheckCommand: (type?: Params) => "SELECT 1 FROM pg_database WHERE DATNAME = $1" | "SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = ?" | "SELECT name FROM sys.databases WHERE name = @0" | "SELECT username FROM all_users WHERE username = :1";
17
+ declare const getDbCheckCommand: (type?: SupportedType) => "SELECT 1 FROM pg_database WHERE DATNAME = $1" | "SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = ?";
18
18
  /**
19
19
  * Returns the SQL used to drop a database for the given DB type.
20
20
  *
21
21
  * @param name - Database name to drop.
22
22
  * @param type - Database driver type; defaults to `cfg.TYPE`.
23
- * @returns Parameterized or literal SQL query string.
23
+ * @returns Literal SQL query string.
24
24
  * @throws When the type is unsupported.
25
25
  */
26
- declare const getDropDbCommand: (name: string, type?: Params) => string;
26
+ declare const getDropDbCommand: (name: string, type?: SupportedType) => string;
27
27
  /**
28
28
  * Returns the SQL used to create a database for the given DB type.
29
29
  *
@@ -32,7 +32,7 @@ declare const getDropDbCommand: (name: string, type?: Params) => string;
32
32
  * @returns Literal SQL query string for creating the database.
33
33
  * @throws When the type is unsupported.
34
34
  */
35
- declare const getCreateDbCommand: (name: string, type?: Params) => string;
35
+ declare const getCreateDbCommand: (name: string, type?: SupportedType) => string;
36
36
  /**
37
37
  * Returns the parameterized SQL used to check if a migration has been applied.
38
38
  *
@@ -40,6 +40,6 @@ declare const getCreateDbCommand: (name: string, type?: Params) => string;
40
40
  * @returns Parameterized SQL query string for TypeORM's `migrations` table.
41
41
  * @throws When the type is unsupported.
42
42
  */
43
- declare const getCheckMigrationCommand: (type?: Params) => "SELECT 1 FROM migrations WHERE name = $1 LIMIT 1" | "SELECT 1 FROM migrations WHERE name = ? LIMIT 1" | "SELECT TOP 1 1 FROM migrations WHERE name = @0";
43
+ declare const getCheckMigrationCommand: (type?: SupportedType) => "SELECT 1 FROM migrations WHERE name = $1 LIMIT 1" | "SELECT 1 FROM migrations WHERE name = ? LIMIT 1";
44
44
  export { getDbTablesCommand, getDbCheckCommand, getDropDbCommand, getCreateDbCommand, getCheckMigrationCommand, };
45
45
  //# sourceMappingURL=get-commands.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"get-commands.d.ts","sourceRoot":"","sources":["../../../src/libs/get-commands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAG5C,KAAK,MAAM,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;AAExC;;;;;GAKG;AACH,QAAA,MAAM,kBAAkB,GAAI,OAAM,MAAiB,waAsBlD,CAAC;AAEF;;;;;;GAMG;AACH,QAAA,MAAM,iBAAiB,GAAI,OAAM,MAAiB,2OAwBjD,CAAC;AAEF;;;;;;;GAOG;AACH,QAAA,MAAM,gBAAgB,GAAI,MAAM,MAAM,EAAE,OAAM,MAAiB,WAwB9D,CAAC;AAEF;;;;;;;GAOG;AACH,QAAA,MAAM,kBAAkB,GAAI,MAAM,MAAM,EAAE,OAAM,MAAiB,WAqBhE,CAAC;AAEF;;;;;;GAMG;AACH,QAAA,MAAM,wBAAwB,GAAI,OAAM,MAAiB,8JAcxD,CAAC;AAEF,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,wBAAwB,GACzB,CAAC"}
1
+ {"version":3,"file":"get-commands.d.ts","sourceRoot":"","sources":["../../../src/libs/get-commands.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAOxC;;;;;;GAMG;AACH,QAAA,MAAM,kBAAkB,GAAI,OAAM,aAAwB,sOAYzD,CAAC;AAEF;;;;;;GAMG;AACH,QAAA,MAAM,iBAAiB,GAAI,OAAM,aAAwB,iIAYxD,CAAC;AAEF;;;;;;;GAOG;AACH,QAAA,MAAM,gBAAgB,GAAI,MAAM,MAAM,EAAE,OAAM,aAAwB,WAYrE,CAAC;AAEF;;;;;;;GAOG;AACH,QAAA,MAAM,kBAAkB,GAAI,MAAM,MAAM,EAAE,OAAM,aAAwB,WAYvE,CAAC;AAEF;;;;;;GAMG;AACH,QAAA,MAAM,wBAAwB,GAAI,OAAM,aAAwB,2GAY/D,CAAC;AAEF,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,wBAAwB,GACzB,CAAC"}
@@ -2,11 +2,13 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getCheckMigrationCommand = exports.getCreateDbCommand = exports.getDropDbCommand = exports.getDbCheckCommand = exports.getDbTablesCommand = void 0;
4
4
  const config_1 = require("../config");
5
+ const unsupported = (type) => new Error(`Unsupported database type: '${type}'. Supported types: postgres, mysql, mariadb.`);
5
6
  /**
6
7
  * Returns the SQL used to list user/base tables for the given DB type.
7
8
  *
8
9
  * @param type - Database driver type; defaults to `cfg.TYPE`.
9
10
  * @returns Parameter-free SQL query string.
11
+ * @throws When the type is unsupported.
10
12
  */
11
13
  const getDbTablesCommand = (type = config_1.cfg.TYPE) => {
12
14
  switch (type) {
@@ -15,15 +17,8 @@ const getDbTablesCommand = (type = config_1.cfg.TYPE) => {
15
17
  case 'mysql':
16
18
  case 'mariadb':
17
19
  return `SELECT table_name FROM information_schema.tables WHERE table_schema = DATABASE() AND table_type = 'BASE TABLE'`;
18
- case 'sqlite':
19
- case 'better-sqlite3':
20
- return `SELECT name FROM sqlite_master WHERE type = 'table'`;
21
- case 'oracle':
22
- return `SELECT table_name FROM user_tables`;
23
- case 'mssql':
24
- return `SELECT TABLE_NAME AS table_name FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE'`;
25
20
  default:
26
- throw new Error('Unsupported database type');
21
+ throw unsupported(type);
27
22
  }
28
23
  };
29
24
  exports.getDbTablesCommand = getDbTablesCommand;
@@ -32,7 +27,7 @@ exports.getDbTablesCommand = getDbTablesCommand;
32
27
  *
33
28
  * @param type - Database driver type; defaults to `cfg.TYPE`.
34
29
  * @returns Parameterized SQL query string.
35
- * @throws When the type is unsupported (e.g. SQLite uses filesystem checks).
30
+ * @throws When the type is unsupported.
36
31
  */
37
32
  const getDbCheckCommand = (type = config_1.cfg.TYPE) => {
38
33
  switch (type) {
@@ -41,15 +36,8 @@ const getDbCheckCommand = (type = config_1.cfg.TYPE) => {
41
36
  case 'mysql':
42
37
  case 'mariadb':
43
38
  return 'SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = ?';
44
- case 'mssql':
45
- return `SELECT name FROM sys.databases WHERE name = @0`;
46
- case 'oracle':
47
- return `SELECT username FROM all_users WHERE username = :1`;
48
- case 'sqlite':
49
- case 'better-sqlite3':
50
- throw new Error('SQLite database existence should be checked via filesystem');
51
39
  default:
52
- throw new Error('Unsupported database type');
40
+ throw unsupported(type);
53
41
  }
54
42
  };
55
43
  exports.getDbCheckCommand = getDbCheckCommand;
@@ -58,7 +46,7 @@ exports.getDbCheckCommand = getDbCheckCommand;
58
46
  *
59
47
  * @param name - Database name to drop.
60
48
  * @param type - Database driver type; defaults to `cfg.TYPE`.
61
- * @returns Parameterized or literal SQL query string.
49
+ * @returns Literal SQL query string.
62
50
  * @throws When the type is unsupported.
63
51
  */
64
52
  const getDropDbCommand = (name, type = config_1.cfg.TYPE) => {
@@ -68,15 +56,8 @@ const getDropDbCommand = (name, type = config_1.cfg.TYPE) => {
68
56
  return `DROP DATABASE IF EXISTS \`${name}\``;
69
57
  case 'postgres':
70
58
  return `DROP DATABASE IF EXISTS "${name}"`;
71
- case 'mssql':
72
- return `DROP DATABASE [${name}]`;
73
- case 'oracle':
74
- return `DROP USER "${name}" CASCADE`;
75
- case 'better-sqlite3':
76
- case 'sqlite':
77
- throw new Error('SQLite databases should be dropped by deleting the file');
78
59
  default:
79
- throw new Error('Unsupported database type');
60
+ throw unsupported(type);
80
61
  }
81
62
  };
82
63
  exports.getDropDbCommand = getDropDbCommand;
@@ -95,13 +76,8 @@ const getCreateDbCommand = (name, type = config_1.cfg.TYPE) => {
95
76
  case 'mysql':
96
77
  case 'mariadb':
97
78
  return `CREATE DATABASE \`${name}\``;
98
- case 'mssql':
99
- return `CREATE DATABASE [${name}]`;
100
- case 'sqlite':
101
- case 'better-sqlite3':
102
- throw new Error('SQLite databases are created by opening/creating the file');
103
79
  default:
104
- throw new Error('Unsupported database type');
80
+ throw unsupported(type);
105
81
  }
106
82
  };
107
83
  exports.getCreateDbCommand = getCreateDbCommand;
@@ -117,11 +93,10 @@ const getCheckMigrationCommand = (type = config_1.cfg.TYPE) => {
117
93
  case 'postgres':
118
94
  return `SELECT 1 FROM migrations WHERE name = $1 LIMIT 1`;
119
95
  case 'mysql':
96
+ case 'mariadb':
120
97
  return `SELECT 1 FROM migrations WHERE name = ? LIMIT 1`;
121
- case 'mssql':
122
- return `SELECT TOP 1 1 FROM migrations WHERE name = @0`;
123
98
  default:
124
- throw new Error('Unsupported database type');
99
+ throw unsupported(type);
125
100
  }
126
101
  };
127
102
  exports.getCheckMigrationCommand = getCheckMigrationCommand;
@@ -1 +1 @@
1
- {"version":3,"file":"get-commands.js","sourceRoot":"","sources":["../../../src/libs/get-commands.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"get-commands.js","sourceRoot":"","sources":["../../../src/libs/get-commands.ts"],"names":[],"mappings":";;;AAAA,qCAA+B;AAG/B,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,EAAE,CACnC,IAAI,KAAK,CACP,+BAA+B,IAAI,+CAA+C,CACnF,CAAC;AAEJ;;;;;;GAMG;AACH,MAAM,kBAAkB,GAAG,CAAC,OAAsB,YAAG,CAAC,IAAI,EAAE,EAAE;IAC5D,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,UAAU;YACb,OAAO,8GAA8G,CAAC;QAExH,KAAK,OAAO,CAAC;QACb,KAAK,SAAS;YACZ,OAAO,gHAAgH,CAAC;QAE1H;YACE,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC,CAAC;AAyFA,gDAAkB;AAvFpB;;;;;;GAMG;AACH,MAAM,iBAAiB,GAAG,CAAC,OAAsB,YAAG,CAAC,IAAI,EAAE,EAAE;IAC3D,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,UAAU;YACb,OAAO,8CAA8C,CAAC;QAExD,KAAK,OAAO,CAAC;QACb,KAAK,SAAS;YACZ,OAAO,2EAA2E,CAAC;QAErF;YACE,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC,CAAC;AAqEA,8CAAiB;AAnEnB;;;;;;;GAOG;AACH,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAAE,OAAsB,YAAG,CAAC,IAAI,EAAE,EAAE;IACxE,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,SAAS,CAAC;QACf,KAAK,OAAO;YACV,OAAO,6BAA6B,IAAI,IAAI,CAAC;QAE/C,KAAK,UAAU;YACb,OAAO,4BAA4B,IAAI,GAAG,CAAC;QAE7C;YACE,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC,CAAC;AAgDA,4CAAgB;AA9ClB;;;;;;;GAOG;AACH,MAAM,kBAAkB,GAAG,CAAC,IAAY,EAAE,OAAsB,YAAG,CAAC,IAAI,EAAE,EAAE;IAC1E,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,UAAU;YACb,OAAO,oBAAoB,IAAI,GAAG,CAAC;QAErC,KAAK,OAAO,CAAC;QACb,KAAK,SAAS;YACZ,OAAO,qBAAqB,IAAI,IAAI,CAAC;QAEvC;YACE,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC,CAAC;AA2BA,gDAAkB;AAzBpB;;;;;;GAMG;AACH,MAAM,wBAAwB,GAAG,CAAC,OAAsB,YAAG,CAAC,IAAI,EAAE,EAAE;IAClE,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,UAAU;YACb,OAAO,kDAAkD,CAAC;QAE5D,KAAK,OAAO,CAAC;QACb,KAAK,SAAS;YACZ,OAAO,iDAAiD,CAAC;QAE3D;YACE,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC,CAAC;AAOA,4DAAwB"}
@@ -1,5 +1,5 @@
1
1
  /** Logs a cyan info message to stdout. */
2
2
  export declare const print: (...args: string[]) => void;
3
- /** Logs a red error message to stdout. */
3
+ /** Logs a red error message to stderr. */
4
4
  export declare const printf: (...args: string[]) => void;
5
5
  //# sourceMappingURL=print.d.ts.map
@@ -10,9 +10,9 @@ const print = (...args) => {
10
10
  return console.log(picocolors_1.default.cyanBright(args.join(' ')));
11
11
  };
12
12
  exports.print = print;
13
- /** Logs a red error message to stdout. */
13
+ /** Logs a red error message to stderr. */
14
14
  const printf = (...args) => {
15
- return console.log(picocolors_1.default.redBright(args.join(' ')));
15
+ return console.error(picocolors_1.default.redBright(args.join(' ')));
16
16
  };
17
17
  exports.printf = printf;
18
18
  //# sourceMappingURL=print.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"print.js","sourceRoot":"","sources":["../../../src/libs/print.ts"],"names":[],"mappings":";;;;;;AAAA,4DAA4B;AAE5B,0CAA0C;AACnC,MAAM,KAAK,GAAG,CAAC,GAAG,IAAc,EAAE,EAAE;IACzC,OAAO,OAAO,CAAC,GAAG,CAAC,oBAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACpD,CAAC,CAAC;AAFW,QAAA,KAAK,SAEhB;AAEF,0CAA0C;AACnC,MAAM,MAAM,GAAG,CAAC,GAAG,IAAc,EAAE,EAAE;IAC1C,OAAO,OAAO,CAAC,GAAG,CAAC,oBAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACnD,CAAC,CAAC;AAFW,QAAA,MAAM,UAEjB"}
1
+ {"version":3,"file":"print.js","sourceRoot":"","sources":["../../../src/libs/print.ts"],"names":[],"mappings":";;;;;;AAAA,4DAA4B;AAE5B,0CAA0C;AACnC,MAAM,KAAK,GAAG,CAAC,GAAG,IAAc,EAAE,EAAE;IACzC,OAAO,OAAO,CAAC,GAAG,CAAC,oBAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACpD,CAAC,CAAC;AAFW,QAAA,KAAK,SAEhB;AAEF,0CAA0C;AACnC,MAAM,MAAM,GAAG,CAAC,GAAG,IAAc,EAAE,EAAE;IAC1C,OAAO,OAAO,CAAC,KAAK,CAAC,oBAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACrD,CAAC,CAAC;AAFW,QAAA,MAAM,UAEjB"}
@@ -1,10 +1,14 @@
1
1
  /**
2
- * Validates that `value` contains only letters, numbers, and underscores.
2
+ * Validates that `value` is a string that starts with a letter and contains
3
+ * only letters, numbers, and underscores. This keeps database names safe to
4
+ * interpolate into SQL and migration names valid as TypeScript class names.
3
5
  *
4
- * @param value - String to validate.
6
+ * @param value - Value to validate.
7
+ * @param label - What the value is (e.g. `database name`), used in the error message.
5
8
  * @returns The original value when valid.
6
- * @throws When the value contains disallowed characters.
9
+ * @throws When the value is not a string, is empty, starts with a non-letter,
10
+ * or contains disallowed characters.
7
11
  */
8
- declare const sanitize: (value: string) => string;
12
+ declare const sanitize: (value: unknown, label?: string) => string;
9
13
  export { sanitize };
10
14
  //# sourceMappingURL=sanitize.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sanitize.d.ts","sourceRoot":"","sources":["../../../src/libs/sanitize.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,QAAA,MAAM,QAAQ,GAAI,OAAO,MAAM,KAAG,MAKjC,CAAC;AAEF,OAAO,EAAE,QAAQ,EAAE,CAAC"}
1
+ {"version":3,"file":"sanitize.d.ts","sourceRoot":"","sources":["../../../src/libs/sanitize.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,QAAA,MAAM,QAAQ,GAAI,OAAO,OAAO,EAAE,QAAO,MAAgB,KAAG,MAgB3D,CAAC;AAEF,OAAO,EAAE,QAAQ,EAAE,CAAC"}
@@ -2,18 +2,28 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.sanitize = void 0;
4
4
  /**
5
- * Validates that `value` contains only letters, numbers, and underscores.
5
+ * Validates that `value` is a string that starts with a letter and contains
6
+ * only letters, numbers, and underscores. This keeps database names safe to
7
+ * interpolate into SQL and migration names valid as TypeScript class names.
6
8
  *
7
- * @param value - String to validate.
9
+ * @param value - Value to validate.
10
+ * @param label - What the value is (e.g. `database name`), used in the error message.
8
11
  * @returns The original value when valid.
9
- * @throws When the value contains disallowed characters.
12
+ * @throws When the value is not a string, is empty, starts with a non-letter,
13
+ * or contains disallowed characters.
10
14
  */
11
- const sanitize = (value) => {
12
- const regex = new RegExp('^[A-Za-z0-9_]+$');
13
- const check = regex.test(value);
14
- if (check)
15
- return value;
16
- throw new Error('Only numbers, letters and underscores allowed');
15
+ const sanitize = (value, label = 'value') => {
16
+ if (typeof value !== 'string') {
17
+ const got = value === null ? 'null' : typeof value;
18
+ throw new Error(`Invalid ${label}: expected a string, received ${got}.`);
19
+ }
20
+ if (!/^[A-Za-z]/.test(value)) {
21
+ throw new Error(`Invalid ${label} '${value}'. It must start with a letter.`);
22
+ }
23
+ if (!/^[A-Za-z][A-Za-z0-9_]*$/.test(value)) {
24
+ throw new Error(`Invalid ${label} '${value}'. Only numbers, letters and underscores allowed.`);
25
+ }
26
+ return value;
17
27
  };
18
28
  exports.sanitize = sanitize;
19
29
  //# sourceMappingURL=sanitize.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sanitize.js","sourceRoot":"","sources":["../../../src/libs/sanitize.ts"],"names":[],"mappings":";;;AAAA;;;;;;GAMG;AACH,MAAM,QAAQ,GAAG,CAAC,KAAa,EAAU,EAAE;IACzC,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChC,IAAI,KAAK;QAAE,OAAO,KAAK,CAAC;IACxB,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;AACnE,CAAC,CAAC;AAEO,4BAAQ"}
1
+ {"version":3,"file":"sanitize.js","sourceRoot":"","sources":["../../../src/libs/sanitize.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;GAUG;AACH,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAE,QAAgB,OAAO,EAAU,EAAE;IACnE,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,GAAG,GAAG,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC;QACnD,MAAM,IAAI,KAAK,CAAC,WAAW,KAAK,iCAAiC,GAAG,GAAG,CAAC,CAAC;IAC3E,CAAC;IACD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CACb,WAAW,KAAK,KAAK,KAAK,iCAAiC,CAC5D,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,KAAK,CACb,WAAW,KAAK,KAAK,KAAK,mDAAmD,CAC9E,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEO,4BAAQ"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Reads the purplekit version from its own `package.json`.
3
+ * Walks up from this file so it works from both `src/` (dev via tsx) and
4
+ * `build/src/` (published package).
5
+ *
6
+ * @returns The package version, or `'unknown'` if it cannot be found.
7
+ */
8
+ declare function getVersion(): string;
9
+ export { getVersion };
10
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../../src/libs/version.ts"],"names":[],"mappings":"AAGA;;;;;;GAMG;AACH,iBAAS,UAAU,IAAI,MAAM,CAkB5B;AAED,OAAO,EAAE,UAAU,EAAE,CAAC"}
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.getVersion = getVersion;
37
+ const node_fs_1 = require("node:fs");
38
+ const path = __importStar(require("node:path"));
39
+ /**
40
+ * Reads the purplekit version from its own `package.json`.
41
+ * Walks up from this file so it works from both `src/` (dev via tsx) and
42
+ * `build/src/` (published package).
43
+ *
44
+ * @returns The package version, or `'unknown'` if it cannot be found.
45
+ */
46
+ function getVersion() {
47
+ let dir = __dirname;
48
+ for (let i = 0; i < 5; i++) {
49
+ const file = path.join(dir, 'package.json');
50
+ if ((0, node_fs_1.existsSync)(file)) {
51
+ try {
52
+ const pkg = JSON.parse((0, node_fs_1.readFileSync)(file, 'utf-8'));
53
+ if (pkg.name === 'purplekit' && pkg.version)
54
+ return pkg.version;
55
+ }
56
+ catch (_a) {
57
+ // unreadable package.json; keep walking up
58
+ }
59
+ }
60
+ dir = path.dirname(dir);
61
+ }
62
+ return 'unknown';
63
+ }
64
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../../src/libs/version.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BS,gCAAU;AA9BnB,qCAAmD;AACnD,gDAAkC;AAElC;;;;;;GAMG;AACH,SAAS,UAAU;IACjB,IAAI,GAAG,GAAG,SAAS,CAAC;IACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;QAC5C,IAAI,IAAA,oBAAU,EAAC,IAAI,CAAC,EAAE,CAAC;YACrB,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,sBAAY,EAAC,IAAI,EAAE,OAAO,CAAC,CAGjD,CAAC;gBACF,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,IAAI,GAAG,CAAC,OAAO;oBAAE,OAAO,GAAG,CAAC,OAAO,CAAC;YAClE,CAAC;YAAC,WAAM,CAAC;gBACP,2CAA2C;YAC7C,CAAC;QACH,CAAC;QACD,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}