diff --git a/src/__tests__/__snapshots__/integration.test.ts.snap b/src/__tests__/__snapshots__/integration.test.ts.snap index c24a60c..6dbd329 100644 --- a/src/__tests__/__snapshots__/integration.test.ts.snap +++ b/src/__tests__/__snapshots__/integration.test.ts.snap @@ -42,25 +42,16 @@ exports[`Persisted Query Plugin Integration Tests > Client Manifest Generation > exports[`Persisted Query Plugin Integration Tests > Server Manifest Generation > generates valid server manifest with default options 1`] = ` { "format": "apollo-persisted-query-manifest", - "operations": { - "2ed387ebd9ffea9ea9b42fb1c4c2d149d3c5c45c2c8603ba4ffc755d296dc794": { - "body": "mutation UpdateUser($id: ID!, $name: String, $email: String) { - updateUser(id: $id, name: $name, email: $email) { - ...UserFields - __typename - } -} - -fragment UserFields on User { - id - name - email - __typename + "operations": [ + { + "body": "query HelloQuery { + hello }", - "name": "UpdateUser", - "type": "mutation", + "id": "789ccee2f24e6bec795f6d345529a1fc195e282453956a69eef4209b06b347a9", + "name": "HelloQuery", + "type": "query", }, - "3ac4d5cb7197d3811eedb53feb1db0615ce67aaa91fe1f8d9175e12d37eb6239": { + { "body": "query GetUser($id: ID!) { user(id: $id) { ...UserFields @@ -85,12 +76,13 @@ fragment PostFields on Post { content __typename }", + "id": "3ac4d5cb7197d3811eedb53feb1db0615ce67aaa91fe1f8d9175e12d37eb6239", "name": "GetUser", "type": "query", }, - "3af4547b737d2086c4a7f6f74f61e310c1c9d1a54c6218f34edfa592a43bf7b5": { - "body": "subscription OnUserCreated { - userCreated { + { + "body": "query GetUsers { + users { ...UserFields __typename } @@ -102,10 +94,11 @@ fragment UserFields on User { email __typename }", - "name": "OnUserCreated", - "type": "subscription", + "id": "85306f39b57686912f3e429274c2448e2b4a94f39293875f42d674a7363574ca", + "name": "GetUsers", + "type": "query", }, - "3c6302a47f6243d487fac04c0af0f5f95e0187c17cb1a27e06c7a7c9f0488fd4": { + { "body": "query GetPost($id: ID!) { post(id: $id) { ...PostFields @@ -130,19 +123,31 @@ fragment UserFields on User { email __typename }", + "id": "3c6302a47f6243d487fac04c0af0f5f95e0187c17cb1a27e06c7a7c9f0488fd4", "name": "GetPost", "type": "query", }, - "789ccee2f24e6bec795f6d345529a1fc195e282453956a69eef4209b06b347a9": { - "body": "query HelloQuery { - hello + { + "body": "query GetPosts { + posts { + ...PostFields + __typename + } +} + +fragment PostFields on Post { + id + title + content + __typename }", - "name": "HelloQuery", + "id": "ae215a6ca2480a8c5c721801d9f943cbb54055ce3bdf855ef21bd255b6bbfdde", + "name": "GetPosts", "type": "query", }, - "85306f39b57686912f3e429274c2448e2b4a94f39293875f42d674a7363574ca": { - "body": "query GetUsers { - users { + { + "body": "mutation CreateUser($name: String!, $email: String) { + createUser(name: $name, email: $email) { ...UserFields __typename } @@ -154,29 +159,31 @@ fragment UserFields on User { email __typename }", - "name": "GetUsers", - "type": "query", + "id": "ba9e16c83890d5d9ecabcb415610364fee2932887b2bc393c7143b71aab269b3", + "name": "CreateUser", + "type": "mutation", }, - "ae215a6ca2480a8c5c721801d9f943cbb54055ce3bdf855ef21bd255b6bbfdde": { - "body": "query GetPosts { - posts { - ...PostFields + { + "body": "mutation UpdateUser($id: ID!, $name: String, $email: String) { + updateUser(id: $id, name: $name, email: $email) { + ...UserFields __typename } } -fragment PostFields on Post { +fragment UserFields on User { id - title - content + name + email __typename }", - "name": "GetPosts", - "type": "query", + "id": "2ed387ebd9ffea9ea9b42fb1c4c2d149d3c5c45c2c8603ba4ffc755d296dc794", + "name": "UpdateUser", + "type": "mutation", }, - "ba9e16c83890d5d9ecabcb415610364fee2932887b2bc393c7143b71aab269b3": { - "body": "mutation CreateUser($name: String!, $email: String) { - createUser(name: $name, email: $email) { + { + "body": "subscription OnUserCreated { + userCreated { ...UserFields __typename } @@ -188,10 +195,11 @@ fragment UserFields on User { email __typename }", - "name": "CreateUser", - "type": "mutation", + "id": "3af4547b737d2086c4a7f6f74f61e310c1c9d1a54c6218f34edfa592a43bf7b5", + "name": "OnUserCreated", + "type": "subscription", }, - }, + ], "version": 1, } `; diff --git a/src/core/generator.ts b/src/core/generator.ts index 4feeb46..3d5ecac 100644 --- a/src/core/generator.ts +++ b/src/core/generator.ts @@ -104,17 +104,18 @@ export function generateServerManifest( const manifest: ServerOperationListManifest = { format: 'apollo-persisted-query-manifest', version: 1, - operations: {}, + operations: [], }; for (const operation of operations) { const operationDetails: PersistedQueryManifestOperation = { + id: operation.hash, type: operation.type, name: operation.name, body: operation.query, }; - manifest.operations[operation.hash] = operationDetails; + manifest.operations.push(operationDetails); } return manifest; diff --git a/src/types/index.ts b/src/types/index.ts index f96880f..9ce26c3 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -33,6 +33,8 @@ export interface PluginConfig { * Represents a single operation in the persisted query manifest */ export interface PersistedQueryManifestOperation { + /** Operation hash */ + id: string; /** Operation type (query, mutation, subscription) */ type: OperationTypeNode; /** Operation name */ @@ -47,7 +49,7 @@ export interface PersistedQueryManifestOperation { export interface ServerOperationListManifest { format: 'apollo-persisted-query-manifest'; version: 1; - operations: Record; + operations: PersistedQueryManifestOperation[]; } /**