relq 1.0.1 → 1.0.2

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 (159) hide show
  1. package/dist/cjs/addon/buffer/index.cjs +1881 -0
  2. package/dist/cjs/addon/pg/index.cjs +4812 -0
  3. package/dist/cjs/addon/pg-cursor/index.cjs +1451 -0
  4. package/dist/cjs/addon/pg-format/index.cjs +2270 -0
  5. package/dist/cjs/cli/commands/add.cjs +30 -1
  6. package/dist/cjs/cli/commands/branch.cjs +141 -0
  7. package/dist/cjs/cli/commands/checkout.cjs +134 -0
  8. package/dist/cjs/cli/commands/cherry-pick.cjs +283 -0
  9. package/dist/cjs/cli/commands/diff.cjs +148 -69
  10. package/dist/cjs/cli/commands/export.cjs +64 -5
  11. package/dist/cjs/cli/commands/fetch.cjs +34 -4
  12. package/dist/cjs/cli/commands/history.cjs +1 -1
  13. package/dist/cjs/cli/commands/import.cjs +283 -12
  14. package/dist/cjs/cli/commands/log.cjs +75 -0
  15. package/dist/cjs/cli/commands/merge.cjs +224 -0
  16. package/dist/cjs/cli/commands/migrate.cjs +1 -1
  17. package/dist/cjs/cli/commands/pull.cjs +123 -7
  18. package/dist/cjs/cli/commands/push.cjs +245 -29
  19. package/dist/cjs/cli/commands/remote.cjs +16 -0
  20. package/dist/cjs/cli/commands/reset.cjs +169 -0
  21. package/dist/cjs/cli/commands/resolve.cjs +193 -0
  22. package/dist/cjs/cli/commands/rollback.cjs +1 -1
  23. package/dist/cjs/cli/commands/stash.cjs +154 -0
  24. package/dist/cjs/cli/commands/status.cjs +48 -0
  25. package/dist/cjs/cli/commands/tag.cjs +147 -0
  26. package/dist/cjs/cli/index.cjs +46 -2
  27. package/dist/cjs/cli/utils/commit-manager.cjs +3 -3
  28. package/dist/cjs/cli/utils/env-loader.cjs +3 -2
  29. package/dist/cjs/cli/utils/fast-introspect.cjs +1 -1
  30. package/dist/cjs/cli/utils/project-root.cjs +56 -0
  31. package/dist/cjs/cli/utils/relqignore.cjs +296 -38
  32. package/dist/cjs/cli/utils/repo-manager.cjs +45 -3
  33. package/dist/cjs/cli/utils/schema-introspect.cjs +2 -2
  34. package/dist/cjs/cli/utils/sql-generator.cjs +1 -1
  35. package/dist/cjs/cli/utils/sql-parser.cjs +94 -7
  36. package/dist/cjs/condition/array-condition-builder.cjs +1 -1
  37. package/dist/cjs/condition/condition-collector.cjs +1 -1
  38. package/dist/cjs/condition/fulltext-condition-builder.cjs +1 -1
  39. package/dist/cjs/condition/geometric-condition-builder.cjs +1 -1
  40. package/dist/cjs/condition/jsonb-condition-builder.cjs +1 -1
  41. package/dist/cjs/condition/network-condition-builder.cjs +1 -1
  42. package/dist/cjs/condition/range-condition-builder.cjs +1 -1
  43. package/dist/cjs/copy/copy-builder.cjs +1 -1
  44. package/dist/cjs/core/query-builder.cjs +1 -1
  45. package/dist/cjs/core/relq-client.cjs +2 -2
  46. package/dist/cjs/count/count-builder.cjs +1 -1
  47. package/dist/cjs/cte/cte-builder.cjs +1 -1
  48. package/dist/cjs/delete/delete-builder.cjs +1 -1
  49. package/dist/cjs/function/create-function-builder.cjs +1 -1
  50. package/dist/cjs/functions/advanced-functions.cjs +1 -1
  51. package/dist/cjs/functions/case-builder.cjs +1 -1
  52. package/dist/cjs/functions/geometric-functions.cjs +1 -1
  53. package/dist/cjs/functions/network-functions.cjs +1 -1
  54. package/dist/cjs/functions/sql-functions.cjs +1 -1
  55. package/dist/cjs/indexing/create-index-builder.cjs +1 -1
  56. package/dist/cjs/indexing/drop-index-builder.cjs +1 -1
  57. package/dist/cjs/insert/conflict-builder.cjs +1 -1
  58. package/dist/cjs/insert/insert-builder.cjs +1 -1
  59. package/dist/cjs/maintenance/vacuum-builder.cjs +1 -1
  60. package/dist/cjs/pubsub/listen-notify-builder.cjs +1 -1
  61. package/dist/cjs/pubsub/listener-connection.cjs +2 -2
  62. package/dist/cjs/raw/raw-query-builder.cjs +1 -1
  63. package/dist/cjs/schema/schema-builder.cjs +1 -1
  64. package/dist/cjs/schema-definition/table-definition.cjs +1 -1
  65. package/dist/cjs/select/aggregate-builder.cjs +1 -1
  66. package/dist/cjs/select/select-builder.cjs +1 -1
  67. package/dist/cjs/sequence/sequence-builder.cjs +1 -1
  68. package/dist/cjs/table/alter-table-builder.cjs +1 -1
  69. package/dist/cjs/table/constraint-builder.cjs +1 -1
  70. package/dist/cjs/table/create-table-builder.cjs +1 -1
  71. package/dist/cjs/table/partition-builder.cjs +1 -1
  72. package/dist/cjs/table/truncate-builder.cjs +1 -1
  73. package/dist/cjs/transaction/transaction-builder.cjs +1 -1
  74. package/dist/cjs/trigger/create-trigger-builder.cjs +1 -1
  75. package/dist/cjs/update/array-update-builder.cjs +1 -1
  76. package/dist/cjs/update/update-builder.cjs +1 -1
  77. package/dist/cjs/utils/index.cjs +1 -1
  78. package/dist/cjs/view/create-view-builder.cjs +1 -1
  79. package/dist/cjs/window/window-builder.cjs +1 -1
  80. package/dist/esm/cli/commands/add.js +30 -1
  81. package/dist/esm/cli/commands/branch.js +105 -0
  82. package/dist/esm/cli/commands/checkout.js +98 -0
  83. package/dist/esm/cli/commands/cherry-pick.js +247 -0
  84. package/dist/esm/cli/commands/diff.js +148 -69
  85. package/dist/esm/cli/commands/export.js +64 -5
  86. package/dist/esm/cli/commands/fetch.js +35 -5
  87. package/dist/esm/cli/commands/history.js +1 -1
  88. package/dist/esm/cli/commands/import.js +283 -12
  89. package/dist/esm/cli/commands/log.js +74 -0
  90. package/dist/esm/cli/commands/merge.js +188 -0
  91. package/dist/esm/cli/commands/migrate.js +1 -1
  92. package/dist/esm/cli/commands/pull.js +124 -8
  93. package/dist/esm/cli/commands/push.js +246 -30
  94. package/dist/esm/cli/commands/remote.js +13 -0
  95. package/dist/esm/cli/commands/reset.js +133 -0
  96. package/dist/esm/cli/commands/resolve.js +157 -0
  97. package/dist/esm/cli/commands/rollback.js +1 -1
  98. package/dist/esm/cli/commands/stash.js +118 -0
  99. package/dist/esm/cli/commands/status.js +15 -0
  100. package/dist/esm/cli/commands/tag.js +111 -0
  101. package/dist/esm/cli/index.js +47 -3
  102. package/dist/esm/cli/utils/commit-manager.js +3 -3
  103. package/dist/esm/cli/utils/env-loader.js +3 -2
  104. package/dist/esm/cli/utils/fast-introspect.js +1 -1
  105. package/dist/esm/cli/utils/project-root.js +19 -0
  106. package/dist/esm/cli/utils/relqignore.js +277 -37
  107. package/dist/esm/cli/utils/repo-manager.js +41 -3
  108. package/dist/esm/cli/utils/schema-introspect.js +2 -2
  109. package/dist/esm/cli/utils/sql-generator.js +1 -1
  110. package/dist/esm/cli/utils/sql-parser.js +94 -7
  111. package/dist/esm/condition/array-condition-builder.js +1 -1
  112. package/dist/esm/condition/condition-collector.js +1 -1
  113. package/dist/esm/condition/fulltext-condition-builder.js +1 -1
  114. package/dist/esm/condition/geometric-condition-builder.js +1 -1
  115. package/dist/esm/condition/jsonb-condition-builder.js +1 -1
  116. package/dist/esm/condition/network-condition-builder.js +1 -1
  117. package/dist/esm/condition/range-condition-builder.js +1 -1
  118. package/dist/esm/copy/copy-builder.js +1 -1
  119. package/dist/esm/core/query-builder.js +1 -1
  120. package/dist/esm/core/relq-client.js +2 -2
  121. package/dist/esm/count/count-builder.js +1 -1
  122. package/dist/esm/cte/cte-builder.js +1 -1
  123. package/dist/esm/delete/delete-builder.js +1 -1
  124. package/dist/esm/function/create-function-builder.js +1 -1
  125. package/dist/esm/functions/advanced-functions.js +1 -1
  126. package/dist/esm/functions/case-builder.js +1 -1
  127. package/dist/esm/functions/geometric-functions.js +1 -1
  128. package/dist/esm/functions/network-functions.js +1 -1
  129. package/dist/esm/functions/sql-functions.js +1 -1
  130. package/dist/esm/indexing/create-index-builder.js +1 -1
  131. package/dist/esm/indexing/drop-index-builder.js +1 -1
  132. package/dist/esm/insert/conflict-builder.js +1 -1
  133. package/dist/esm/insert/insert-builder.js +1 -1
  134. package/dist/esm/maintenance/vacuum-builder.js +1 -1
  135. package/dist/esm/pubsub/listen-notify-builder.js +1 -1
  136. package/dist/esm/pubsub/listener-connection.js +2 -2
  137. package/dist/esm/raw/raw-query-builder.js +1 -1
  138. package/dist/esm/schema/schema-builder.js +1 -1
  139. package/dist/esm/schema-definition/table-definition.js +1 -1
  140. package/dist/esm/select/aggregate-builder.js +1 -1
  141. package/dist/esm/select/select-builder.js +1 -1
  142. package/dist/esm/sequence/sequence-builder.js +1 -1
  143. package/dist/esm/table/alter-table-builder.js +1 -1
  144. package/dist/esm/table/constraint-builder.js +1 -1
  145. package/dist/esm/table/create-table-builder.js +1 -1
  146. package/dist/esm/table/partition-builder.js +1 -1
  147. package/dist/esm/table/truncate-builder.js +1 -1
  148. package/dist/esm/transaction/transaction-builder.js +1 -1
  149. package/dist/esm/trigger/create-trigger-builder.js +1 -1
  150. package/dist/esm/update/array-update-builder.js +1 -1
  151. package/dist/esm/update/update-builder.js +1 -1
  152. package/dist/esm/utils/index.js +1 -1
  153. package/dist/esm/view/create-view-builder.js +1 -1
  154. package/dist/esm/window/window-builder.js +1 -1
  155. package/package.json +1 -1
  156. /package/dist/{addons/buffer.js → esm/addon/buffer/index.js} +0 -0
  157. /package/dist/{addons/pg.js → esm/addon/pg/index.js} +0 -0
  158. /package/dist/{addons/pg-cursor.js → esm/addon/pg-cursor/index.js} +0 -0
  159. /package/dist/{addons/pg-format.js → esm/addon/pg-format/index.js} +0 -0
