From 8e40f448b1911a646a80100c51a6096ed47ebdfb Mon Sep 17 00:00:00 2001 From: Andy Best Date: Wed, 6 Jan 2021 13:34:16 +0000 Subject: [PATCH 1/3] Split up appending of fragments to query document Splits the appending of fragments to the query document into separate sub expressions to fix an issue where a query with lots of fragments caused the Swift type checker to fail. --- .../src/codeGeneration.ts | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/packages/apollo-codegen-swift/src/codeGeneration.ts b/packages/apollo-codegen-swift/src/codeGeneration.ts index 29219ccc62..949a09a4d1 100644 --- a/packages/apollo-codegen-swift/src/codeGeneration.ts +++ b/packages/apollo-codegen-swift/src/codeGeneration.ts @@ -262,17 +262,20 @@ export class SwiftAPIGenerator extends SwiftGenerator { if (fragmentsReferenced.size > 0) { this.printNewlineIfNeeded(); - this.printOnNewline( - swift`public var queryDocument: String { return operationDefinition` - ); - fragmentsReferenced.forEach(fragmentName => { - this.print( - swift`.appending("\\n" + ${this.helpers.structNameForFragmentName( - fragmentName - )}.fragmentDefinition)` + this.printOnNewline(swift`public var queryDocument: String`); + this.withinBlock(() => { + this.printOnNewline( + swift`var document: String = operationDefinition` ); + fragmentsReferenced.forEach(fragmentName => { + this.printOnNewline( + swift`document.append("\\n" + ${this.helpers.structNameForFragmentName( + fragmentName + )}.fragmentDefinition)` + ); + }); + this.printOnNewline(swift`return document`); }); - this.print(swift` }`); } this.printNewlineIfNeeded(); From 55675411dcab82e4b90b15f0ba4e1d6869d83787 Mon Sep 17 00:00:00 2001 From: Andy Best Date: Wed, 6 Jan 2021 14:42:08 +0000 Subject: [PATCH 2/3] Fix failing snapshot tests --- .../__snapshots__/codeGeneration.ts.snap | 24 +++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/packages/apollo-codegen-swift/src/__tests__/__snapshots__/codeGeneration.ts.snap b/packages/apollo-codegen-swift/src/__tests__/__snapshots__/codeGeneration.ts.snap index 14ed17645a..a27364de9c 100644 --- a/packages/apollo-codegen-swift/src/__tests__/__snapshots__/codeGeneration.ts.snap +++ b/packages/apollo-codegen-swift/src/__tests__/__snapshots__/codeGeneration.ts.snap @@ -315,7 +315,11 @@ exports[`Swift code generation #classDeclarationForOperation() should generate a public let operationName: String = \\"Hero\\" - public var queryDocument: String { return operationDefinition.appending(\\"\\\\n\\" + HeroDetails.fragmentDefinition) } + public var queryDocument: String { + var document: String = operationDefinition + document.append(\\"\\\\n\\" + HeroDetails.fragmentDefinition) + return document + } public init() { } @@ -460,7 +464,11 @@ exports[`Swift code generation #classDeclarationForOperation() should generate a public let operationName: String = \\"Hero\\" - public var queryDocument: String { return operationDefinition.appending(\\"\\\\n\\" + DroidDetails.fragmentDefinition) } + public var queryDocument: String { + var document: String = operationDefinition + document.append(\\"\\\\n\\" + DroidDetails.fragmentDefinition) + return document + } public init() { } @@ -633,7 +641,11 @@ exports[`Swift code generation #classDeclarationForOperation() should generate a public let operationName: String = \\"Hero\\" - public var queryDocument: String { return operationDefinition.appending(\\"\\\\n\\" + HeroDetails.fragmentDefinition) } + public var queryDocument: String { + var document: String = operationDefinition + document.append(\\"\\\\n\\" + HeroDetails.fragmentDefinition) + return document + } public init() { } @@ -834,7 +846,11 @@ exports[`Swift code generation #classDeclarationForOperation() should generate a public let operationIdentifier: String? = \\"90d0d674eb6a7b33776f63200d6cec3d09f881247c360a2ac9a29037a02210c4\\" - public var queryDocument: String { return operationDefinition.appending(\\"\\\\n\\" + HeroDetails.fragmentDefinition) } + public var queryDocument: String { + var document: String = operationDefinition + document.append(\\"\\\\n\\" + HeroDetails.fragmentDefinition) + return document + } public init() { } From d1b1ad6bae65696efd99661d9a7b2893af52cf18 Mon Sep 17 00:00:00 2001 From: Andy Best Date: Wed, 6 Jan 2021 14:44:44 +0000 Subject: [PATCH 3/3] Update CHANGELOG --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index da88eb69fb..ac310d8ad0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,7 +9,7 @@ - `apollo-codegen-scala` - - `apollo-codegen-swift` - - + - Fix issue where a query referencing many fragments caused type checking for `queryDocument` to time out [#2198](https://github.com/apollographql/apollo-tooling/pull/2198) - `apollo-codegen-typescript` - - `apollo-codegen-core`