wgc 0.31.0 → 0.32.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/.eslintrc +4 -1
- package/CHANGELOG.md +10 -0
- package/dist/commands/operations/commands/push.d.ts +2 -1
- package/dist/commands/operations/commands/push.js +70 -17
- package/dist/commands/operations/commands/push.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +6 -5
- package/src/commands/operations/commands/push.ts +90 -24
- package/test/check-federated-graph.test.ts +2 -2
- package/test/check-schema.test.ts +2 -2
- package/test/create-subgraph.test.ts +2 -2
- package/test/parse-operations.test.ts +21 -14
- package/test/publish-schema.test.ts +2 -2
- package/test/testdata/relay-persisted.json +4 -0
package/.eslintrc
CHANGED
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,16 @@ Binaries are attached to the github release otherwise all images can be found [h
|
|
|
4
4
|
All notable changes to this project will be documented in this file.
|
|
5
5
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
6
6
|
|
|
7
|
+
# [0.32.0](https://github.com/wundergraph/cosmo/compare/wgc@0.31.1...wgc@0.32.0) (2023-11-29)
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
* accept custom operation IDs for persisted operations ([#302](https://github.com/wundergraph/cosmo/issues/302)) ([a535a62](https://github.com/wundergraph/cosmo/commit/a535a62bb7f70d2e58d1a04066fb74e78d932653)) (@fiam)
|
|
12
|
+
|
|
13
|
+
## [0.31.1](https://github.com/wundergraph/cosmo/compare/wgc@0.31.0...wgc@0.31.1) (2023-11-28)
|
|
14
|
+
|
|
15
|
+
**Note:** Version bump only for package wgc
|
|
16
|
+
|
|
7
17
|
# [0.31.0](https://github.com/wundergraph/cosmo/compare/wgc@0.30.1...wgc@0.31.0) (2023-11-24)
|
|
8
18
|
|
|
9
19
|
### Features
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
|
+
import { PersistedOperation } from '@wundergraph/cosmo-connect/dist/platform/v1/platform_pb';
|
|
2
3
|
import { BaseCommandOptions } from '../../../core/types/types.js';
|
|
3
|
-
export declare const parseOperations: (contents: string) =>
|
|
4
|
+
export declare const parseOperations: (contents: string) => PersistedOperation[];
|
|
4
5
|
declare const _default: (opts: BaseCommandOptions) => Command;
|
|
5
6
|
export default _default;
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
import crypto from 'node:crypto';
|
|
1
2
|
import { readFile } from 'node:fs/promises';
|
|
2
3
|
import { Command } from 'commander';
|
|
3
4
|
import pc from 'picocolors';
|
|
4
5
|
import { EnumStatusCode } from '@wundergraph/cosmo-connect/dist/common/common_pb';
|
|
5
|
-
import { PublishedOperationStatus } from '@wundergraph/cosmo-connect/dist/platform/v1/platform_pb';
|
|
6
|
+
import { PublishedOperationStatus, PersistedOperation } from '@wundergraph/cosmo-connect/dist/platform/v1/platform_pb';
|
|
6
7
|
import { baseHeaders } from '../../../core/config.js';
|
|
7
8
|
const collect = (value, previous) => {
|
|
8
9
|
return [...previous, value];
|
|
@@ -12,22 +13,65 @@ const parseApolloPersistedQueryManifest = (data) => {
|
|
|
12
13
|
if (data.version !== 1) {
|
|
13
14
|
throw new Error(`unknown Apollo persisted query manifest version ${data.version}`);
|
|
14
15
|
}
|
|
15
|
-
return (_b = (_a = data.operations) === null || _a === void 0 ? void 0 : _a.
|
|
16
|
+
return ((_b = (_a = data.operations) === null || _a === void 0 ? void 0 : _a.filter((op) => op.id && op.body).map((op) => new PersistedOperation({ id: op.id, contents: op.body }))) !== null && _b !== void 0 ? _b : []);
|
|
16
17
|
};
|
|
17
|
-
const
|
|
18
|
-
if (data.format === 'apollo-persisted-query-manifest') {
|
|
19
|
-
return parseApolloPersistedQueryManifest(data);
|
|
20
|
-
}
|
|
18
|
+
const isRelayQueryMap = (data) => {
|
|
21
19
|
// Check if all elements are 2-element arrays of strings. In that case
|
|
22
20
|
// the data is a relay query map
|
|
23
|
-
|
|
21
|
+
return (Array.isArray(data) &&
|
|
24
22
|
data.length ===
|
|
25
23
|
data.filter((x) => Array.isArray(x) && x.length === 2 && typeof x[0] === 'string' && typeof x[1] === 'string')
|
|
26
|
-
.length)
|
|
27
|
-
|
|
24
|
+
.length);
|
|
25
|
+
};
|
|
26
|
+
const parseRelayQueryMap = (data) => {
|
|
27
|
+
return data.map((x) => new PersistedOperation({ id: x[0], contents: x[1] }));
|
|
28
|
+
};
|
|
29
|
+
const isRelayQueryObject = (data) => {
|
|
30
|
+
return Object.keys(data).every((key) => typeof key === 'string' && typeof data[key] === 'string');
|
|
31
|
+
};
|
|
32
|
+
const parseRelayQueryObject = (data) => {
|
|
33
|
+
return Object.keys(data).map((key) => new PersistedOperation({ id: key, contents: data[key] }));
|
|
34
|
+
};
|
|
35
|
+
const parseOperationsJson = (data) => {
|
|
36
|
+
if (data.format === 'apollo-persisted-query-manifest') {
|
|
37
|
+
return parseApolloPersistedQueryManifest(data);
|
|
38
|
+
}
|
|
39
|
+
if (isRelayQueryMap(data)) {
|
|
40
|
+
return parseRelayQueryMap(data);
|
|
41
|
+
}
|
|
42
|
+
if (isRelayQueryObject(data)) {
|
|
43
|
+
return parseRelayQueryObject(data);
|
|
28
44
|
}
|
|
29
45
|
throw new Error(`unknown data format`);
|
|
30
46
|
};
|
|
47
|
+
const humanReadableOperationStatus = (status) => {
|
|
48
|
+
switch (status) {
|
|
49
|
+
case PublishedOperationStatus.CREATED: {
|
|
50
|
+
return 'created';
|
|
51
|
+
}
|
|
52
|
+
case PublishedOperationStatus.UP_TO_DATE: {
|
|
53
|
+
return 'up to date';
|
|
54
|
+
}
|
|
55
|
+
case PublishedOperationStatus.CONFLICT: {
|
|
56
|
+
return 'conflict';
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
throw new Error('unknown operation status');
|
|
60
|
+
};
|
|
61
|
+
const jsonOperationStatus = (status) => {
|
|
62
|
+
switch (status) {
|
|
63
|
+
case PublishedOperationStatus.CREATED: {
|
|
64
|
+
return 'created';
|
|
65
|
+
}
|
|
66
|
+
case PublishedOperationStatus.UP_TO_DATE: {
|
|
67
|
+
return 'up_to_date';
|
|
68
|
+
}
|
|
69
|
+
case PublishedOperationStatus.CONFLICT: {
|
|
70
|
+
return 'conflict';
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
throw new Error('unknown operation status');
|
|
74
|
+
};
|
|
31
75
|
export const parseOperations = (contents) => {
|
|
32
76
|
let data;
|
|
33
77
|
try {
|
|
@@ -35,7 +79,8 @@ export const parseOperations = (contents) => {
|
|
|
35
79
|
}
|
|
36
80
|
catch {
|
|
37
81
|
// Assume it's plain graphql
|
|
38
|
-
|
|
82
|
+
const id = crypto.createHash('sha256').update(contents).digest('hex');
|
|
83
|
+
return [new PersistedOperation({ id, contents })];
|
|
39
84
|
}
|
|
40
85
|
return parseOperationsJson(data);
|
|
41
86
|
};
|
|
@@ -46,9 +91,10 @@ export default (opts) => {
|
|
|
46
91
|
command.requiredOption('-c, --client <client-name>', 'The client identifier to register the operations to');
|
|
47
92
|
command.requiredOption('-f, --file <file>', 'The file with the operations to push - supports .graphql, .gql and .json manifests from Apollo and Relay', collect, []);
|
|
48
93
|
command.option('-q, --quiet', 'Do not print any output', false);
|
|
94
|
+
command.option('--allow-conflicts', 'Exit with success even if there are conflicts', false);
|
|
49
95
|
command.option('--format <output-format>', 'Output format: supported ones are text and json', 'text');
|
|
50
96
|
command.action(async (name, options) => {
|
|
51
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
|
97
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
|
|
52
98
|
if (options.file.length === 0) {
|
|
53
99
|
command.error(pc.red('No files provided'));
|
|
54
100
|
}
|
|
@@ -74,22 +120,29 @@ export default (opts) => {
|
|
|
74
120
|
switch (options.format) {
|
|
75
121
|
case 'text': {
|
|
76
122
|
for (const op of result.operations) {
|
|
77
|
-
console.log(pc.green(`pushed operation ${op.hash} (${op.status
|
|
123
|
+
console.log(pc.green(`pushed operation ${op.id} (${op.hash}) (${humanReadableOperationStatus(op.status)})`));
|
|
78
124
|
}
|
|
79
125
|
const upToDate = ((_c = (_b = result.operations) === null || _b === void 0 ? void 0 : _b.filter((op) => op.status === PublishedOperationStatus.UP_TO_DATE)) !== null && _c !== void 0 ? _c : [])
|
|
80
126
|
.length;
|
|
81
127
|
const created = ((_e = (_d = result.operations) === null || _d === void 0 ? void 0 : _d.filter((op) => op.status === PublishedOperationStatus.CREATED)) !== null && _e !== void 0 ? _e : [])
|
|
82
128
|
.length;
|
|
83
|
-
|
|
129
|
+
const conflict = ((_g = (_f = result.operations) === null || _f === void 0 ? void 0 : _f.filter((op) => op.status === PublishedOperationStatus.CONFLICT)) !== null && _g !== void 0 ? _g : [])
|
|
130
|
+
.length;
|
|
131
|
+
const color = conflict === 0 ? pc.green : pc.yellow;
|
|
132
|
+
console.log(color(`pushed ${(_j = (_h = result.operations) === null || _h === void 0 ? void 0 : _h.length) !== null && _j !== void 0 ? _j : 0} operations: ${created} created, ${upToDate} up to date, ${conflict} conflicts`));
|
|
133
|
+
if (conflict > 0 && !options.allowConflicts) {
|
|
134
|
+
command.error(pc.red('conflicts detected'));
|
|
135
|
+
}
|
|
84
136
|
break;
|
|
85
137
|
}
|
|
86
138
|
case 'json': {
|
|
87
139
|
const returnedOperations = {};
|
|
88
140
|
for (let ii = 0; ii < result.operations.length; ii++) {
|
|
89
141
|
const op = result.operations[ii];
|
|
90
|
-
returnedOperations[op.
|
|
91
|
-
|
|
92
|
-
|
|
142
|
+
returnedOperations[op.id] = {
|
|
143
|
+
hash: op.hash,
|
|
144
|
+
contents: operations[ii].contents,
|
|
145
|
+
status: jsonOperationStatus(op.status),
|
|
93
146
|
};
|
|
94
147
|
}
|
|
95
148
|
console.log(JSON.stringify(returnedOperations, null, 2));
|
|
@@ -98,7 +151,7 @@ export default (opts) => {
|
|
|
98
151
|
}
|
|
99
152
|
}
|
|
100
153
|
else {
|
|
101
|
-
command.error(pc.red(`could not push operations: ${(
|
|
154
|
+
command.error(pc.red(`could not push operations: ${(_l = (_k = result.response) === null || _k === void 0 ? void 0 : _k.details) !== null && _l !== void 0 ? _l : 'unknown error'}`));
|
|
102
155
|
}
|
|
103
156
|
});
|
|
104
157
|
return command;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"push.js","sourceRoot":"","sources":["../../../../src/commands/operations/commands/push.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,OAAO,EAAE,cAAc,EAAE,MAAM,kDAAkD,CAAC;AAClF,OAAO,EAAE,wBAAwB,EAAE,MAAM,yDAAyD,CAAC;
|
|
1
|
+
{"version":3,"file":"push.js","sourceRoot":"","sources":["../../../../src/commands/operations/commands/push.ts"],"names":[],"mappings":"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"}
|