Skip to content

Commit 88ed00d

Browse files
committed
Better error messages etc
1 parent e93a477 commit 88ed00d

File tree

4 files changed

+51
-44
lines changed

4 files changed

+51
-44
lines changed

packages/libraries/linkable-specs/README.md

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -37,27 +37,26 @@ type User {
3737
// specs.ts
3838

3939
const exampleSpec = new LinkableSpec('https://specs.graphql-hive.com/example', {
40-
'v0.1': (resolveImportName) => (typeDefs: DocumentNode) => {
41-
const examples: Record<string, string> = {};
42-
const exampleName = resolveImportName('@example');
40+
'v0.1': resolveImportName => (typeDefs: DocumentNode) => {
41+
const examples: Record<string, string> = {}
42+
const exampleName = resolveImportName('@example')
4343
visit(typeDefs, {
4444
FieldDefinition: node => {
45-
const example = node.directives?.find(d => d.name.value === exampleName);
45+
const example = node.directives?.find(d => d.name.value === exampleName)
4646
if (example) {
47-
examples[node.name.value] =
48-
(
49-
example.arguments?.find(a => a.name.value === 'eg')?.value as
50-
| StringValueNode
51-
| undefined
52-
)?.value;
47+
examples[node.name.value] = (
48+
example.arguments?.find(a => a.name.value === 'eg')?.value as
49+
| StringValueNode
50+
| undefined
51+
)?.value
5352
}
54-
},
55-
});
56-
return examples;
57-
},
58-
});
59-
const typeDefs = parse(sdl);
60-
const linkedSpecs = detectLinkedImplementations(typeDefs, [exampleSpec]);
53+
}
54+
})
55+
return examples
56+
}
57+
})
58+
const typeDefs = parse(sdl)
59+
const linkedSpecs = detectLinkedImplementations(typeDefs, [exampleSpec])
6160
const result = linkedSpecs.map(apply => apply(typeDefs))
6261

6362
// result[0] ==> { user: "query { user { id name } }"}

packages/libraries/linkable-specs/src/link-url.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,15 +39,15 @@ export class FederatedLinkUrl {
3939
if (versionOrName) {
4040
if (VERSION_MATCH.test(versionOrName)) {
4141
const maybeName = parts[parts.length - 2];
42-
return new this(
42+
return new FederatedLinkUrl(
4343
url.origin + (maybeName ? `/${parts.slice(0, parts.length - 1).join('/')}` : ''),
4444
maybeName ?? null,
4545
versionOrName,
4646
);
4747
}
48-
return new this(`${url.origin}/${parts.join('/')}`, versionOrName, null);
48+
return new FederatedLinkUrl(`${url.origin}/${parts.join('/')}`, versionOrName, null);
4949
}
50-
return new this(url.origin, null, null);
50+
return new FederatedLinkUrl(url.origin, null, null);
5151
};
5252

5353
/** Check if this version supports another version */
@@ -69,7 +69,7 @@ export class FederatedLinkUrl {
6969
major = majorOrVersion.major;
7070
minor = majorOrVersion.minor;
7171
} else {
72-
throw new Error('Unsupported argument.');
72+
throw new Error(`Unsupported version argument: ${args}.`);
7373
}
7474
return this.isCompatibleVersion(major, minor);
7575
}

packages/libraries/linkable-specs/src/link.ts

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { ConstArgumentNode, DocumentNode, Kind, StringValueNode } from 'graphql';
1+
import { ConstArgumentNode, DocumentNode, Kind } from 'graphql';
22
import { FederatedLinkImport } from './link-import';
33
import { FederatedLinkUrl } from './link-url';
44

@@ -9,19 +9,27 @@ function linkFromArgs(args: readonly ConstArgumentNode[]): FederatedLink | undef
99
for (const arg of args) {
1010
switch (arg.name.value) {
1111
case 'url': {
12-
url = FederatedLinkUrl.fromUrl((arg.value as StringValueNode).value);
12+
if (arg.value.kind === Kind.STRING) {
13+
url = FederatedLinkUrl.fromUrl(arg.value.value);
14+
} else {
15+
console.warn(`Unexpected kind, ${arg.value.kind}, for argument "url" in @link.`);
16+
}
1317
break;
1418
}
1519
case 'import': {
1620
imports = FederatedLinkImport.fromTypedefs(arg.value);
1721
break;
1822
}
1923
case 'as': {
20-
as = (arg?.value as StringValueNode | undefined)?.value ?? null;
24+
if (arg.value.kind === Kind.STRING) {
25+
as = arg.value.value ?? null;
26+
} else {
27+
console.warn(`Unexpected kind, ${arg.value.kind}, for argument "as" in @link.`);
28+
}
2129
break;
2230
}
2331
default: {
24-
// console.warn('Unknown argument');
32+
// ignore. Federation should validate links.
2533
}
2634
}
2735
}

pnpm-lock.yaml

Lines changed: 19 additions & 19 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)