@pipeline-builder/pipeline-data 4.1.2 → 4.1.4

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.
@@ -1,80 +0,0 @@
1
- // Copyright 2026 Pipeline Builder Contributors
2
- // SPDX-License-Identifier: Apache-2.0
3
- /**
4
- * Drizzle migration runner.
5
- *
6
- * Idempotent: safe to call on every service start. drizzle tracks applied
7
- * migrations in the `__drizzle_migrations` table and skips ones already run.
8
- *
9
- * The migration files live at `packages/pipeline-data/drizzle/` and are
10
- * generated from the `drizzle-schema.ts` source via `pnpm db:generate`
11
- * (which invokes `drizzle-kit generate`).
12
- *
13
- * For brand-new deploys, `postgres-init.sql` still creates the baseline
14
- * tables — the migration runner will skip its initial baseline migration
15
- * because the tables already exist (drizzle uses CREATE TABLE IF NOT EXISTS
16
- * by default for the snapshot-based generator). Future schema changes ship
17
- * as additive migrations.
18
- */
19
- import * as fs from 'fs';
20
- import * as path from 'path';
21
- import { fileURLToPath } from 'url';
22
- import { createLogger } from '@pipeline-builder/api-core';
23
- import { migrate } from 'drizzle-orm/node-postgres/migrator';
24
- import { getConnection } from './postgres-connection.js';
25
- const logger = createLogger('migrator');
26
- // ESM has no __dirname; derive it from this module's URL. Without this the
27
- // migration runner threw `ReferenceError: __dirname is not defined` at startup
28
- // (onBeforeStart → runMigrations), crash-looping every service that migrates.
29
- const __dirname = path.dirname(fileURLToPath(import.meta.url));
30
- /** Resolve the default migrations folder relative to this package. */
31
- function defaultMigrationsFolder() {
32
- // src/database/migrator.ts → up two levels → package root, then ./drizzle
33
- return path.resolve(__dirname, '..', '..', 'drizzle');
34
- }
35
- /**
36
- * Run any pending Drizzle migrations against the configured Postgres.
37
- *
38
- * No-ops gracefully when:
39
- * - `options.skip` is true
40
- * - `RUN_DB_MIGRATIONS` env var is set to a falsy value (`0`/`false`)
41
- * - the migrations folder doesn't exist (fresh repo, nothing generated yet)
42
- *
43
- * Throws on any actual migration failure so the service refuses to start
44
- * with a half-applied schema.
45
- */
46
- export async function runMigrations(options = {}) {
47
- if (options.skip) {
48
- logger.info('Migration runner skipped via options.skip');
49
- return;
50
- }
51
- const envFlag = process.env.RUN_DB_MIGRATIONS;
52
- if (envFlag !== undefined && (envFlag === '0' || envFlag.toLowerCase() === 'false')) {
53
- logger.info('Migration runner skipped via RUN_DB_MIGRATIONS env');
54
- return;
55
- }
56
- const migrationsFolder = options.migrationsFolder ?? defaultMigrationsFolder();
57
- if (!fs.existsSync(migrationsFolder)) {
58
- logger.info('No migrations folder found, nothing to run', { migrationsFolder });
59
- return;
60
- }
61
- const journalPath = path.join(migrationsFolder, 'meta', '_journal.json');
62
- if (!fs.existsSync(journalPath)) {
63
- logger.info('No drizzle journal found, nothing to run', { journalPath });
64
- return;
65
- }
66
- const conn = getConnection();
67
- const migrationsTable = options.migrationsTable ?? '__drizzle_migrations';
68
- logger.info('Running pending Drizzle migrations', { migrationsFolder, migrationsTable });
69
- try {
70
- await migrate(conn.db, { migrationsFolder, migrationsTable });
71
- logger.info('Drizzle migrations complete');
72
- }
73
- catch (err) {
74
- logger.error('Drizzle migration failed — refusing to start', {
75
- error: err instanceof Error ? err.message : String(err),
76
- });
77
- throw err;
78
- }
79
- }
80
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlncmF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGF0YWJhc2UvbWlncmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQztBQUN6QixPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDN0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXpELE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUV4QywyRUFBMkU7QUFDM0UsK0VBQStFO0FBQy9FLDhFQUE4RTtBQUM5RSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBVy9ELHNFQUFzRTtBQUN0RSxTQUFTLHVCQUF1QjtJQUM5QiwwRUFBMEU7SUFDMUUsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ3hELENBQUM7QUFFRDs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxhQUFhLENBQUMsT0FBTyxHQUFtQixFQUFFO0lBQzlELElBQUksT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2pCLE1BQU0sQ0FBQyxJQUFJLENBQUMsMkNBQTJDLENBQUMsQ0FBQztRQUN6RCxPQUFPO0lBQ1QsQ0FBQztJQUVELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUM7SUFDOUMsSUFBSSxPQUFPLEtBQUssU0FBUyxJQUFJLENBQUMsT0FBTyxLQUFLLEdBQUcsSUFBSSxPQUFPLENBQUMsV0FBVyxFQUFFLEtBQUssT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNwRixNQUFNLENBQUMsSUFBSSxDQUFDLG9EQUFvRCxDQUFDLENBQUM7UUFDbEUsT0FBTztJQUNULENBQUM7SUFFRCxNQUFNLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsSUFBSSx1QkFBdUIsRUFBRSxDQUFDO0lBQy9FLElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQztRQUNyQyxNQUFNLENBQUMsSUFBSSxDQUFDLDRDQUE0QyxFQUFFLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO1FBQ2hGLE9BQU87SUFDVCxDQUFDO0lBRUQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDekUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztRQUNoQyxNQUFNLENBQUMsSUFBSSxDQUFDLDBDQUEwQyxFQUFFLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUN6RSxPQUFPO0lBQ1QsQ0FBQztJQUVELE1BQU0sSUFBSSxHQUFHLGFBQWEsRUFBRSxDQUFDO0lBQzdCLE1BQU0sZUFBZSxHQUFHLE9BQU8sQ0FBQyxlQUFlLElBQUksc0JBQXNCLENBQUM7SUFFMUUsTUFBTSxDQUFDLElBQUksQ0FBQyxvQ0FBb0MsRUFBRSxFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUM7SUFDekYsSUFBSSxDQUFDO1FBQ0gsTUFBTSxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUM7UUFDOUQsTUFBTSxDQUFDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2IsTUFBTSxDQUFDLEtBQUssQ0FBQyw4Q0FBOEMsRUFBRTtZQUMzRCxLQUFLLEVBQUUsR0FBRyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQztTQUN4RCxDQUFDLENBQUM7UUFDSCxNQUFNLEdBQUcsQ0FBQztJQUNaLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogRHJpenpsZSBtaWdyYXRpb24gcnVubmVyLlxuICpcbiAqIElkZW1wb3RlbnQ6IHNhZmUgdG8gY2FsbCBvbiBldmVyeSBzZXJ2aWNlIHN0YXJ0LiBkcml6emxlIHRyYWNrcyBhcHBsaWVkXG4gKiBtaWdyYXRpb25zIGluIHRoZSBgX19kcml6emxlX21pZ3JhdGlvbnNgIHRhYmxlIGFuZCBza2lwcyBvbmVzIGFscmVhZHkgcnVuLlxuICpcbiAqIFRoZSBtaWdyYXRpb24gZmlsZXMgbGl2ZSBhdCBgcGFja2FnZXMvcGlwZWxpbmUtZGF0YS9kcml6emxlL2AgYW5kIGFyZVxuICogZ2VuZXJhdGVkIGZyb20gdGhlIGBkcml6emxlLXNjaGVtYS50c2Agc291cmNlIHZpYSBgcG5wbSBkYjpnZW5lcmF0ZWBcbiAqICh3aGljaCBpbnZva2VzIGBkcml6emxlLWtpdCBnZW5lcmF0ZWApLlxuICpcbiAqIEZvciBicmFuZC1uZXcgZGVwbG95cywgYHBvc3RncmVzLWluaXQuc3FsYCBzdGlsbCBjcmVhdGVzIHRoZSBiYXNlbGluZVxuICogdGFibGVzIOKAlCB0aGUgbWlncmF0aW9uIHJ1bm5lciB3aWxsIHNraXAgaXRzIGluaXRpYWwgYmFzZWxpbmUgbWlncmF0aW9uXG4gKiBiZWNhdXNlIHRoZSB0YWJsZXMgYWxyZWFkeSBleGlzdCAoZHJpenpsZSB1c2VzIENSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTXG4gKiBieSBkZWZhdWx0IGZvciB0aGUgc25hcHNob3QtYmFzZWQgZ2VuZXJhdG9yKS4gRnV0dXJlIHNjaGVtYSBjaGFuZ2VzIHNoaXBcbiAqIGFzIGFkZGl0aXZlIG1pZ3JhdGlvbnMuXG4gKi9cblxuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tICd1cmwnO1xuaW1wb3J0IHsgY3JlYXRlTG9nZ2VyIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLWNvcmUnO1xuaW1wb3J0IHsgbWlncmF0ZSB9IGZyb20gJ2RyaXp6bGUtb3JtL25vZGUtcG9zdGdyZXMvbWlncmF0b3InO1xuaW1wb3J0IHsgZ2V0Q29ubmVjdGlvbiB9IGZyb20gJy4vcG9zdGdyZXMtY29ubmVjdGlvbi5qcyc7XG5cbmNvbnN0IGxvZ2dlciA9IGNyZWF0ZUxvZ2dlcignbWlncmF0b3InKTtcblxuLy8gRVNNIGhhcyBubyBfX2Rpcm5hbWU7IGRlcml2ZSBpdCBmcm9tIHRoaXMgbW9kdWxlJ3MgVVJMLiBXaXRob3V0IHRoaXMgdGhlXG4vLyBtaWdyYXRpb24gcnVubmVyIHRocmV3IGBSZWZlcmVuY2VFcnJvcjogX19kaXJuYW1lIGlzIG5vdCBkZWZpbmVkYCBhdCBzdGFydHVwXG4vLyAob25CZWZvcmVTdGFydCDihpIgcnVuTWlncmF0aW9ucyksIGNyYXNoLWxvb3BpbmcgZXZlcnkgc2VydmljZSB0aGF0IG1pZ3JhdGVzLlxuY29uc3QgX19kaXJuYW1lID0gcGF0aC5kaXJuYW1lKGZpbGVVUkxUb1BhdGgoaW1wb3J0Lm1ldGEudXJsKSk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWlncmF0ZU9wdGlvbnMge1xuICAvKiogQWJzb2x1dGUgcGF0aCB0byB0aGUgbWlncmF0aW9ucyBmb2xkZXIuIERlZmF1bHRzIHRvIGA8cGFja2FnZT4vZHJpenpsZWAuICovXG4gIG1pZ3JhdGlvbnNGb2xkZXI/OiBzdHJpbmc7XG4gIC8qKiBTY2hlbWEtcXVhbGlmaWVkIG1pZ3JhdGlvbnMgdGFibGUgbmFtZS4gRGVmYXVsdHMgdG8gYF9fZHJpenpsZV9taWdyYXRpb25zYC4gKi9cbiAgbWlncmF0aW9uc1RhYmxlPzogc3RyaW5nO1xuICAvKiogU2tpcCB0aGUgcnVubmVyIGVudGlyZWx5IChmb3IgdGVzdHMgb3Igd2hlbiBhIGRlcGxveSB1c2VzIGFuIGV4dGVybmFsIG1pZ3JhdGlvbiB0b29sKS4gKi9cbiAgc2tpcD86IGJvb2xlYW47XG59XG5cbi8qKiBSZXNvbHZlIHRoZSBkZWZhdWx0IG1pZ3JhdGlvbnMgZm9sZGVyIHJlbGF0aXZlIHRvIHRoaXMgcGFja2FnZS4gKi9cbmZ1bmN0aW9uIGRlZmF1bHRNaWdyYXRpb25zRm9sZGVyKCk6IHN0cmluZyB7XG4gIC8vIHNyYy9kYXRhYmFzZS9taWdyYXRvci50cyDihpIgdXAgdHdvIGxldmVscyDihpIgcGFja2FnZSByb290LCB0aGVuIC4vZHJpenpsZVxuICByZXR1cm4gcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJy4uJywgJy4uJywgJ2RyaXp6bGUnKTtcbn1cblxuLyoqXG4gKiBSdW4gYW55IHBlbmRpbmcgRHJpenpsZSBtaWdyYXRpb25zIGFnYWluc3QgdGhlIGNvbmZpZ3VyZWQgUG9zdGdyZXMuXG4gKlxuICogTm8tb3BzIGdyYWNlZnVsbHkgd2hlbjpcbiAqICAgLSBgb3B0aW9ucy5za2lwYCBpcyB0cnVlXG4gKiAgIC0gYFJVTl9EQl9NSUdSQVRJT05TYCBlbnYgdmFyIGlzIHNldCB0byBhIGZhbHN5IHZhbHVlIChgMGAvYGZhbHNlYClcbiAqICAgLSB0aGUgbWlncmF0aW9ucyBmb2xkZXIgZG9lc24ndCBleGlzdCAoZnJlc2ggcmVwbywgbm90aGluZyBnZW5lcmF0ZWQgeWV0KVxuICpcbiAqIFRocm93cyBvbiBhbnkgYWN0dWFsIG1pZ3JhdGlvbiBmYWlsdXJlIHNvIHRoZSBzZXJ2aWNlIHJlZnVzZXMgdG8gc3RhcnRcbiAqIHdpdGggYSBoYWxmLWFwcGxpZWQgc2NoZW1hLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuTWlncmF0aW9ucyhvcHRpb25zOiBNaWdyYXRlT3B0aW9ucyA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChvcHRpb25zLnNraXApIHtcbiAgICBsb2dnZXIuaW5mbygnTWlncmF0aW9uIHJ1bm5lciBza2lwcGVkIHZpYSBvcHRpb25zLnNraXAnKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBlbnZGbGFnID0gcHJvY2Vzcy5lbnYuUlVOX0RCX01JR1JBVElPTlM7XG4gIGlmIChlbnZGbGFnICE9PSB1bmRlZmluZWQgJiYgKGVudkZsYWcgPT09ICcwJyB8fCBlbnZGbGFnLnRvTG93ZXJDYXNlKCkgPT09ICdmYWxzZScpKSB7XG4gICAgbG9nZ2VyLmluZm8oJ01pZ3JhdGlvbiBydW5uZXIgc2tpcHBlZCB2aWEgUlVOX0RCX01JR1JBVElPTlMgZW52Jyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgbWlncmF0aW9uc0ZvbGRlciA9IG9wdGlvbnMubWlncmF0aW9uc0ZvbGRlciA/PyBkZWZhdWx0TWlncmF0aW9uc0ZvbGRlcigpO1xuICBpZiAoIWZzLmV4aXN0c1N5bmMobWlncmF0aW9uc0ZvbGRlcikpIHtcbiAgICBsb2dnZXIuaW5mbygnTm8gbWlncmF0aW9ucyBmb2xkZXIgZm91bmQsIG5vdGhpbmcgdG8gcnVuJywgeyBtaWdyYXRpb25zRm9sZGVyIH0pO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGpvdXJuYWxQYXRoID0gcGF0aC5qb2luKG1pZ3JhdGlvbnNGb2xkZXIsICdtZXRhJywgJ19qb3VybmFsLmpzb24nKTtcbiAgaWYgKCFmcy5leGlzdHNTeW5jKGpvdXJuYWxQYXRoKSkge1xuICAgIGxvZ2dlci5pbmZvKCdObyBkcml6emxlIGpvdXJuYWwgZm91bmQsIG5vdGhpbmcgdG8gcnVuJywgeyBqb3VybmFsUGF0aCB9KTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBjb25uID0gZ2V0Q29ubmVjdGlvbigpO1xuICBjb25zdCBtaWdyYXRpb25zVGFibGUgPSBvcHRpb25zLm1pZ3JhdGlvbnNUYWJsZSA/PyAnX19kcml6emxlX21pZ3JhdGlvbnMnO1xuXG4gIGxvZ2dlci5pbmZvKCdSdW5uaW5nIHBlbmRpbmcgRHJpenpsZSBtaWdyYXRpb25zJywgeyBtaWdyYXRpb25zRm9sZGVyLCBtaWdyYXRpb25zVGFibGUgfSk7XG4gIHRyeSB7XG4gICAgYXdhaXQgbWlncmF0ZShjb25uLmRiLCB7IG1pZ3JhdGlvbnNGb2xkZXIsIG1pZ3JhdGlvbnNUYWJsZSB9KTtcbiAgICBsb2dnZXIuaW5mbygnRHJpenpsZSBtaWdyYXRpb25zIGNvbXBsZXRlJyk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci5lcnJvcignRHJpenpsZSBtaWdyYXRpb24gZmFpbGVkIOKAlCByZWZ1c2luZyB0byBzdGFydCcsIHtcbiAgICAgIGVycm9yOiBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVyciksXG4gICAgfSk7XG4gICAgdGhyb3cgZXJyO1xuICB9XG59XG4iXX0=