Skip to content
This repository was archived by the owner on Sep 27, 2023. It is now read-only.

Commit 2a69940

Browse files
authored
Merge pull request #112 from relay-tools/feat/v4
feat(relay): Upgrade to version 4
2 parents 13a29dc + 2166205 commit 2a69940

19 files changed

+533
-164
lines changed

package.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@
5252
"peerDependencies": {
5353
"@types/react-relay": ">=1.3.9",
5454
"@types/relay-runtime": ">=1.3.5",
55-
"relay-compiler": ">=2.0.0",
55+
"relay-compiler": ">=4.0.0",
5656
"relay-runtime": "*",
5757
"typescript": ">=2.9.1"
5858
},
@@ -69,9 +69,9 @@
6969
"jest-cli": "^23.6.0",
7070
"lint-staged": "^7.3.0",
7171
"prettier": "^1.10.2",
72-
"relay-compiler": "^2.0.0",
73-
"relay-runtime": "^2.0.0",
74-
"relay-test-utils": "^2.0.0",
72+
"relay-compiler": "^4.0.0",
73+
"relay-runtime": "^4.0.0",
74+
"relay-test-utils": "^4.0.0",
7575
"ts-jest": "^22.0.1",
7676
"tslint": "^5.11.0",
7777
"tslint-config-prettier": "^1.15.0",

src/TypeScriptGenerator.ts

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
import {
2+
Fragment,
23
IRTransforms,
4+
IRVisitor,
5+
Root,
6+
SchemaUtils,
37
TypeGenerator,
48
TypeGeneratorOptions
59
} from "relay-compiler";
6-
import * as RelayCompilerPublic from "relay-compiler/lib/RelayCompilerPublic";
10+
import * as RelayCompilerPublic from "relay-compiler";
711

812
import { GraphQLNonNull } from "graphql";
913
import * as ts from "typescript";
@@ -14,13 +18,6 @@ import {
1418
transformScalarType
1519
} from "./TypeScriptTypeTransformers";
1620

17-
// Get the types
18-
import * as GraphQLCompilerTypes from "graphql-compiler";
19-
20-
const GraphQLCompiler: typeof GraphQLCompilerTypes = RelayCompilerPublic;
21-
22-
const { IRVisitor, SchemaUtils } = GraphQLCompiler;
23-
2421
const { isAbstractType } = SchemaUtils;
2522

2623
const REF_TYPE = " $refType";
@@ -241,7 +238,7 @@ function mergeSelections(a: SelectionMap, b: SelectionMap): SelectionMap {
241238
return merged;
242239
}
243240

244-
function isPlural(node: GraphQLCompilerTypes.Fragment): boolean {
241+
function isPlural(node: Fragment): boolean {
245242
return Boolean(node.metadata && node.metadata.plural);
246243
}
247244

@@ -472,10 +469,7 @@ function generateInputObjectTypes(state: State) {
472469
});
473470
}
474471

475-
function generateInputVariablesType(
476-
node: GraphQLCompilerTypes.Root,
477-
state: State
478-
) {
472+
function generateInputVariablesType(node: Root, state: State) {
479473
return exportType(
480474
`${node.name}Variables`,
481475
exactObjectTypeAnnotation(
@@ -593,8 +587,12 @@ function getRefTypeName(name: string): string {
593587
return `${name}$ref`;
594588
}
595589

590+
// Should match FLOW_TRANSFORMS array
591+
// https://github.com/facebook/relay/blob/v4.0.0/packages/relay-compiler/language/javascript/RelayFlowGenerator.js#L621-L627
596592
export const transforms: TypeGenerator["transforms"] = [
597-
IRTransforms.commonTransforms[2], // RelayRelayDirectiveTransform.transform
598-
IRTransforms.commonTransforms[3], // RelayMaskTransform.transform
599-
IRTransforms.printTransforms[0] // FlattenTransform.transformWithOptions({})
593+
IRTransforms.commonTransforms[1], // RelayRelayDirectiveTransform.transform,
594+
IRTransforms.commonTransforms[2], // RelayMaskTransform.transform,
595+
IRTransforms.commonTransforms[3], // RelayMatchTransform.transform,
596+
IRTransforms.printTransforms[3], // FlattenTransform.transformWithOptions({}),
597+
IRTransforms.commonTransforms[4] // RelayRefetchableFragmentTransform.transform,
600598
];

test/TypeScriptGenerator-test.ts

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,43 @@ function generate(text, options) {
1010
const schema = transformASTSchema(RelayTestSchema, [
1111
IRTransforms.schemaExtensions[1], // RelayMatchTransform.SCHEMA_EXTENSION,
1212
IRTransforms.schemaExtensions[2], // RelayRelayDirectiveTransform.SCHEMA_EXTENSION,
13+
`
14+
scalar Color
15+
extend type User {
16+
color: Color
17+
}
18+
type ExtraUser implements Actor {
19+
address: StreetAddress
20+
allPhones: [Phone]
21+
birthdate: Date
22+
emailAddresses: [String]
23+
firstName(if: Boolean, unless: Boolean): String
24+
friends(after: ID, before: ID, first: Int, last: Int, orderby: [String], find: String, isViewerFriend: Boolean, if: Boolean, unless: Boolean, traits: [PersonalityTraits]): FriendsConnection
25+
hometown: Page
26+
id: ID!
27+
lastName: String
28+
name: String
29+
nameRenderer(supported: [String!]!): UserNameRenderer
30+
nameRenderable(supported: [String!]!): UserNameRenderable
31+
profilePicture(size: [Int], preset: PhotoSize): Image
32+
screennames: [Screenname]
33+
subscribeStatus: String
34+
subscribers(first: Int): SubscribersConnection
35+
url(relative: Boolean, site: String): String
36+
websites: [String]
37+
username: String
38+
}
39+
`,
1340
]);
1441
const {definitions} = parseGraphQLText(schema, text);
1542
return new GraphQLCompilerContext(RelayTestSchema, schema)
1643
.addAll(definitions)
1744
.applyTransforms(TypeScriptGenerator.transforms)
1845
.documents()
19-
.map(doc => TypeScriptGenerator.generate(doc, options))
46+
.map(doc => TypeScriptGenerator.generate(doc, {
47+
...options,
48+
schema,
49+
}))
2050
.join('\n\n');
2151
}
2252

0 commit comments

Comments
 (0)