Conversation
🦋 Changeset detectedLatest commit: 819cf71 The changes in this PR will be included in the next version bump. This PR includes changesets to release 7 packages
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
c88a311 to
3005df7
Compare
| throw error; | ||
| const readOnlyHash = JSON.stringify(readOnlyPointerMap); | ||
| const outputDocumentsReadOnly = await cache( | ||
| 'documents', |
There was a problem hiding this comment.
A readonly document is also just a document for hashing purposes.
This ensures there is only one document in the final merged array, because we use the hash to detect the file uniqueness
|
|
||
| async loadDocuments(pointer: Types.OperationDocument[]): Promise<Types.DocumentFile[]> { | ||
| async loadDocuments( | ||
| pointer: UnnormalizedTypeDefPointer, |
There was a problem hiding this comment.
The only caller of this function will be passing in UnnormalizedTypeDefPointer, and nothing else. May as well narrow the type to make it easier to code.
| function hashDocument(doc: Types.DocumentFile) { | ||
| if (doc.rawSDL) { | ||
| return hashContent(doc.rawSDL); | ||
| } | ||
| async function addHashToDocumentFiles( | ||
| documentFilesPromise: Promise<Source[]>, | ||
| type: 'standard' | 'read-only', | ||
| ): Promise<Types.DocumentFile[]> { | ||
| function hashDocument(doc: Source) { | ||
| if (doc.rawSDL) { | ||
| return hashContent(doc.rawSDL); | ||
| } | ||
|
|
||
| if (doc.document) { | ||
| return hashContent(print(doc.document)); | ||
| } | ||
| if (doc.document) { | ||
| return hashContent(print(doc.document)); | ||
| } | ||
|
|
||
| return null; | ||
| } |
There was a problem hiding this comment.
hashDocument is is only used by one function, so I moved it inline to avoid jumping around.
| documentPointers: UnnormalizedTypeDefPointer | UnnormalizedTypeDefPointer[], | ||
| config: Types.Config, | ||
| ): Promise<Types.DocumentFile[]> { | ||
| ): Promise<Source[]> { |
There was a problem hiding this comment.
When this function finishes, we'd only get the base Source. Types.DocumentFile is what we get after processing the Source (adding hash and type)
| ); | ||
|
|
||
| return newDocuments.map((document, index) => ({ | ||
| ...documents[index], |
There was a problem hiding this comment.
Context for future me:
Previously we throw away hash when optimising the doc.
When we introduce type (read-only or standard), we need it for further processing, so we need to keep it like this.
Maybe we should not just add these custom Codegen meta directly to the node, since optimizeDocuments implementation may remove it in the future.
Maybe we can add a special key/value to reduce this risk e.g. __meta: { hash: 'abc', types: 'standard' } 🤔
| hash: string; | ||
| type: 'standard' | 'read-only'; |
There was a problem hiding this comment.
Source is the default from parsing the docs.
DocumentFile is the "processed" source, with Codegen metadata.
We may want to group them to avoid edge cases mentioned in: https://github.com/dotansimha/graphql-code-generator/pull/10659/changes#r3032421307
- Flow documentsReadOnly to typescript-operations - Set up documents-readonly dev-test - Update dev-tests output - Merge standard and read-only documents - Fix Source vs Types.DocumentFile usage for type correctness
8f4ba67 to
df25ba7
Compare
There was a problem hiding this comment.
Documents now have type being 'standard' | 'read-only'.
If we don't supply that, the plugin will generate nothing.
This utility helps by creating Types.DocumentFile with hash and type hardcoded. If we need to make the params partial with override in the future, we could,.
631abbd to
40f5ca8
Compare
40f5ca8 to
819cf71
Compare
| const populateDocumentPointerMap = ( | ||
| allDocumentsDenormalizedPointers: Types.OperationDocument[], | ||
| ): UnnormalizedTypeDefPointer => { | ||
| const pointer: UnnormalizedTypeDefPointer = {}; | ||
| for (const denormalizedPtr of allDocumentsDenormalizedPointers) { | ||
| if (typeof denormalizedPtr === 'string') { | ||
| pointer[denormalizedPtr] = {}; | ||
| } else if (typeof denormalizedPtr === 'object') { | ||
| Object.assign(pointer, denormalizedPtr); | ||
| } | ||
| } | ||
| return pointer; | ||
| }; |
There was a problem hiding this comment.
Inlining populateDocumentPointerMap makes it a bit easier to read as we don't jump around the file. We could take this pure function and put it at the bottom of the file if needed.
Description
documentsReadOnlyimplemented, for safe handling of fragment includes between packages in the monorepoRelated # (10658)[https://github.com//issues/10658]
Type of change
How Has This Been Tested?