@prairielearn/postgres-tools 1.0.1 → 1.1.0
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/CHANGELOG.md +6 -0
- package/dist/diff.js +10 -22
- package/dist/diff.js.map +1 -1
- package/package.json +1 -1
- package/src/diff.ts +17 -26
package/CHANGELOG.md
CHANGED
package/dist/diff.js
CHANGED
|
@@ -48,32 +48,20 @@ async function diff(db1, db2, options) {
|
|
|
48
48
|
// Determine if the columns of any table differ
|
|
49
49
|
const intersection = lodash_1.default.intersection(lodash_1.default.keys(description1.tables), lodash_1.default.keys(description2.tables));
|
|
50
50
|
lodash_1.default.forEach(intersection, (table) => {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
if (diff.length === 1)
|
|
51
|
+
const patch = (0, diff_1.structuredPatch)(`tables/${table}`, `tables/${table}`, description1.tables[table], description2.tables[table]);
|
|
52
|
+
if (patch.hunks.length === 0)
|
|
54
53
|
return;
|
|
55
54
|
const boldTable = formatText(table, chalk_1.default.bold);
|
|
56
55
|
result += formatText(`Differences in ${boldTable} table\n`, chalk_1.default.underline);
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
if (prev[prev.length - 1] === '\n') {
|
|
61
|
-
diff[i - 1].value = prev.slice(0, -1);
|
|
62
|
-
diff[i].value = '\n' + diff[i].value;
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
lodash_1.default.forEach(diff, (part, index) => {
|
|
66
|
-
if (index === 0) {
|
|
67
|
-
part.value = '\n' + part.value;
|
|
68
|
-
}
|
|
69
|
-
const mark = part.added ? '+ ' : part.removed ? '- ' : ' ';
|
|
70
|
-
let change = part.value.split('\n').join(`\n${mark}`);
|
|
71
|
-
if (index === 0) {
|
|
72
|
-
change = change.slice(1, change.length);
|
|
73
|
-
}
|
|
74
|
-
if (part.added || part.removed) {
|
|
75
|
-
result += formatText(change, part.added ? chalk_1.default.green : part.removed ? chalk_1.default.red : null);
|
|
56
|
+
patch.hunks.forEach((hunk, index) => {
|
|
57
|
+
if (index !== 0) {
|
|
58
|
+
result += formatText('...\n', chalk_1.default.gray);
|
|
76
59
|
}
|
|
60
|
+
hunk.lines.forEach((line) => {
|
|
61
|
+
const color = line[0] === '+' ? chalk_1.default.green : line[0] === '-' ? chalk_1.default.red : null;
|
|
62
|
+
result += formatText(line, color);
|
|
63
|
+
result += '\n';
|
|
64
|
+
});
|
|
77
65
|
});
|
|
78
66
|
result += '\n\n';
|
|
79
67
|
});
|
package/dist/diff.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diff.js","sourceRoot":"","sources":["../src/diff.ts"],"names":[],"mappings":";;;;;;AAAA,YAAY;AACZ,wDAA0B;AAC1B,0DAA6B;AAC7B,kDAA0B;AAC1B,oDAAuB;AACvB,+
|
|
1
|
+
{"version":3,"file":"diff.js","sourceRoot":"","sources":["../src/diff.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/diff.ts
CHANGED
|
@@ -3,7 +3,7 @@ import fs from 'fs-extra';
|
|
|
3
3
|
import path from 'node:path';
|
|
4
4
|
import chalk from 'chalk';
|
|
5
5
|
import _ from 'lodash';
|
|
6
|
-
import {
|
|
6
|
+
import { structuredPatch } from 'diff';
|
|
7
7
|
|
|
8
8
|
import { describeDatabase, formatDatabaseDescription } from './describe';
|
|
9
9
|
|
|
@@ -75,38 +75,29 @@ async function diff(db1: DiffTarget, db2: DiffTarget, options: DiffOptions): Pro
|
|
|
75
75
|
// Determine if the columns of any table differ
|
|
76
76
|
const intersection = _.intersection(_.keys(description1.tables), _.keys(description2.tables));
|
|
77
77
|
_.forEach(intersection, (table) => {
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
78
|
+
const patch = structuredPatch(
|
|
79
|
+
`tables/${table}`,
|
|
80
|
+
`tables/${table}`,
|
|
81
|
+
description1.tables[table],
|
|
82
|
+
description2.tables[table]
|
|
82
83
|
);
|
|
83
|
-
|
|
84
|
+
|
|
85
|
+
if (patch.hunks.length === 0) return;
|
|
84
86
|
|
|
85
87
|
const boldTable = formatText(table, chalk.bold);
|
|
86
88
|
result += formatText(`Differences in ${boldTable} table\n`, chalk.underline);
|
|
87
89
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
if (prev[prev.length - 1] === '\n') {
|
|
92
|
-
diff[i - 1].value = prev.slice(0, -1);
|
|
93
|
-
diff[i].value = '\n' + diff[i].value;
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
_.forEach(diff, (part, index) => {
|
|
98
|
-
if (index === 0) {
|
|
99
|
-
part.value = '\n' + part.value;
|
|
100
|
-
}
|
|
101
|
-
const mark = part.added ? '+ ' : part.removed ? '- ' : ' ';
|
|
102
|
-
let change = part.value.split('\n').join(`\n${mark}`);
|
|
103
|
-
if (index === 0) {
|
|
104
|
-
change = change.slice(1, change.length);
|
|
105
|
-
}
|
|
106
|
-
if (part.added || part.removed) {
|
|
107
|
-
result += formatText(change, part.added ? chalk.green : part.removed ? chalk.red : null);
|
|
90
|
+
patch.hunks.forEach((hunk, index) => {
|
|
91
|
+
if (index !== 0) {
|
|
92
|
+
result += formatText('...\n', chalk.gray);
|
|
108
93
|
}
|
|
94
|
+
hunk.lines.forEach((line) => {
|
|
95
|
+
const color = line[0] === '+' ? chalk.green : line[0] === '-' ? chalk.red : null;
|
|
96
|
+
result += formatText(line, color);
|
|
97
|
+
result += '\n';
|
|
98
|
+
});
|
|
109
99
|
});
|
|
100
|
+
|
|
110
101
|
result += '\n\n';
|
|
111
102
|
});
|
|
112
103
|
|