wgc 0.77.2 → 0.78.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.
Files changed (29) hide show
  1. package/dist/package.json +1 -1
  2. package/dist/src/commands/index.js +4 -0
  3. package/dist/src/commands/index.js.map +1 -1
  4. package/dist/src/commands/mcp/tools/subgraph-verify-schema-changes.js +6 -3
  5. package/dist/src/commands/mcp/tools/subgraph-verify-schema-changes.js.map +1 -1
  6. package/dist/src/commands/proposal/commands/create.d.ts +4 -0
  7. package/dist/src/commands/proposal/commands/create.js +64 -0
  8. package/dist/src/commands/proposal/commands/create.js.map +1 -0
  9. package/dist/src/commands/proposal/commands/update.d.ts +4 -0
  10. package/dist/src/commands/proposal/commands/update.js +69 -0
  11. package/dist/src/commands/proposal/commands/update.js.map +1 -0
  12. package/dist/src/commands/proposal/index.d.ts +4 -0
  13. package/dist/src/commands/proposal/index.js +15 -0
  14. package/dist/src/commands/proposal/index.js.map +1 -0
  15. package/dist/src/commands/proposal/utils.d.ts +12 -0
  16. package/dist/src/commands/proposal/utils.js +90 -0
  17. package/dist/src/commands/proposal/utils.js.map +1 -0
  18. package/dist/src/commands/subgraph/commands/delete.js +10 -0
  19. package/dist/src/commands/subgraph/commands/delete.js.map +1 -1
  20. package/dist/src/commands/subgraph/commands/publish.js +14 -0
  21. package/dist/src/commands/subgraph/commands/publish.js.map +1 -1
  22. package/dist/src/handle-check-result.d.ts +1 -1
  23. package/dist/src/handle-check-result.js +12 -0
  24. package/dist/src/handle-check-result.js.map +1 -1
  25. package/dist/src/handle-proposal-result.d.ts +9 -0
  26. package/dist/src/handle-proposal-result.js +219 -0
  27. package/dist/src/handle-proposal-result.js.map +1 -0
  28. package/dist/tsconfig.tsbuildinfo +1 -1
  29. package/package.json +4 -4
