relq 1.0.1 → 1.0.3
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.
- package/dist/cjs/addon/buffer/index.cjs +1881 -0
- package/dist/cjs/addon/pg/index.cjs +4812 -0
- package/dist/cjs/addon/pg-cursor/index.cjs +1451 -0
- package/dist/cjs/addon/pg-format/index.cjs +2270 -0
- package/dist/cjs/cli/commands/add.cjs +430 -25
- package/dist/cjs/cli/commands/branch.cjs +131 -0
- package/dist/cjs/cli/commands/checkout.cjs +121 -0
- package/dist/cjs/cli/commands/cherry-pick.cjs +282 -0
- package/dist/cjs/cli/commands/commit.cjs +21 -29
- package/dist/cjs/cli/commands/diff.cjs +144 -69
- package/dist/cjs/cli/commands/export.cjs +70 -11
- package/dist/cjs/cli/commands/fetch.cjs +42 -18
- package/dist/cjs/cli/commands/generate.cjs +28 -54
- package/dist/cjs/cli/commands/history.cjs +19 -40
- package/dist/cjs/cli/commands/import.cjs +305 -41
- package/dist/cjs/cli/commands/init.cjs +69 -59
- package/dist/cjs/cli/commands/introspect.cjs +4 -8
- package/dist/cjs/cli/commands/log.cjs +84 -15
- package/dist/cjs/cli/commands/merge.cjs +207 -0
- package/dist/cjs/cli/commands/migrate.cjs +13 -26
- package/dist/cjs/cli/commands/pull.cjs +321 -95
- package/dist/cjs/cli/commands/push.cjs +228 -52
- package/dist/cjs/cli/commands/remote.cjs +17 -0
- package/dist/cjs/cli/commands/reset.cjs +148 -0
- package/dist/cjs/cli/commands/resolve.cjs +191 -0
- package/dist/cjs/cli/commands/rollback.cjs +17 -39
- package/dist/cjs/cli/commands/stash.cjs +152 -0
- package/dist/cjs/cli/commands/status.cjs +52 -9
- package/dist/cjs/cli/commands/sync.cjs +30 -50
- package/dist/cjs/cli/commands/tag.cjs +146 -0
- package/dist/cjs/cli/index.cjs +117 -10
- package/dist/cjs/cli/utils/change-tracker.cjs +107 -3
- package/dist/cjs/cli/utils/cli-utils.cjs +217 -0
- package/dist/cjs/cli/utils/commit-manager.cjs +3 -3
- package/dist/cjs/cli/utils/config-loader.cjs +34 -8
- package/dist/cjs/cli/utils/env-loader.cjs +3 -2
- package/dist/cjs/cli/utils/fast-introspect.cjs +110 -4
- package/dist/cjs/cli/utils/git-utils.cjs +42 -161
- package/dist/cjs/cli/utils/pool-manager.cjs +156 -0
- package/dist/cjs/cli/utils/project-root.cjs +107 -0
- package/dist/cjs/cli/utils/relqignore.cjs +297 -38
- package/dist/cjs/cli/utils/repo-manager.cjs +92 -3
- package/dist/cjs/cli/utils/schema-comparator.cjs +301 -11
- package/dist/cjs/cli/utils/schema-diff.cjs +202 -1
- package/dist/cjs/cli/utils/schema-hash.cjs +2 -1
- package/dist/cjs/cli/utils/schema-introspect.cjs +9 -5
- package/dist/cjs/cli/utils/snapshot-manager.cjs +1 -0
- package/dist/cjs/cli/utils/spinner.cjs +14 -106
- package/dist/cjs/cli/utils/sql-generator.cjs +2 -2
- package/dist/cjs/cli/utils/sql-parser.cjs +94 -7
- package/dist/cjs/cli/utils/type-generator.cjs +28 -16
- package/dist/cjs/condition/array-condition-builder.cjs +1 -1
- package/dist/cjs/condition/condition-collector.cjs +1 -1
- package/dist/cjs/condition/fulltext-condition-builder.cjs +1 -1
- package/dist/cjs/condition/geometric-condition-builder.cjs +1 -1
- package/dist/cjs/condition/jsonb-condition-builder.cjs +1 -1
- package/dist/cjs/condition/network-condition-builder.cjs +1 -1
- package/dist/cjs/condition/range-condition-builder.cjs +1 -1
- package/dist/cjs/copy/copy-builder.cjs +1 -1
- package/dist/cjs/core/query-builder.cjs +1 -1
- package/dist/cjs/core/relq-client.cjs +2 -2
- package/dist/cjs/count/count-builder.cjs +1 -1
- package/dist/cjs/cte/cte-builder.cjs +1 -1
- package/dist/cjs/delete/delete-builder.cjs +1 -1
- package/dist/cjs/function/create-function-builder.cjs +1 -1
- package/dist/cjs/functions/advanced-functions.cjs +1 -1
- package/dist/cjs/functions/case-builder.cjs +1 -1
- package/dist/cjs/functions/geometric-functions.cjs +1 -1
- package/dist/cjs/functions/network-functions.cjs +1 -1
- package/dist/cjs/functions/sql-functions.cjs +1 -1
- package/dist/cjs/indexing/create-index-builder.cjs +1 -1
- package/dist/cjs/indexing/drop-index-builder.cjs +1 -1
- package/dist/cjs/insert/conflict-builder.cjs +1 -1
- package/dist/cjs/insert/insert-builder.cjs +1 -1
- package/dist/cjs/maintenance/vacuum-builder.cjs +1 -1
- package/dist/cjs/pubsub/listen-notify-builder.cjs +1 -1
- package/dist/cjs/pubsub/listener-connection.cjs +2 -2
- package/dist/cjs/raw/raw-query-builder.cjs +1 -1
- package/dist/cjs/schema/schema-builder.cjs +1 -1
- package/dist/cjs/schema-definition/table-definition.cjs +1 -1
- package/dist/cjs/select/aggregate-builder.cjs +1 -1
- package/dist/cjs/select/select-builder.cjs +1 -1
- package/dist/cjs/sequence/sequence-builder.cjs +1 -1
- package/dist/cjs/table/alter-table-builder.cjs +1 -1
- package/dist/cjs/table/constraint-builder.cjs +1 -1
- package/dist/cjs/table/create-table-builder.cjs +1 -1
- package/dist/cjs/table/partition-builder.cjs +1 -1
- package/dist/cjs/table/truncate-builder.cjs +1 -1
- package/dist/cjs/transaction/transaction-builder.cjs +1 -1
- package/dist/cjs/trigger/create-trigger-builder.cjs +1 -1
- package/dist/cjs/update/array-update-builder.cjs +1 -1
- package/dist/cjs/update/update-builder.cjs +1 -1
- package/dist/cjs/utils/index.cjs +1 -1
- package/dist/cjs/view/create-view-builder.cjs +1 -1
- package/dist/cjs/window/window-builder.cjs +1 -1
- package/dist/config.d.ts +16 -25
- package/dist/esm/cli/commands/add.js +399 -27
- package/dist/esm/cli/commands/branch.js +95 -0
- package/dist/esm/cli/commands/checkout.js +85 -0
- package/dist/esm/cli/commands/cherry-pick.js +246 -0
- package/dist/esm/cli/commands/commit.js +22 -30
- package/dist/esm/cli/commands/diff.js +144 -69
- package/dist/esm/cli/commands/export.js +71 -12
- package/dist/esm/cli/commands/fetch.js +42 -18
- package/dist/esm/cli/commands/generate.js +28 -54
- package/dist/esm/cli/commands/history.js +11 -32
- package/dist/esm/cli/commands/import.js +306 -42
- package/dist/esm/cli/commands/init.js +65 -55
- package/dist/esm/cli/commands/introspect.js +4 -8
- package/dist/esm/cli/commands/log.js +78 -10
- package/dist/esm/cli/commands/merge.js +171 -0
- package/dist/esm/cli/commands/migrate.js +13 -26
- package/dist/esm/cli/commands/pull.js +313 -87
- package/dist/esm/cli/commands/push.js +223 -47
- package/dist/esm/cli/commands/remote.js +14 -0
- package/dist/esm/cli/commands/reset.js +112 -0
- package/dist/esm/cli/commands/resolve.js +155 -0
- package/dist/esm/cli/commands/rollback.js +17 -39
- package/dist/esm/cli/commands/stash.js +116 -0
- package/dist/esm/cli/commands/status.js +20 -10
- package/dist/esm/cli/commands/sync.js +30 -50
- package/dist/esm/cli/commands/tag.js +110 -0
- package/dist/esm/cli/index.js +118 -11
- package/dist/esm/cli/utils/change-tracker.js +107 -3
- package/dist/esm/cli/utils/cli-utils.js +169 -0
- package/dist/esm/cli/utils/commit-manager.js +3 -3
- package/dist/esm/cli/utils/config-loader.js +34 -8
- package/dist/esm/cli/utils/env-loader.js +3 -2
- package/dist/esm/cli/utils/fast-introspect.js +110 -4
- package/dist/esm/cli/utils/git-utils.js +2 -124
- package/dist/esm/cli/utils/pool-manager.js +114 -0
- package/dist/esm/cli/utils/project-root.js +69 -0
- package/dist/esm/cli/utils/relqignore.js +278 -37
- package/dist/esm/cli/utils/repo-manager.js +83 -3
- package/dist/esm/cli/utils/schema-comparator.js +301 -11
- package/dist/esm/cli/utils/schema-diff.js +202 -1
- package/dist/esm/cli/utils/schema-hash.js +2 -1
- package/dist/esm/cli/utils/schema-introspect.js +9 -5
- package/dist/esm/cli/utils/snapshot-manager.js +1 -0
- package/dist/esm/cli/utils/spinner.js +1 -101
- package/dist/esm/cli/utils/sql-generator.js +2 -2
- package/dist/esm/cli/utils/sql-parser.js +94 -7
- package/dist/esm/cli/utils/type-generator.js +28 -16
- package/dist/esm/condition/array-condition-builder.js +1 -1
- package/dist/esm/condition/condition-collector.js +1 -1
- package/dist/esm/condition/fulltext-condition-builder.js +1 -1
- package/dist/esm/condition/geometric-condition-builder.js +1 -1
- package/dist/esm/condition/jsonb-condition-builder.js +1 -1
- package/dist/esm/condition/network-condition-builder.js +1 -1
- package/dist/esm/condition/range-condition-builder.js +1 -1
- package/dist/esm/copy/copy-builder.js +1 -1
- package/dist/esm/core/query-builder.js +1 -1
- package/dist/esm/core/relq-client.js +2 -2
- package/dist/esm/count/count-builder.js +1 -1
- package/dist/esm/cte/cte-builder.js +1 -1
- package/dist/esm/delete/delete-builder.js +1 -1
- package/dist/esm/function/create-function-builder.js +1 -1
- package/dist/esm/functions/advanced-functions.js +1 -1
- package/dist/esm/functions/case-builder.js +1 -1
- package/dist/esm/functions/geometric-functions.js +1 -1
- package/dist/esm/functions/network-functions.js +1 -1
- package/dist/esm/functions/sql-functions.js +1 -1
- package/dist/esm/indexing/create-index-builder.js +1 -1
- package/dist/esm/indexing/drop-index-builder.js +1 -1
- package/dist/esm/insert/conflict-builder.js +1 -1
- package/dist/esm/insert/insert-builder.js +1 -1
- package/dist/esm/maintenance/vacuum-builder.js +1 -1
- package/dist/esm/pubsub/listen-notify-builder.js +1 -1
- package/dist/esm/pubsub/listener-connection.js +2 -2
- package/dist/esm/raw/raw-query-builder.js +1 -1
- package/dist/esm/schema/schema-builder.js +1 -1
- package/dist/esm/schema-definition/table-definition.js +1 -1
- package/dist/esm/select/aggregate-builder.js +1 -1
- package/dist/esm/select/select-builder.js +1 -1
- package/dist/esm/sequence/sequence-builder.js +1 -1
- package/dist/esm/table/alter-table-builder.js +1 -1
- package/dist/esm/table/constraint-builder.js +1 -1
- package/dist/esm/table/create-table-builder.js +1 -1
- package/dist/esm/table/partition-builder.js +1 -1
- package/dist/esm/table/truncate-builder.js +1 -1
- package/dist/esm/transaction/transaction-builder.js +1 -1
- package/dist/esm/trigger/create-trigger-builder.js +1 -1
- package/dist/esm/update/array-update-builder.js +1 -1
- package/dist/esm/update/update-builder.js +1 -1
- package/dist/esm/utils/index.js +1 -1
- package/dist/esm/view/create-view-builder.js +1 -1
- package/dist/esm/window/window-builder.js +1 -1
- package/dist/index.d.ts +25 -8
- package/dist/schema-builder.d.ts +16 -6
- package/package.json +1 -1
- /package/dist/{addons/buffer.js → esm/addon/buffer/index.js} +0 -0
- /package/dist/{addons/pg.js → esm/addon/pg/index.js} +0 -0
- /package/dist/{addons/pg-cursor.js → esm/addon/pg-cursor/index.js} +0 -0
- /package/dist/{addons/pg-format.js → esm/addon/pg-format/index.js} +0 -0
|
@@ -0,0 +1,191 @@
|
|
|
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.resolveCommand = resolveCommand;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const spinner_1 = require("../utils/spinner.cjs");
|
|
40
|
+
const repo_manager_1 = require("../utils/repo-manager.cjs");
|
|
41
|
+
async function resolveCommand(context) {
|
|
42
|
+
const { flags, args, projectRoot } = context;
|
|
43
|
+
console.log('');
|
|
44
|
+
if (!(0, repo_manager_1.isInitialized)(projectRoot)) {
|
|
45
|
+
(0, spinner_1.fatal)('not a relq repository (or any parent directories): .relq', `Run ${spinner_1.colors.cyan('relq init')} to initialize.`);
|
|
46
|
+
}
|
|
47
|
+
const mergeStatePath = path.join(projectRoot, '.relq', 'MERGE_STATE');
|
|
48
|
+
if (!fs.existsSync(mergeStatePath)) {
|
|
49
|
+
console.log('No conflicts to resolve');
|
|
50
|
+
console.log('');
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
const mergeState = JSON.parse(fs.readFileSync(mergeStatePath, 'utf-8'));
|
|
54
|
+
if (mergeState.conflicts.length === 0) {
|
|
55
|
+
fs.unlinkSync(mergeStatePath);
|
|
56
|
+
console.log('All conflicts resolved');
|
|
57
|
+
console.log('');
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
const allTheirs = flags['all-theirs'] === true;
|
|
61
|
+
const allOurs = flags['all-ours'] === true;
|
|
62
|
+
const theirs = flags['theirs'] === true;
|
|
63
|
+
const ours = flags['ours'] === true;
|
|
64
|
+
const objectName = args[0];
|
|
65
|
+
if (allTheirs) {
|
|
66
|
+
console.log(`Resolving ${mergeState.conflicts.length} conflict(s) with --all-theirs`);
|
|
67
|
+
console.log('');
|
|
68
|
+
(0, repo_manager_1.saveSnapshot)(mergeState.remoteSnapshot, projectRoot);
|
|
69
|
+
fs.unlinkSync(mergeStatePath);
|
|
70
|
+
console.log('Applied remote versions for all conflicts');
|
|
71
|
+
console.log('');
|
|
72
|
+
console.log(`hint: run 'relq commit -m "Merge remote changes"' to complete`);
|
|
73
|
+
console.log('');
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
if (allOurs) {
|
|
77
|
+
console.log(`Resolving ${mergeState.conflicts.length} conflict(s) with --all-ours`);
|
|
78
|
+
console.log('');
|
|
79
|
+
fs.unlinkSync(mergeStatePath);
|
|
80
|
+
console.log('Kept local versions for all conflicts');
|
|
81
|
+
console.log('');
|
|
82
|
+
console.log(`hint: run 'relq commit -m "Keep local changes"' to complete`);
|
|
83
|
+
console.log('');
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
if ((theirs || ours) && objectName) {
|
|
87
|
+
const conflict = mergeState.conflicts.find(c => c.objectName === objectName ||
|
|
88
|
+
`${c.parentName}.${c.objectName}` === objectName);
|
|
89
|
+
if (!conflict) {
|
|
90
|
+
console.log(`${spinner_1.colors.red('error:')} No conflict found for '${objectName}'`);
|
|
91
|
+
console.log('');
|
|
92
|
+
console.log('Conflicts:');
|
|
93
|
+
for (const c of mergeState.conflicts) {
|
|
94
|
+
const name = c.parentName ? `${c.parentName}.${c.objectName}` : c.objectName;
|
|
95
|
+
console.log(` ${c.objectType}: ${name}`);
|
|
96
|
+
}
|
|
97
|
+
console.log('');
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
const localSnapshot = (0, repo_manager_1.loadSnapshot)(projectRoot);
|
|
101
|
+
if (!localSnapshot) {
|
|
102
|
+
console.log(`${spinner_1.colors.red('error:')} No local snapshot found`);
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
if (theirs) {
|
|
106
|
+
applyResolution(localSnapshot, conflict, mergeState.remoteSnapshot, 'theirs');
|
|
107
|
+
(0, repo_manager_1.saveSnapshot)(localSnapshot, projectRoot);
|
|
108
|
+
}
|
|
109
|
+
mergeState.conflicts = mergeState.conflicts.filter(c => c !== conflict);
|
|
110
|
+
if (mergeState.conflicts.length === 0) {
|
|
111
|
+
fs.unlinkSync(mergeStatePath);
|
|
112
|
+
console.log('All conflicts resolved');
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
fs.writeFileSync(mergeStatePath, JSON.stringify(mergeState, null, 2));
|
|
116
|
+
console.log(`Resolved: ${conflict.objectType} ${objectName}`);
|
|
117
|
+
console.log(`${mergeState.conflicts.length} conflict(s) remaining`);
|
|
118
|
+
}
|
|
119
|
+
console.log('');
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
(0, spinner_1.warning)(`You have ${mergeState.conflicts.length} unresolved conflict(s):`);
|
|
123
|
+
console.log('');
|
|
124
|
+
for (const conflict of mergeState.conflicts) {
|
|
125
|
+
const name = conflict.parentName
|
|
126
|
+
? `${conflict.parentName}.${conflict.objectName}`
|
|
127
|
+
: conflict.objectName;
|
|
128
|
+
console.log(` ${spinner_1.colors.red('conflict:')} ${conflict.objectType.toLowerCase()} ${spinner_1.colors.bold(name)}`);
|
|
129
|
+
console.log(` ${spinner_1.colors.muted(conflict.description)}`);
|
|
130
|
+
}
|
|
131
|
+
console.log('');
|
|
132
|
+
console.log('To resolve:');
|
|
133
|
+
console.log(` ${spinner_1.colors.cyan('relq resolve --theirs <name>')} Take remote version`);
|
|
134
|
+
console.log(` ${spinner_1.colors.cyan('relq resolve --ours <name>')} Keep local version`);
|
|
135
|
+
console.log(` ${spinner_1.colors.cyan('relq resolve --all-theirs')} Take all remote`);
|
|
136
|
+
console.log(` ${spinner_1.colors.cyan('relq resolve --all-ours')} Keep all local`);
|
|
137
|
+
console.log('');
|
|
138
|
+
}
|
|
139
|
+
function applyResolution(local, conflict, remote, resolution) {
|
|
140
|
+
if (resolution !== 'theirs')
|
|
141
|
+
return;
|
|
142
|
+
switch (conflict.objectType) {
|
|
143
|
+
case 'TABLE': {
|
|
144
|
+
const remoteTable = remote.tables.find(t => t.name === conflict.objectName);
|
|
145
|
+
const localIdx = local.tables.findIndex(t => t.name === conflict.objectName);
|
|
146
|
+
if (remoteTable) {
|
|
147
|
+
if (localIdx >= 0) {
|
|
148
|
+
local.tables[localIdx] = remoteTable;
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
local.tables.push(remoteTable);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
break;
|
|
155
|
+
}
|
|
156
|
+
case 'COLUMN': {
|
|
157
|
+
const [tableName, colName] = conflict.objectName.includes('.')
|
|
158
|
+
? conflict.objectName.split('.')
|
|
159
|
+
: [conflict.parentName, conflict.objectName];
|
|
160
|
+
const remoteTable = remote.tables.find(t => t.name === tableName);
|
|
161
|
+
const localTable = local.tables.find(t => t.name === tableName);
|
|
162
|
+
if (remoteTable && localTable) {
|
|
163
|
+
const remoteCol = remoteTable.columns.find(c => c.name === colName);
|
|
164
|
+
const localIdx = localTable.columns.findIndex(c => c.name === colName);
|
|
165
|
+
if (remoteCol) {
|
|
166
|
+
if (localIdx >= 0) {
|
|
167
|
+
localTable.columns[localIdx] = remoteCol;
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
localTable.columns.push(remoteCol);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
break;
|
|
175
|
+
}
|
|
176
|
+
case 'ENUM': {
|
|
177
|
+
const remoteEnum = remote.enums.find(e => e.name === conflict.objectName);
|
|
178
|
+
const localIdx = local.enums.findIndex(e => e.name === conflict.objectName);
|
|
179
|
+
if (remoteEnum) {
|
|
180
|
+
if (localIdx >= 0) {
|
|
181
|
+
local.enums[localIdx] = remoteEnum;
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
local.enums.push(remoteEnum);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
break;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
exports.default = resolveCommand;
|
|
@@ -36,18 +36,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
36
36
|
exports.rollbackCommand = rollbackCommand;
|
|
37
37
|
const fs = __importStar(require("fs"));
|
|
38
38
|
const path = __importStar(require("path"));
|
|
39
|
-
const readline = __importStar(require("readline"));
|
|
40
39
|
const config_loader_1 = require("../utils/config-loader.cjs");
|
|
41
40
|
const env_loader_1 = require("../utils/env-loader.cjs");
|
|
42
|
-
const
|
|
43
|
-
reset: '\x1b[0m',
|
|
44
|
-
bold: '\x1b[1m',
|
|
45
|
-
dim: '\x1b[2m',
|
|
46
|
-
red: '\x1b[31m',
|
|
47
|
-
green: '\x1b[32m',
|
|
48
|
-
yellow: '\x1b[33m',
|
|
49
|
-
cyan: '\x1b[36m',
|
|
50
|
-
};
|
|
41
|
+
const cli_utils_1 = require("../utils/cli-utils.cjs");
|
|
51
42
|
function parseMigration(content) {
|
|
52
43
|
const upMatch = content.match(/--\s*UP\s*\n([\s\S]*?)(?=--\s*DOWN|$)/i);
|
|
53
44
|
const downMatch = content.match(/--\s*DOWN\s*\n([\s\S]*?)$/i);
|
|
@@ -56,36 +47,24 @@ function parseMigration(content) {
|
|
|
56
47
|
down: downMatch?.[1]?.trim() || '',
|
|
57
48
|
};
|
|
58
49
|
}
|
|
59
|
-
function askConfirm(question) {
|
|
60
|
-
const rl = readline.createInterface({
|
|
61
|
-
input: process.stdin,
|
|
62
|
-
output: process.stdout,
|
|
63
|
-
});
|
|
64
|
-
return new Promise((resolve) => {
|
|
65
|
-
rl.question(`${question} [y/N]: `, (answer) => {
|
|
66
|
-
rl.close();
|
|
67
|
-
resolve(answer.trim().toLowerCase() === 'y');
|
|
68
|
-
});
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
50
|
async function rollbackCommand(context) {
|
|
72
51
|
const { config, args, flags } = context;
|
|
73
52
|
if (!config) {
|
|
74
|
-
|
|
75
|
-
|
|
53
|
+
(0, cli_utils_1.fatal)('No configuration found', `run ${cli_utils_1.colors.cyan('relq init')} to create a configuration file`);
|
|
54
|
+
return;
|
|
76
55
|
}
|
|
77
|
-
(0, config_loader_1.requireValidConfig)(config);
|
|
56
|
+
await (0, config_loader_1.requireValidConfig)(config, { calledFrom: 'rollback' });
|
|
78
57
|
const connection = config.connection;
|
|
79
58
|
const migrationsDir = config.migrations?.directory || './migrations';
|
|
80
59
|
const tableName = config.migrations?.tableName || '_relq_migrations';
|
|
81
60
|
const count = parseInt(args[0]) || 1;
|
|
82
61
|
const dryRun = flags['dry-run'] === true;
|
|
83
62
|
const force = flags['force'] === true;
|
|
84
|
-
console.log(
|
|
63
|
+
console.log(`Rolling back ${count} migration(s)...`);
|
|
85
64
|
console.log(` Connection: ${(0, env_loader_1.getConnectionDescription)(connection)}`);
|
|
86
65
|
console.log('');
|
|
87
66
|
try {
|
|
88
|
-
const { Pool } = await Promise.resolve().then(() => __importStar(require("
|
|
67
|
+
const { Pool } = await Promise.resolve().then(() => __importStar(require("../../addon/pg/index.cjs")));
|
|
89
68
|
const pool = new Pool({
|
|
90
69
|
host: connection.host,
|
|
91
70
|
port: connection.port || 5432,
|
|
@@ -101,17 +80,17 @@ async function rollbackCommand(context) {
|
|
|
101
80
|
LIMIT $1;
|
|
102
81
|
`, [count]);
|
|
103
82
|
if (result.rows.length === 0) {
|
|
104
|
-
console.log(
|
|
83
|
+
console.log('No migrations to rollback.');
|
|
105
84
|
return;
|
|
106
85
|
}
|
|
107
86
|
const toRollback = result.rows.map(r => r.name);
|
|
108
|
-
console.log(
|
|
87
|
+
console.log('Migrations to rollback:');
|
|
109
88
|
for (const name of toRollback) {
|
|
110
|
-
console.log(`
|
|
89
|
+
console.log(` - ${name}`);
|
|
111
90
|
}
|
|
112
91
|
console.log('');
|
|
113
92
|
if (!force && !dryRun) {
|
|
114
|
-
const proceed = await
|
|
93
|
+
const proceed = await (0, cli_utils_1.confirm)(`${cli_utils_1.colors.red('This will undo ' + toRollback.length + ' migration(s). Continue?')}`, false);
|
|
115
94
|
if (!proceed) {
|
|
116
95
|
console.log('Cancelled.');
|
|
117
96
|
return;
|
|
@@ -120,18 +99,18 @@ async function rollbackCommand(context) {
|
|
|
120
99
|
for (const name of toRollback) {
|
|
121
100
|
const filePath = path.join(migrationsDir, name);
|
|
122
101
|
if (!fs.existsSync(filePath)) {
|
|
123
|
-
|
|
102
|
+
(0, cli_utils_1.warning)(`Migration file not found: ${name}`);
|
|
124
103
|
continue;
|
|
125
104
|
}
|
|
126
105
|
const content = fs.readFileSync(filePath, 'utf-8');
|
|
127
106
|
const { down } = parseMigration(content);
|
|
128
107
|
if (!down) {
|
|
129
|
-
|
|
108
|
+
(0, cli_utils_1.warning)(`No DOWN section in: ${name}`);
|
|
130
109
|
continue;
|
|
131
110
|
}
|
|
132
111
|
if (dryRun) {
|
|
133
|
-
console.log(
|
|
134
|
-
console.log(
|
|
112
|
+
console.log(`[dry-run] Would rollback: ${name}`);
|
|
113
|
+
console.log(down);
|
|
135
114
|
console.log('');
|
|
136
115
|
}
|
|
137
116
|
else {
|
|
@@ -142,7 +121,7 @@ async function rollbackCommand(context) {
|
|
|
142
121
|
await client.query(down);
|
|
143
122
|
await client.query(`DELETE FROM "${tableName}" WHERE name = $1`, [name]);
|
|
144
123
|
await client.query('COMMIT');
|
|
145
|
-
console.log(
|
|
124
|
+
console.log(' Rolled back');
|
|
146
125
|
}
|
|
147
126
|
catch (error) {
|
|
148
127
|
await client.query('ROLLBACK');
|
|
@@ -155,7 +134,7 @@ async function rollbackCommand(context) {
|
|
|
155
134
|
}
|
|
156
135
|
if (!dryRun) {
|
|
157
136
|
console.log('');
|
|
158
|
-
console.log(
|
|
137
|
+
console.log(`Rolled back ${toRollback.length} migration(s).`);
|
|
159
138
|
}
|
|
160
139
|
}
|
|
161
140
|
finally {
|
|
@@ -163,7 +142,6 @@ async function rollbackCommand(context) {
|
|
|
163
142
|
}
|
|
164
143
|
}
|
|
165
144
|
catch (error) {
|
|
166
|
-
|
|
167
|
-
process.exit(1);
|
|
145
|
+
(0, cli_utils_1.fatal)('Rollback failed', error instanceof Error ? error.message : String(error));
|
|
168
146
|
}
|
|
169
147
|
}
|
|
@@ -0,0 +1,152 @@
|
|
|
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.stashCommand = stashCommand;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const spinner_1 = require("../utils/spinner.cjs");
|
|
40
|
+
const repo_manager_1 = require("../utils/repo-manager.cjs");
|
|
41
|
+
async function stashCommand(context) {
|
|
42
|
+
const { args, flags, projectRoot } = context;
|
|
43
|
+
const subcommand = args[0] || 'push';
|
|
44
|
+
console.log('');
|
|
45
|
+
if (!(0, repo_manager_1.isInitialized)(projectRoot)) {
|
|
46
|
+
(0, spinner_1.fatal)('not a relq repository (or any parent directories): .relq', `Run ${spinner_1.colors.cyan('relq init')} to initialize.`);
|
|
47
|
+
}
|
|
48
|
+
const stashDir = path.join(projectRoot, '.relq', 'stash');
|
|
49
|
+
switch (subcommand) {
|
|
50
|
+
case 'push':
|
|
51
|
+
case 'save':
|
|
52
|
+
await stashPush(projectRoot, stashDir, flags['m'] || 'WIP');
|
|
53
|
+
break;
|
|
54
|
+
case 'pop':
|
|
55
|
+
await stashPop(projectRoot, stashDir);
|
|
56
|
+
break;
|
|
57
|
+
case 'list':
|
|
58
|
+
await stashList(stashDir);
|
|
59
|
+
break;
|
|
60
|
+
case 'drop':
|
|
61
|
+
await stashDrop(stashDir);
|
|
62
|
+
break;
|
|
63
|
+
default:
|
|
64
|
+
await stashPush(projectRoot, stashDir, subcommand);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
async function stashPush(projectRoot, stashDir, message) {
|
|
68
|
+
const staged = (0, repo_manager_1.getStagedChanges)(projectRoot);
|
|
69
|
+
const unstaged = (0, repo_manager_1.getUnstagedChanges)(projectRoot);
|
|
70
|
+
if (staged.length === 0 && unstaged.length === 0) {
|
|
71
|
+
console.log(`${spinner_1.colors.muted('No changes to stash.')}`);
|
|
72
|
+
console.log('');
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
if (!fs.existsSync(stashDir)) {
|
|
76
|
+
fs.mkdirSync(stashDir, { recursive: true });
|
|
77
|
+
}
|
|
78
|
+
const stashFiles = fs.readdirSync(stashDir).filter(f => f.endsWith('.json'));
|
|
79
|
+
const stashIdx = stashFiles.length;
|
|
80
|
+
const stash = {
|
|
81
|
+
message,
|
|
82
|
+
timestamp: new Date().toISOString(),
|
|
83
|
+
staged,
|
|
84
|
+
unstaged,
|
|
85
|
+
};
|
|
86
|
+
fs.writeFileSync(path.join(stashDir, `stash-${stashIdx}.json`), JSON.stringify(stash, null, 2));
|
|
87
|
+
const stagedPath = path.join(projectRoot, '.relq', 'staged.json');
|
|
88
|
+
const unstagedPath = path.join(projectRoot, '.relq', 'unstaged.json');
|
|
89
|
+
if (fs.existsSync(stagedPath))
|
|
90
|
+
fs.writeFileSync(stagedPath, '[]');
|
|
91
|
+
if (fs.existsSync(unstagedPath))
|
|
92
|
+
fs.writeFileSync(unstagedPath, '[]');
|
|
93
|
+
console.log('Saved working directory');
|
|
94
|
+
console.log(` stash@{${stashIdx}}: ${message}`);
|
|
95
|
+
console.log('');
|
|
96
|
+
}
|
|
97
|
+
async function stashPop(projectRoot, stashDir) {
|
|
98
|
+
if (!fs.existsSync(stashDir)) {
|
|
99
|
+
console.log(`${spinner_1.colors.muted('No stashes found.')}`);
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
const stashFiles = fs.readdirSync(stashDir).filter(f => f.endsWith('.json')).sort().reverse();
|
|
103
|
+
if (stashFiles.length === 0) {
|
|
104
|
+
console.log(`${spinner_1.colors.muted('No stashes found.')}`);
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
const stashPath = path.join(stashDir, stashFiles[0]);
|
|
108
|
+
const stash = JSON.parse(fs.readFileSync(stashPath, 'utf-8'));
|
|
109
|
+
const stagedPath = path.join(projectRoot, '.relq', 'staged.json');
|
|
110
|
+
const unstagedPath = path.join(projectRoot, '.relq', 'unstaged.json');
|
|
111
|
+
if (stash.staged.length > 0) {
|
|
112
|
+
fs.writeFileSync(stagedPath, JSON.stringify(stash.staged, null, 2));
|
|
113
|
+
}
|
|
114
|
+
if (stash.unstaged.length > 0) {
|
|
115
|
+
fs.writeFileSync(unstagedPath, JSON.stringify(stash.unstaged, null, 2));
|
|
116
|
+
}
|
|
117
|
+
fs.unlinkSync(stashPath);
|
|
118
|
+
console.log('Applied stash and dropped');
|
|
119
|
+
console.log(` ${stash.message}`);
|
|
120
|
+
console.log('');
|
|
121
|
+
}
|
|
122
|
+
async function stashList(stashDir) {
|
|
123
|
+
if (!fs.existsSync(stashDir)) {
|
|
124
|
+
console.log(`${spinner_1.colors.muted('No stashes.')}`);
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
const stashFiles = fs.readdirSync(stashDir).filter(f => f.endsWith('.json')).sort();
|
|
128
|
+
if (stashFiles.length === 0) {
|
|
129
|
+
console.log(`${spinner_1.colors.muted('No stashes.')}`);
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
for (let i = 0; i < stashFiles.length; i++) {
|
|
133
|
+
const stash = JSON.parse(fs.readFileSync(path.join(stashDir, stashFiles[i]), 'utf-8'));
|
|
134
|
+
console.log(`stash@{${i}}: ${stash.message} (${stash.staged.length + stash.unstaged.length} changes)`);
|
|
135
|
+
}
|
|
136
|
+
console.log('');
|
|
137
|
+
}
|
|
138
|
+
async function stashDrop(stashDir) {
|
|
139
|
+
if (!fs.existsSync(stashDir)) {
|
|
140
|
+
console.log(`${spinner_1.colors.muted('No stashes.')}`);
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
const stashFiles = fs.readdirSync(stashDir).filter(f => f.endsWith('.json')).sort().reverse();
|
|
144
|
+
if (stashFiles.length === 0) {
|
|
145
|
+
console.log(`${spinner_1.colors.muted('No stashes.')}`);
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
fs.unlinkSync(path.join(stashDir, stashFiles[0]));
|
|
149
|
+
console.log('Dropped stash');
|
|
150
|
+
console.log('');
|
|
151
|
+
}
|
|
152
|
+
exports.default = stashCommand;
|
|
@@ -1,20 +1,51 @@
|
|
|
1
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
|
+
})();
|
|
2
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
36
|
exports.statusCommand = statusCommand;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
4
39
|
const env_loader_1 = require("../utils/env-loader.cjs");
|
|
5
40
|
const spinner_1 = require("../utils/spinner.cjs");
|
|
41
|
+
const relqignore_1 = require("../utils/relqignore.cjs");
|
|
6
42
|
const repo_manager_1 = require("../utils/repo-manager.cjs");
|
|
7
43
|
async function statusCommand(context) {
|
|
8
|
-
const { config, flags } = context;
|
|
9
|
-
const projectRoot = process.cwd();
|
|
44
|
+
const { config, flags, projectRoot } = context;
|
|
10
45
|
const connection = config?.connection;
|
|
11
46
|
console.log('');
|
|
12
47
|
if (!(0, repo_manager_1.isInitialized)(projectRoot)) {
|
|
13
|
-
|
|
14
|
-
console.log('');
|
|
15
|
-
console.log(`${spinner_1.colors.muted('Run')} ${spinner_1.colors.cyan('relq init')} ${spinner_1.colors.muted('to initialize.')}`);
|
|
16
|
-
console.log('');
|
|
17
|
-
return;
|
|
48
|
+
(0, spinner_1.fatal)('not a relq repository (or any parent directories): .relq', `Run ${spinner_1.colors.cyan('relq init')} to initialize.`);
|
|
18
49
|
}
|
|
19
50
|
const head = (0, repo_manager_1.getHead)(projectRoot);
|
|
20
51
|
const staged = (0, repo_manager_1.getStagedChanges)(projectRoot);
|
|
@@ -37,7 +68,7 @@ async function statusCommand(context) {
|
|
|
37
68
|
console.log(`${spinner_1.colors.green('Changes to be committed:')}`);
|
|
38
69
|
console.log(` ${spinner_1.colors.muted('(use "relq restore --staged <name>..." to unstage)')}`);
|
|
39
70
|
console.log('');
|
|
40
|
-
displayChanges(staged, '
|
|
71
|
+
displayChanges(staged, ' ');
|
|
41
72
|
console.log('');
|
|
42
73
|
}
|
|
43
74
|
if (unstaged.length > 0) {
|
|
@@ -45,9 +76,21 @@ async function statusCommand(context) {
|
|
|
45
76
|
console.log(` ${spinner_1.colors.muted('(use "relq add <name>..." to stage)')}`);
|
|
46
77
|
console.log(` ${spinner_1.colors.muted('(use "relq restore <name>..." to discard)')}`);
|
|
47
78
|
console.log('');
|
|
48
|
-
displayChanges(unstaged, '
|
|
79
|
+
displayChanges(unstaged, ' ');
|
|
49
80
|
console.log('');
|
|
50
81
|
}
|
|
82
|
+
const ignorePatterns = (0, relqignore_1.loadRelqignore)(projectRoot);
|
|
83
|
+
const relqignorePath = path.join(projectRoot, '.relqignore');
|
|
84
|
+
if (ignorePatterns.length > 0 && fs.existsSync(relqignorePath)) {
|
|
85
|
+
const userPatterns = ignorePatterns.filter(p => !p.raw.startsWith('_relq_') &&
|
|
86
|
+
!p.raw.startsWith('pg_') &&
|
|
87
|
+
!p.raw.startsWith('_temp_') &&
|
|
88
|
+
!p.raw.startsWith('tmp_'));
|
|
89
|
+
if (userPatterns.length > 0) {
|
|
90
|
+
console.log(`${spinner_1.colors.muted(`${userPatterns.length} pattern(s) active from .relqignore`)}`);
|
|
91
|
+
console.log('');
|
|
92
|
+
}
|
|
93
|
+
}
|
|
51
94
|
if (staged.length === 0 && unstaged.length === 0) {
|
|
52
95
|
console.log(`${spinner_1.colors.green('nothing to commit, working tree clean')}`);
|
|
53
96
|
console.log('');
|