@@ -0,0 +1,169 @@
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.resetCommand = resetCommand;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ const readline = __importStar(require("readline"));
40
+ const spinner_1 = require("../utils/spinner.cjs");
41
+ const repo_manager_1 = require("../utils/repo-manager.cjs");
42
+ async function resetCommand(context) {
43
+ const { flags, args } = context;
44
+ const projectRoot = process.cwd();
45
+ console.log('');
46
+ if (!(0, repo_manager_1.isInitialized)(projectRoot)) {
47
+ console.log(`${spinner_1.colors.red('fatal:')} not a relq repository`);
48
+ return;
49
+ }
50
+ const hard = flags['hard'] === true;
51
+ const soft = flags['soft'] === true;
52
+ const target = args[0];
53
+ if (!target) {
54
+ console.log(`${spinner_1.colors.red('error:')} Please specify a target`);
55
+ console.log('');
56
+ console.log('Usage:');
57
+ console.log(` ${spinner_1.colors.cyan('relq reset --hard HEAD~1')} Reset to previous commit`);
58
+ console.log(` ${spinner_1.colors.cyan('relq reset --hard <hash>')} Reset to specific commit`);
59
+ console.log('');
60
+ return;
61
+ }
62
+ if (!hard && !soft) {
63
+ console.log(`${spinner_1.colors.red('error:')} Please specify --hard or --soft`);
64
+ console.log('');
65
+ console.log(` ${spinner_1.colors.cyan('--hard')} Discard all changes (DANGEROUS)`);
66
+ console.log(` ${spinner_1.colors.cyan('--soft')} Keep changes unstaged`);
67
+ console.log('');
68
+ return;
69
+ }
70
+ const currentHead = (0, repo_manager_1.getHead)(projectRoot);
71
+ if (!currentHead) {
72
+ console.log(`${spinner_1.colors.red('error:')} No commits yet`);
73
+ return;
74
+ }
75
+ const allCommits = (0, repo_manager_1.getAllCommits)(projectRoot);
76
+ let targetHash = null;
77
+ if (target.startsWith('HEAD~')) {
78
+ const n = parseInt(target.slice(5)) || 1;
79
+ const headIndex = allCommits.findIndex(c => c.hash === currentHead);
80
+ if (headIndex >= 0 && headIndex + n < allCommits.length) {
81
+ targetHash = allCommits[headIndex + n].hash;
82
+ }
83
+ }
84
+ else if (target === 'HEAD') {
85
+ targetHash = currentHead;
86
+ }
87
+ else {
88
+ const match = allCommits.find(c => c.hash.startsWith(target));
89
+ if (match) {
90
+ targetHash = match.hash;
91
+ }
92
+ }
93
+ if (!targetHash) {
94
+ console.log(`${spinner_1.colors.red('error:')} Cannot find commit: ${target}`);
95
+ console.log('');
96
+ console.log('Available commits:');
97
+ for (const c of allCommits.slice(0, 5)) {
98
+ console.log(` ${spinner_1.colors.yellow((0, repo_manager_1.shortHash)(c.hash))} ${c.message}`);
99
+ }
100
+ return;
101
+ }
102
+ const targetCommit = (0, repo_manager_1.loadCommit)(targetHash, projectRoot);
103
+ if (!targetCommit) {
104
+ console.log(`${spinner_1.colors.red('error:')} Cannot load commit: ${targetHash}`);
105
+ return;
106
+ }
107
+ if (hard) {
108
+ console.log(`${spinner_1.colors.red('⚠ WARNING: This will discard all local changes!')}`);
109
+ console.log('');
110
+ console.log(`Reset to: ${spinner_1.colors.yellow((0, repo_manager_1.shortHash)(targetHash))} ${targetCommit.message}`);
111
+ console.log('');
112
+ const rl = readline.createInterface({
113
+ input: process.stdin,
114
+ output: process.stdout
115
+ });
116
+ const confirmed = await new Promise((resolve) => {
117
+ rl.question(`Continue? [y/N] `, (answer) => {
118
+ rl.close();
119
+ resolve(answer.trim().toLowerCase() === 'y');
120
+ });
121
+ });
122
+ if (!confirmed) {
123
+ console.log(`${spinner_1.colors.muted('Cancelled.')}`);
124
+ console.log('');
125
+ return;
126
+ }
127
+ }
128
+ const spinner = (0, spinner_1.createSpinner)();
129
+ try {
130
+ spinner.start(`Resetting to ${(0, repo_manager_1.shortHash)(targetHash)}...`);
131
+ const commitPath = path.join(projectRoot, '.relq', 'commits', `${targetHash}.json`);
132
+ if (!fs.existsSync(commitPath)) {
133
+ spinner.fail('Cannot find commit data');
134
+ return;
135
+ }
136
+ const commitData = JSON.parse(fs.readFileSync(commitPath, 'utf-8'));
137
+ const targetSnapshot = commitData.snapshot;
138
+ if (!targetSnapshot) {
139
+ spinner.fail('Commit has no snapshot data');
140
+ return;
141
+ }
142
+ if (hard) {
143
+ (0, repo_manager_1.saveSnapshot)(targetSnapshot, projectRoot);
144
+ (0, repo_manager_1.setHead)(targetHash, projectRoot);
145
+ const stagedPath = path.join(projectRoot, '.relq', 'staged.json');
146
+ const unstagedPath = path.join(projectRoot, '.relq', 'unstaged.json');
147
+ if (fs.existsSync(stagedPath))
148
+ fs.unlinkSync(stagedPath);
149
+ if (fs.existsSync(unstagedPath))
150
+ fs.unlinkSync(unstagedPath);
151
+ const mergeStatePath = path.join(projectRoot, '.relq', 'MERGE_STATE');
152
+ if (fs.existsSync(mergeStatePath))
153
+ fs.unlinkSync(mergeStatePath);
154
+ }
155
+ spinner.succeed(`Reset to ${spinner_1.colors.yellow((0, repo_manager_1.shortHash)(targetHash))}`);
156
+ console.log('');
157
+ console.log(`HEAD is now at ${spinner_1.colors.yellow((0, repo_manager_1.shortHash)(targetHash))} ${targetCommit.message}`);
158
+ console.log('');
159
+ if (soft) {
160
+ console.log(`${spinner_1.colors.muted('Changes are unstaged. Use')} ${spinner_1.colors.cyan('relq status')} ${spinner_1.colors.muted('to see.')}`);
161
+ }
162
+ }
163
+ catch (error) {
164
+ spinner.fail('Reset failed');
165
+ console.error(spinner_1.colors.red(`Error: ${error instanceof Error ? error.message : error}`));
166
+ process.exit(1);
167
+ }
168
+ }
169
+ exports.default = resetCommand;
@@ -0,0 +1,193 @@
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 } = context;
43
+ const projectRoot = process.cwd();
44
+ console.log('');
45
+ if (!(0, repo_manager_1.isInitialized)(projectRoot)) {
46
+ console.log(`${spinner_1.colors.red('fatal:')} not a relq repository`);
47
+ return;
48
+ }
49
+ const mergeStatePath = path.join(projectRoot, '.relq', 'MERGE_STATE');
50
+ if (!fs.existsSync(mergeStatePath)) {
51
+ console.log(`${spinner_1.colors.green('✓')} No conflicts to resolve`);
52
+ console.log('');
53
+ return;
54
+ }
55
+ const mergeState = JSON.parse(fs.readFileSync(mergeStatePath, 'utf-8'));
56
+ if (mergeState.conflicts.length === 0) {
57
+ fs.unlinkSync(mergeStatePath);
58
+ console.log(`${spinner_1.colors.green('✓')} All conflicts resolved`);
59
+ console.log('');
60
+ return;
61
+ }
62
+ const allTheirs = flags['all-theirs'] === true;
63
+ const allOurs = flags['all-ours'] === true;
64
+ const theirs = flags['theirs'] === true;
65
+ const ours = flags['ours'] === true;
66
+ const objectName = args[0];
67
+ if (allTheirs) {
68
+ console.log(`Resolving ${mergeState.conflicts.length} conflict(s) with --all-theirs`);
69
+ console.log('');
70
+ (0, repo_manager_1.saveSnapshot)(mergeState.remoteSnapshot, projectRoot);
71
+ fs.unlinkSync(mergeStatePath);
72
+ console.log(`${spinner_1.colors.green('✓')} Applied remote versions for all conflicts`);
73
+ console.log('');
74
+ console.log(`${spinner_1.colors.muted('Run')} ${spinner_1.colors.cyan('relq commit -m "Merge remote changes"')} ${spinner_1.colors.muted('to complete.')}`);
75
+ console.log('');
76
+ return;
77
+ }
78
+ if (allOurs) {
79
+ console.log(`Resolving ${mergeState.conflicts.length} conflict(s) with --all-ours`);
80
+ console.log('');
81
+ fs.unlinkSync(mergeStatePath);
82
+ console.log(`${spinner_1.colors.green('✓')} Kept local versions for all conflicts`);
83
+ console.log('');
84
+ console.log(`${spinner_1.colors.muted('Run')} ${spinner_1.colors.cyan('relq commit -m "Keep local changes"')} ${spinner_1.colors.muted('to complete.')}`);
85
+ console.log('');
86
+ return;
87
+ }
88
+ if ((theirs || ours) && objectName) {
89
+ const conflict = mergeState.conflicts.find(c => c.objectName === objectName ||
90
+ `${c.parentName}.${c.objectName}` === objectName);
91
+ if (!conflict) {
92
+ console.log(`${spinner_1.colors.red('error:')} No conflict found for '${objectName}'`);
93
+ console.log('');
94
+ console.log('Conflicts:');
95
+ for (const c of mergeState.conflicts) {
96
+ const name = c.parentName ? `${c.parentName}.${c.objectName}` : c.objectName;
97
+ console.log(` ${c.objectType}: ${name}`);
98
+ }
99
+ console.log('');
100
+ return;
101
+ }
102
+ const localSnapshot = (0, repo_manager_1.loadSnapshot)(projectRoot);
103
+ if (!localSnapshot) {
104
+ console.log(`${spinner_1.colors.red('error:')} No local snapshot found`);
105
+ return;
106
+ }
107
+ if (theirs) {
108
+ applyResolution(localSnapshot, conflict, mergeState.remoteSnapshot, 'theirs');
109
+ (0, repo_manager_1.saveSnapshot)(localSnapshot, projectRoot);
110
+ }
111
+ mergeState.conflicts = mergeState.conflicts.filter(c => c !== conflict);
112
+ if (mergeState.conflicts.length === 0) {
113
+ fs.unlinkSync(mergeStatePath);
114
+ console.log(`${spinner_1.colors.green('✓')} All conflicts resolved`);
115
+ }
116
+ else {
117
+ fs.writeFileSync(mergeStatePath, JSON.stringify(mergeState, null, 2));
118
+ console.log(`${spinner_1.colors.green('✓')} Resolved: ${conflict.objectType} ${objectName}`);
119
+ console.log(`${spinner_1.colors.yellow(String(mergeState.conflicts.length))} conflict(s) remaining`);
120
+ }
121
+ console.log('');
122
+ return;
123
+ }
124
+ console.log(`${spinner_1.colors.yellow('⚠')} You have ${mergeState.conflicts.length} unresolved conflict(s):`);
125
+ console.log('');
126
+ for (const conflict of mergeState.conflicts) {
127
+ const name = conflict.parentName
128
+ ? `${conflict.parentName}.${conflict.objectName}`
129
+ : conflict.objectName;
130
+ console.log(` ${spinner_1.colors.red('conflict:')} ${conflict.objectType.toLowerCase()} ${spinner_1.colors.bold(name)}`);
131
+ console.log(` ${spinner_1.colors.muted(conflict.description)}`);
132
+ }
133
+ console.log('');
134
+ console.log('To resolve:');
135
+ console.log(` ${spinner_1.colors.cyan('relq resolve --theirs <name>')} Take remote version`);
136
+ console.log(` ${spinner_1.colors.cyan('relq resolve --ours <name>')} Keep local version`);
137
+ console.log(` ${spinner_1.colors.cyan('relq resolve --all-theirs')} Take all remote`);
138
+ console.log(` ${spinner_1.colors.cyan('relq resolve --all-ours')} Keep all local`);
139
+ console.log('');
140
+ }
141
+ function applyResolution(local, conflict, remote, resolution) {
142
+ if (resolution !== 'theirs')
143
+ return;
144
+ switch (conflict.objectType) {
145
+ case 'TABLE': {
146
+ const remoteTable = remote.tables.find(t => t.name === conflict.objectName);
147
+ const localIdx = local.tables.findIndex(t => t.name === conflict.objectName);
148
+ if (remoteTable) {
149
+ if (localIdx >= 0) {
150
+ local.tables[localIdx] = remoteTable;
151
+ }
152
+ else {
153
+ local.tables.push(remoteTable);
154
+ }
155
+ }
156
+ break;
157
+ }
158
+ case 'COLUMN': {
159
+ const [tableName, colName] = conflict.objectName.includes('.')
160
+ ? conflict.objectName.split('.')
161
+ : [conflict.parentName, conflict.objectName];
162
+ const remoteTable = remote.tables.find(t => t.name === tableName);
163
+ const localTable = local.tables.find(t => t.name === tableName);
164
+ if (remoteTable && localTable) {
165
+ const remoteCol = remoteTable.columns.find(c => c.name === colName);
166
+ const localIdx = localTable.columns.findIndex(c => c.name === colName);
167
+ if (remoteCol) {
168
+ if (localIdx >= 0) {
169
+ localTable.columns[localIdx] = remoteCol;
170
+ }
171
+ else {
172
+ localTable.columns.push(remoteCol);
173
+ }
174
+ }
175
+ }
176
+ break;
177
+ }
178
+ case 'ENUM': {
179
+ const remoteEnum = remote.enums.find(e => e.name === conflict.objectName);
180
+ const localIdx = local.enums.findIndex(e => e.name === conflict.objectName);
181
+ if (remoteEnum) {
182
+ if (localIdx >= 0) {
183
+ local.enums[localIdx] = remoteEnum;
184
+ }
185
+ else {
186
+ local.enums.push(remoteEnum);
187
+ }
188
+ }
189
+ break;
190
+ }
191
+ }
192
+ }
193
+ exports.default = resolveCommand;
@@ -85,7 +85,7 @@ async function rollbackCommand(context) {
85
85
  console.log(` Connection: ${(0, env_loader_1.getConnectionDescription)(connection)}`);
86
86
  console.log('');
87
87
  try {
88
- const { Pool } = await Promise.resolve().then(() => __importStar(require("../../../addons/pg.js")));
88
+ const { Pool } = await Promise.resolve().then(() => __importStar(require("../../addon/pg/index.cjs")));
89
89
  const pool = new Pool({
90
90
  host: connection.host,
91
91
  port: connection.port || 5432,
@@ -0,0 +1,154 @@
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 } = context;
43
+ const projectRoot = process.cwd();
44
+ const subcommand = args[0] || 'push';
45
+ console.log('');
46
+ if (!(0, repo_manager_1.isInitialized)(projectRoot)) {
47
+ console.log(`${spinner_1.colors.red('fatal:')} not a relq repository`);
48
+ return;
49
+ }
50
+ const stashDir = path.join(projectRoot, '.relq', 'stash');
51
+ switch (subcommand) {
52
+ case 'push':
53
+ case 'save':
54
+ await stashPush(projectRoot, stashDir, flags['m'] || 'WIP');
55
+ break;
56
+ case 'pop':
57
+ await stashPop(projectRoot, stashDir);
58
+ break;
59
+ case 'list':
60
+ await stashList(stashDir);
61
+ break;
62
+ case 'drop':
63
+ await stashDrop(stashDir);
64
+ break;
65
+ default:
66
+ await stashPush(projectRoot, stashDir, subcommand);
67
+ }
68
+ }
69
+ async function stashPush(projectRoot, stashDir, message) {
70
+ const staged = (0, repo_manager_1.getStagedChanges)(projectRoot);
71
+ const unstaged = (0, repo_manager_1.getUnstagedChanges)(projectRoot);
72
+ if (staged.length === 0 && unstaged.length === 0) {
73
+ console.log(`${spinner_1.colors.muted('No changes to stash.')}`);
74
+ console.log('');
75
+ return;
76
+ }
77
+ if (!fs.existsSync(stashDir)) {
78
+ fs.mkdirSync(stashDir, { recursive: true });
79
+ }
80
+ const stashFiles = fs.readdirSync(stashDir).filter(f => f.endsWith('.json'));
81
+ const stashIdx = stashFiles.length;
82
+ const stash = {
83
+ message,
84
+ timestamp: new Date().toISOString(),
85
+ staged,
86
+ unstaged,
87
+ };
88
+ fs.writeFileSync(path.join(stashDir, `stash-${stashIdx}.json`), JSON.stringify(stash, null, 2));
89
+ const stagedPath = path.join(projectRoot, '.relq', 'staged.json');
90
+ const unstagedPath = path.join(projectRoot, '.relq', 'unstaged.json');
91
+ if (fs.existsSync(stagedPath))
92
+ fs.writeFileSync(stagedPath, '[]');
93
+ if (fs.existsSync(unstagedPath))
94
+ fs.writeFileSync(unstagedPath, '[]');
95
+ console.log(`${spinner_1.colors.green('✓')} Saved working directory`);
96
+ console.log(` stash@{${stashIdx}}: ${message}`);
97
+ console.log('');
98
+ }
99
+ async function stashPop(projectRoot, stashDir) {
100
+ if (!fs.existsSync(stashDir)) {
101
+ console.log(`${spinner_1.colors.muted('No stashes found.')}`);
102
+ return;
103
+ }
104
+ const stashFiles = fs.readdirSync(stashDir).filter(f => f.endsWith('.json')).sort().reverse();
105
+ if (stashFiles.length === 0) {
106
+ console.log(`${spinner_1.colors.muted('No stashes found.')}`);
107
+ return;
108
+ }
109
+ const stashPath = path.join(stashDir, stashFiles[0]);
110
+ const stash = JSON.parse(fs.readFileSync(stashPath, 'utf-8'));
111
+ const stagedPath = path.join(projectRoot, '.relq', 'staged.json');
112
+ const unstagedPath = path.join(projectRoot, '.relq', 'unstaged.json');
113
+ if (stash.staged.length > 0) {
114
+ fs.writeFileSync(stagedPath, JSON.stringify(stash.staged, null, 2));
115
+ }
116
+ if (stash.unstaged.length > 0) {
117
+ fs.writeFileSync(unstagedPath, JSON.stringify(stash.unstaged, null, 2));
118
+ }
119
+ fs.unlinkSync(stashPath);
120
+ console.log(`${spinner_1.colors.green('✓')} Applied stash and dropped`);
121
+ console.log(` ${stash.message}`);
122
+ console.log('');
123
+ }
124
+ async function stashList(stashDir) {
125
+ if (!fs.existsSync(stashDir)) {
126
+ console.log(`${spinner_1.colors.muted('No stashes.')}`);
127
+ return;
128
+ }
129
+ const stashFiles = fs.readdirSync(stashDir).filter(f => f.endsWith('.json')).sort();
130
+ if (stashFiles.length === 0) {
131
+ console.log(`${spinner_1.colors.muted('No stashes.')}`);
132
+ return;
133
+ }
134
+ for (let i = 0; i < stashFiles.length; i++) {
135
+ const stash = JSON.parse(fs.readFileSync(path.join(stashDir, stashFiles[i]), 'utf-8'));
136
+ console.log(`stash@{${i}}: ${stash.message} (${stash.staged.length + stash.unstaged.length} changes)`);
137
+ }
138
+ console.log('');
139
+ }
140
+ async function stashDrop(stashDir) {
141
+ if (!fs.existsSync(stashDir)) {
142
+ console.log(`${spinner_1.colors.muted('No stashes.')}`);
143
+ return;
144
+ }
145
+ const stashFiles = fs.readdirSync(stashDir).filter(f => f.endsWith('.json')).sort().reverse();
146
+ if (stashFiles.length === 0) {
147
+ console.log(`${spinner_1.colors.muted('No stashes.')}`);
148
+ return;
149
+ }
150
+ fs.unlinkSync(path.join(stashDir, stashFiles[0]));
151
+ console.log(`${spinner_1.colors.green('✓')} Dropped stash`);
152
+ console.log('');
153
+ }
154
+ exports.default = stashCommand;
@@ -1,8 +1,44 @@
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
44
  const { config, flags } = context;
@@ -48,6 +84,18 @@ async function statusCommand(context) {
48
84
  displayChanges(unstaged, ' ');
49
85
  console.log('');
50
86
  }
87
+ const ignorePatterns = (0, relqignore_1.loadRelqignore)(projectRoot);
88
+ const relqignorePath = path.join(projectRoot, '.relqignore');
89
+ if (ignorePatterns.length > 0 && fs.existsSync(relqignorePath)) {
90
+ const userPatterns = ignorePatterns.filter(p => !p.raw.startsWith('_relq_') &&
91
+ !p.raw.startsWith('pg_') &&
92
+ !p.raw.startsWith('_temp_') &&
93
+ !p.raw.startsWith('tmp_'));
94
+ if (userPatterns.length > 0) {
95
+ console.log(`${spinner_1.colors.muted(`ℹ ${userPatterns.length} pattern(s) active from .relqignore`)}`);
96
+ console.log('');
97
+ }
98
+ }
51
99
  if (staged.length === 0 && unstaged.length === 0) {
52
100
  console.log(`${spinner_1.colors.green('nothing to commit, working tree clean')}`);
53
101
  console.log('');