@@ -0,0 +1,219 @@
1
+ import { EnumStatusCode } from '@wundergraph/cosmo-connect/dist/common/common_pb';
2
+ import Table from 'cli-table3';
3
+ import logSymbols from 'log-symbols';
4
+ import pc from 'picocolors';
5
+ /**
6
+ * Shared handler for proposal command responses (both create and update).
7
+ * Displays schema changes, composition errors, and other issues.
8
+ */
9
+ export const handleProposalResult = (resp, proposalName, isCreate = false) => {
10
+ var _a, _b, _c, _d, _e, _f;
11
+ const changesTable = new Table({
12
+ head: [
13
+ pc.bold(pc.white('SUBGRAPH_NAME')),
14
+ pc.bold(pc.white('CHANGE')),
15
+ pc.bold(pc.white('TYPE')),
16
+ pc.bold(pc.white('DESCRIPTION')),
17
+ ],
18
+ wordWrap: true,
19
+ });
20
+ const compositionErrorsTable = new Table({
21
+ head: [pc.bold(pc.white('ERROR_MESSAGE'))],
22
+ colWidths: [120],
23
+ wordWrap: true,
24
+ });
25
+ const compositionWarningsTable = new Table({
26
+ head: [pc.bold(pc.white('WARNING_MESSAGE'))],
27
+ colWidths: [120],
28
+ wordWrap: true,
29
+ });
30
+ const lintIssuesTable = new Table({
31
+ head: [
32
+ pc.bold(pc.white('SUBGRAPH_NAME')),
33
+ pc.bold(pc.white('LINT_RULE')),
34
+ pc.bold(pc.white('ERROR_MESSAGE')),
35
+ pc.bold(pc.white('LINE NUMBER')),
36
+ ],
37
+ colAligns: ['left', 'left', 'center'],
38
+ wordWrap: true,
39
+ });
40
+ const graphPruningIssuesTable = new Table({
41
+ head: [
42
+ pc.bold(pc.white('SUBGRAPH_NAME')),
43
+ pc.bold(pc.white('RULE')),
44
+ pc.bold(pc.white('FIELD_PATH')),
45
+ pc.bold(pc.white('MESSAGE')),
46
+ pc.bold(pc.white('LINE NUMBER')),
47
+ ],
48
+ colAligns: ['left', 'left', 'left', 'center'],
49
+ wordWrap: true,
50
+ });
51
+ let success = false;
52
+ let finalStatement = '';
53
+ let successMessage = '';
54
+ let studioCheckUrl = '';
55
+ if (resp.checkUrl) {
56
+ studioCheckUrl = `${pc.bold('Open in studio')}: ${resp.checkUrl}`;
57
+ }
58
+ if (((_a = resp.response) === null || _a === void 0 ? void 0 : _a.code) === EnumStatusCode.OK) {
59
+ successMessage = isCreate
60
+ ? pc.green(`Proposal '${proposalName}' was created successfully.`)
61
+ : pc.green(`Proposal '${proposalName}' was updated successfully.`);
62
+ }
63
+ else {
64
+ return {
65
+ success: false,
66
+ message: ((_b = resp.response) === null || _b === void 0 ? void 0 : _b.details)
67
+ ? pc.red(pc.bold(resp.response.details))
68
+ : pc.red(`Failed to ${isCreate ? 'create' : 'update'} proposal.`),
69
+ };
70
+ }
71
+ // Handle successful response
72
+ if (resp.nonBreakingChanges.length === 0 &&
73
+ resp.breakingChanges.length === 0 &&
74
+ resp.compositionErrors.length === 0 &&
75
+ resp.lintErrors.length === 0 &&
76
+ resp.lintWarnings.length === 0 &&
77
+ resp.graphPruneErrors.length === 0 &&
78
+ resp.graphPruneWarnings.length === 0) {
79
+ console.log(`\nDetected no changes.\nDetected no lint issues.\nDetected no graph pruning issues.\n\n${studioCheckUrl}\n`);
80
+ success = true;
81
+ return { success: true, message: successMessage };
82
+ }
83
+ console.log(`\nChecking the proposed schema`);
84
+ // No operations usage stats mean the check was not performed against any live traffic
85
+ if (resp.operationUsageStats) {
86
+ if (resp.operationUsageStats.totalOperations === 0) {
87
+ // Composition errors are still considered failures, otherwise we can consider this a success
88
+ // because no operations were affected by the change
89
+ success =
90
+ resp.compositionErrors.length === 0 && resp.lintErrors.length === 0 && resp.graphPruneErrors.length === 0;
91
+ console.log(`No operations were affected by this schema change.`);
92
+ finalStatement = `This schema change didn't affect any operations from existing client traffic.`;
93
+ }
94
+ else if (resp.operationUsageStats.totalOperations === resp.operationUsageStats.safeOperations) {
95
+ // This is also a success because changes to these operations were marked as safe
96
+ success =
97
+ resp.compositionErrors.length === 0 && resp.lintErrors.length === 0 && resp.graphPruneErrors.length === 0;
98
+ console.log(`${resp.operationUsageStats.totalOperations} operations were considered safe due to overrides.`);
99
+ finalStatement = `This schema change affected operations with safe overrides.`;
100
+ }
101
+ else {
102
+ // Composition and breaking errors are considered failures because operations were affected by the change
103
+ success =
104
+ resp.breakingChanges.length === 0 &&
105
+ resp.compositionErrors.length === 0 &&
106
+ resp.lintErrors.length === 0 &&
107
+ resp.graphPruneErrors.length === 0;
108
+ const { breakingChanges, operationUsageStats } = resp;
109
+ const { totalOperations, safeOperations, firstSeenAt, lastSeenAt } = operationUsageStats;
110
+ if (breakingChanges.length > 0) {
111
+ const warningMessage = [logSymbols.warning, ` Found ${pc.bold(breakingChanges.length)} breaking changes.`];
112
+ if (totalOperations > 0) {
113
+ warningMessage.push(`${pc.bold(totalOperations - safeOperations)} operations impacted.`);
114
+ }
115
+ if (safeOperations > 0) {
116
+ warningMessage.push(`In addition, ${safeOperations} operations marked safe due to overrides.`);
117
+ }
118
+ console.log(warningMessage.join(''));
119
+ finalStatement = `This check has encountered ${pc.bold(`${breakingChanges.length}`)} breaking changes that would break operations from existing client traffic.`;
120
+ }
121
+ }
122
+ }
123
+ if (resp.nonBreakingChanges.length > 0 || resp.breakingChanges.length > 0) {
124
+ console.log('\nDetected the following changes:');
125
+ if (resp.breakingChanges.length > 0) {
126
+ for (const breakingChange of resp.breakingChanges) {
127
+ changesTable.push([
128
+ breakingChange.subgraphName || '-',
129
+ `${logSymbols.error} ${pc.red('BREAKING')}`,
130
+ breakingChange.changeType,
131
+ breakingChange.message,
132
+ ]);
133
+ }
134
+ }
135
+ if (resp.nonBreakingChanges.length > 0) {
136
+ for (const nonBreakingChange of resp.nonBreakingChanges) {
137
+ changesTable.push([
138
+ nonBreakingChange.subgraphName || '-',
139
+ `${logSymbols.success} NON-BREAKING`,
140
+ nonBreakingChange.changeType,
141
+ nonBreakingChange.message,
142
+ ]);
143
+ }
144
+ }
145
+ console.log(changesTable.toString());
146
+ }
147
+ if (resp.compositionErrors.length > 0) {
148
+ console.log(pc.red('\nDetected composition errors:'));
149
+ for (const compositionError of resp.compositionErrors) {
150
+ compositionErrorsTable.push([compositionError.message]);
151
+ }
152
+ console.log(compositionErrorsTable.toString());
153
+ }
154
+ if (resp.compositionWarnings.length > 0) {
155
+ console.log(pc.yellow(`\nDetected composition warnings:`));
156
+ for (const compositionWarning of resp.compositionWarnings) {
157
+ compositionWarningsTable.push([compositionWarning.message]);
158
+ }
159
+ console.log(compositionWarningsTable.toString());
160
+ }
161
+ if (resp.lintErrors.length > 0 || resp.lintWarnings.length > 0) {
162
+ console.log('\nDetected lint issues:');
163
+ for (const error of resp.lintErrors) {
164
+ lintIssuesTable.push([
165
+ error.subgraphName || '-',
166
+ `${logSymbols.error} ${pc.red(error.lintRuleType)}`,
167
+ error.message,
168
+ (_c = error.issueLocation) === null || _c === void 0 ? void 0 : _c.line,
169
+ ]);
170
+ }
171
+ for (const warning of resp.lintWarnings) {
172
+ lintIssuesTable.push([
173
+ warning.subgraphName || '-',
174
+ `${logSymbols.warning} ${pc.yellow(warning.lintRuleType)}`,
175
+ warning.message,
176
+ (_d = warning.issueLocation) === null || _d === void 0 ? void 0 : _d.line,
177
+ ]);
178
+ }
179
+ console.log(lintIssuesTable.toString());
180
+ }
181
+ if (resp.graphPruneErrors.length > 0 || resp.graphPruneWarnings.length > 0) {
182
+ console.log('\nDetected graph pruning issues:');
183
+ for (const error of resp.graphPruneErrors) {
184
+ graphPruningIssuesTable.push([
185
+ error.subgraphName || '-',
186
+ `${logSymbols.error} ${pc.red(error.graphPruningRuleType)}`,
187
+ error.fieldPath,
188
+ error.message,
189
+ ((_e = error.issueLocation) === null || _e === void 0 ? void 0 : _e.line) || '-',
190
+ ]);
191
+ }
192
+ for (const warning of resp.graphPruneWarnings) {
193
+ graphPruningIssuesTable.push([
194
+ warning.subgraphName || '-',
195
+ `${logSymbols.warning} ${pc.yellow(warning.graphPruningRuleType)}`,
196
+ warning.fieldPath,
197
+ warning.message,
198
+ ((_f = warning.issueLocation) === null || _f === void 0 ? void 0 : _f.line) || '-',
199
+ ]);
200
+ }
201
+ console.log(graphPruningIssuesTable.toString());
202
+ }
203
+ if (success) {
204
+ console.log('\n' +
205
+ logSymbols.success +
206
+ pc.green(` Schema check with the proposed schemas passed. ${finalStatement}`) +
207
+ '\n\n' +
208
+ studioCheckUrl +
209
+ '\n');
210
+ return { success: true, message: successMessage };
211
+ }
212
+ else {
213
+ console.error('\n' +
214
+ logSymbols.error +
215
+ pc.red(` Schema check with the proposed schemas failed. ${finalStatement}\nSee https://cosmo-docs.wundergraph.com/studio/schema-checks for more information on resolving schema check errors.\n${studioCheckUrl}\n`));
216
+ return { success: true, message: successMessage };
217
+ }
218
+ };
219
+ //# sourceMappingURL=handle-proposal-result.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handle-proposal-result.js","sourceRoot":"","sources":["../../src/handle-proposal-result.ts"],"names":[],"mappings":"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"}