@nxgt/graphql-codegen-msw 0.2.2 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,8 +1,9 @@
1
1
  # @nxgt/graphql-codegen-msw
2
2
 
3
3
  A [graphql-codegen](https://the-guild.dev/graphql/codegen) plugin that writes
4
- one typed [msw](https://mswjs.io) 3 handler per named query and mutation of
5
- your documents: `mockUserQuery(resolver, options?)`, built on msw's
4
+ one typed [msw](https://mswjs.io) 3 handler per named query, mutation and
5
+ subscription of your documents (subscriptions are streamed over SSE through an
6
+ executor): `mockUserQuery(resolver, options?)`, built on msw's
6
7
  `graphql.link(endpoint)`. Each handler checks the variables it receives with
7
8
  the Zod schema
8
9
  [`@nxgt/graphql-codegen-zod`](https://www.npmjs.com/package/@nxgt/graphql-codegen-zod)
@@ -246,6 +247,49 @@ test('shows the user', async () => {
246
247
  Under Bun, msw 3's `setupServer` intercepts no `fetch`: see
247
248
  [Under Bun](docs/guide/handlers.md#under-bun).
248
249
 
250
+ ### Subscriptions over SSE
251
+
252
+ A named `subscription` gets `mock<Name>Subscription(execute, options?)`, an
253
+ msw `HttpHandler` that answers only a POST to the endpoint with
254
+ `Accept: text/event-stream` whose operation is that subscription. It checks
255
+ the variables as a query's are, then hands the request to `execute`, which
256
+ streams it. Pass `createExecutor({ schema })` from
257
+ [`@nxgt/msw-graphql`](https://www.npmjs.com/package/@nxgt/msw-graphql) (0.4.0
258
+ or later) and the stream comes from the schema's `Subscription` resolvers
259
+ (graphql-sse distinct connections: `next` events, then `complete`), with no
260
+ wrapper around `fetch`. Any other request, this subscription sent without the
261
+ event-stream `Accept` included, goes on to the next handler.
262
+
263
+ ```ts
264
+ import { createExecutor } from '@nxgt/msw-graphql';
265
+ import { buildMockSchema } from '@nxgt/msw-graphql/schema';
266
+ import { mockItemChangedSubscription } from './generated/msw';
267
+
268
+ const typeDefs = `
269
+ type Item { id: ID!, name: String! }
270
+ type Query { item(id: ID!): Item }
271
+ type Subscription { itemChanged(id: ID!): Item }
272
+ `;
273
+
274
+ const schema = buildMockSchema({
275
+ typeDefs,
276
+ resolvers: {
277
+ Subscription: {
278
+ itemChanged: {
279
+ subscribe: async function* (_, { id }) {
280
+ yield { itemChanged: { id, name: 'first' } };
281
+ },
282
+ },
283
+ },
284
+ },
285
+ });
286
+
287
+ server.use(mockItemChangedSubscription(createExecutor({ schema })));
288
+ ```
289
+
290
+ `execute` is any `(input: { query, variables, operationName, request }) =>
291
+ Promise<Response>`; this package does not depend on `@nxgt/msw-graphql`.
292
+
249
293
  ## Options
250
294
 
251
295
  | Option | Type | Default | Effect |
@@ -263,8 +307,9 @@ Each is detailed in [Handlers](docs/guide/handlers.md).
263
307
  ## Traps
264
308
 
265
309
  - A handler is written for a **named** query or mutation. An anonymous
266
- operation has no name for msw to match, and a subscription none: msw 3 mocks
267
- subscriptions over WebSocket only (see the [roadmap](docs/roadmap.md)).
310
+ operation has no name for msw to match. A subscription's handler streams
311
+ over SSE only, through the executor you give it; msw's own WebSocket
312
+ subscription handler is not generated.
268
313
  - Take the types from the client preset or `typescript-operations` (the wire
269
314
  types), not from codegen-zod's file, whose result types are decoded (a
270
315
  `DateTime` is a `Date` there).
@@ -286,8 +331,9 @@ Every error and its fix is in [Troubleshooting](docs/troubleshooting.md).
286
331
  The package exports `plugin` and the `CodegenMswConfig` and `DocumentFile`
287
332
  types from `.`; graphql-codegen finds `plugin` by the package name. The
288
333
  generated file's runtime is `./runtime`: `mockOperation`,
289
- `invalidInputRefusal`, `badUserInputRefusal`, `errorResponse`,
290
- `isGraphQLError` and their types, and, re-exported from
334
+ `mockSubscription`, `invalidInputRefusal`, `badUserInputRefusal`, `errorResponse`,
335
+ `isGraphQLError` and their types (`MockedSubscription`,
336
+ `SubscriptionExecutor` among them), and, re-exported from
291
337
  `@nxgt/graphql-validation`, `invalidInputError`, `fieldsError`,
292
338
  `fieldIssueOf`, `inputPath`, `Translate`, `FieldIssue` and `FieldError`.
293
339
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAO/D,YAAY,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAK/D;;;;;;;GAOG;AACH,wBAAgB,MAAM,CACrB,MAAM,EAAE,aAAa,EACrB,SAAS,EAAE,SAAS,YAAY,EAAE,EAClC,MAAM,GAAE,gBAAqB,GAC3B,MAAM,CA0DR"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAO/D,YAAY,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAK/D;;;;;;;GAOG;AACH,wBAAgB,MAAM,CACrB,MAAM,EAAE,aAAa,EACrB,SAAS,EAAE,SAAS,YAAY,EAAE,EAClC,MAAM,GAAE,gBAAqB,GAC3B,MAAM,CA6ER"}
package/dist/index.js CHANGED
@@ -218,7 +218,7 @@ function mockedOperations(documents) {
218
218
  return documents.flatMap((file) => file.document?.definitions ?? []).filter((node) => node.kind === Kind2.OPERATION_DEFINITION).flatMap((node) => {
219
219
  const name = node.name?.value;
220
220
  const kind = node.operation;
221
- if (!name || kind !== "query" && kind !== "mutation")
221
+ if (!name)
222
222
  return [];
223
223
  return [{ name, kind, node }];
224
224
  });
@@ -285,21 +285,37 @@ function plugin(schema, documents, config = {}) {
285
285
  ...handlers
286
286
  ]);
287
287
  const any = operations.length > 0;
288
- const handler = any ? imports.type("msw/graphql", "GraphQLHandler") : "";
288
+ const plain = operations.some(({ kind }) => kind !== "subscription");
289
+ const handler = plain ? imports.type("msw/graphql", "GraphQLHandler") : "";
290
+ const subscribing = operations.some(({ kind }) => kind === "subscription");
291
+ const subscription = {
292
+ handler: subscribing ? imports.type("msw", "HttpHandler") : "",
293
+ executor: subscribing ? imports.type(RUNTIME, "SubscriptionExecutor") : "",
294
+ mock: subscribing ? imports.value(RUNTIME, "mockSubscription") : ""
295
+ };
289
296
  const runtime = {
290
- resolver: any ? imports.type(RUNTIME, "GraphQLMockResolver") : "",
297
+ resolver: plain ? imports.type(RUNTIME, "GraphQLMockResolver") : "",
291
298
  options: any ? imports.type(RUNTIME, "MockOptions") : "",
292
299
  invalidInput: imports.type(RUNTIME, "InvalidInput"),
293
300
  inputTypes: any ? imports.type(RUNTIME, "InputTypes") : "",
294
- mock: any ? imports.value(RUNTIME, "mockOperation") : ""
301
+ mock: plain ? imports.value(RUNTIME, "mockOperation") : ""
295
302
  };
296
303
  const refusal = refusalCode(options, imports);
297
304
  const blocks = operations.map((operation) => {
298
305
  const { name, kind } = operation;
306
+ const factory = naming.handler(name, kind);
307
+ if (kind === "subscription") {
308
+ const schema = imports.value(options.schemasImport, naming.schema(naming.variables(name, kind)));
309
+ return subscriptionBlock(operation, factory, {
310
+ ...subscription,
311
+ options: runtime.options,
312
+ schema
313
+ });
314
+ }
299
315
  const result = imports.type(options.typesImport, naming.result(name, kind));
300
316
  const variables = imports.type(options.typesImport, naming.variables(name, kind));
301
317
  const schema = imports.value(options.schemasImport, naming.schema(naming.variables(name, kind)));
302
- return handlerBlock(operation, naming.handler(name, kind), {
318
+ return handlerBlock(operation, factory, {
303
319
  ...runtime,
304
320
  handler,
305
321
  result,
@@ -344,6 +360,19 @@ function inputTypesBlock(schema, operations, type) {
344
360
  ].join(`
345
361
  `);
346
362
  }
363
+ function subscriptionBlock({ name, node }, factory, names) {
364
+ const operation = `{ type: "subscription", name: ${JSON.stringify(name)}, variables: ${names.schema}, variableTypes: ${variableTypesCode(node)}, inputTypes, endpoint, invalidInput }`;
365
+ return [
366
+ `/** Mocks the ${name} subscription: a POST with \`Accept: text/event-stream\` is streamed by \`execute\` once the variables pass \`${names.schema}\`. */`,
367
+ `export function ${factory}(`,
368
+ ` execute: ${names.executor},`,
369
+ ` options?: ${names.options},`,
370
+ `): ${names.handler} {`,
371
+ ` return ${names.mock}(${operation}, execute, options);`,
372
+ "}"
373
+ ].join(`
374
+ `);
375
+ }
347
376
  function handlerBlock({ name, kind, node }, factory, names) {
348
377
  const operation = `{ type: ${JSON.stringify(kind)}, name: ${JSON.stringify(name)}, variables: ${names.schema}, variableTypes: ${variableTypesCode(node)}, inputTypes, endpoint, invalidInput }`;
349
378
  return [
@@ -361,5 +390,5 @@ export {
361
390
  plugin
362
391
  };
363
392
 
364
- //# debugId=9EF728C8AF82F3D964756E2164756E21
393
+ //# debugId=A301100766A457D164756E2164756E21
365
394
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -4,12 +4,12 @@
4
4
  "sourcesContent": [
5
5
  "/** One name imported from a module: its local name, and whether it is a type only. */\ninterface Imported {\n\treadonly local: string;\n\treadonly type: boolean;\n}\n\n/**\n * The named imports of the generated file, one line per module in the order\n * they were first asked for, an alias when a name is taken. A module whose\n * every name is a type is written `import type`.\n */\nexport class Imports {\n\treadonly #byModule = new Map<string, Map<string, Imported>>();\n\treadonly #taken: Set<string>;\n\n\t/** `reserved`: the names the file declares, which no import may take. */\n\tconstructor(reserved: Iterable<string> = []) {\n\t\tthis.#taken = new Set(reserved);\n\t}\n\n\t/** The local name of the value `exported` from `module`. */\n\tvalue(module: string, exported: string): string {\n\t\treturn this.#add(module, exported, false);\n\t}\n\n\t/** The local name of the type `exported` from `module`. */\n\ttype(module: string, exported: string): string {\n\t\treturn this.#add(module, exported, true);\n\t}\n\n\t#add(module: string, exported: string, type: boolean): string {\n\t\tconst names = this.#byModule.get(module) ?? new Map<string, Imported>();\n\t\tthis.#byModule.set(module, names);\n\t\tconst known = names.get(exported);\n\t\tif (known) {\n\t\t\tif (!type && known.type) names.set(exported, { ...known, type: false });\n\t\t\treturn known.local;\n\t\t}\n\t\tlet local = exported;\n\t\tfor (let n = 2; this.#taken.has(local); n++) local = `${exported}${n}`;\n\t\tthis.#taken.add(local);\n\t\tnames.set(exported, { local, type });\n\t\treturn local;\n\t}\n\n\t/** The import lines, double-quoted as every string the file holds. */\n\tlines(): string[] {\n\t\treturn [...this.#byModule].map(([module, names]) => {\n\t\t\tconst all = [...names];\n\t\t\tconst typeOnly = all.every(([, { type }]) => type);\n\t\t\tconst specifiers = all.map(([exported, { local, type }]) => {\n\t\t\t\tconst name = exported === local ? local : `${exported} as ${local}`;\n\t\t\t\treturn type && !typeOnly ? `type ${name}` : name;\n\t\t\t});\n\t\t\treturn `import ${typeOnly ? 'type ' : ''}{ ${specifiers.join(', ')} } from ${JSON.stringify(module)};`;\n\t\t});\n\t}\n}\n",
6
6
  "import {\n\ttype GraphQLInputField,\n\ttype GraphQLNamedType,\n\ttype GraphQLSchema,\n\tgetNamedType,\n\tisEnumType,\n\tisInputObjectType,\n\tisNonNullType,\n\tisRequiredInputField,\n\tisSpecifiedScalarType,\n\tKind,\n\ttype OperationDefinitionNode,\n\tprint,\n\ttype TypeNode,\n} from 'graphql';\n\n// What the generated file tells the runtime of the variables, from the\n// schema at generation time, so the mock words a value graphql refuses as\n// graphql-yoga does: each variable's type, and every input type the\n// variables reach (the runtime's `InputTypes`, an internal shape).\n\n/** `{ first: \"Int = 10\", role: \"Role\" }`: each variable's type and default, as written. */\nexport function variableTypesCode(node: OperationDefinitionNode): string {\n\tconst entries = (node.variableDefinitions ?? []).map((definition) => {\n\t\tconst type = print(definition.type);\n\t\tconst source = definition.defaultValue\n\t\t\t? `${type} = ${print(definition.defaultValue)}`\n\t\t\t: type;\n\t\treturn `${definition.variable.name.value}: ${JSON.stringify(source)}`;\n\t});\n\treturn entries.length > 0 ? `{ ${entries.join(', ')} }` : '{}';\n}\n\n/**\n * The `inputTypes` object's source: every type the operations' variables\n * reach, input objects followed field by field, sorted by name so the file\n * does not move when the documents are reordered; a scalar on one line, an\n * input object's fields and an enum's values one per line.\n */\nexport function inputTypesCode(\n\tschema: GraphQLSchema,\n\toperations: readonly OperationDefinitionNode[],\n): string {\n\tconst reached = new Map<string, GraphQLNamedType>();\n\tconst visit = (type: GraphQLNamedType | undefined): void => {\n\t\tif (!type || reached.has(type.name)) return;\n\t\treached.set(type.name, type);\n\t\tif (isInputObjectType(type))\n\t\t\tfor (const field of Object.values(type.getFields()))\n\t\t\t\tvisit(getNamedType(field.type));\n\t};\n\tfor (const operation of operations)\n\t\tfor (const definition of operation.variableDefinitions ?? [])\n\t\t\tvisit(schema.getType(namedTypeOf(definition.type)) ?? undefined);\n\tconst entries = [...reached.values()]\n\t\t.sort((a, b) => (a.name < b.name ? -1 : a.name > b.name ? 1 : 0))\n\t\t.map((type) => `\\t${type.name}: ${entryCode(type)},`);\n\treturn entries.length > 0 ? `{\\n${entries.join('\\n')}\\n}` : '{}';\n}\n\nfunction namedTypeOf(type: TypeNode): string {\n\treturn type.kind === Kind.NAMED_TYPE\n\t\t? type.name.value\n\t\t: namedTypeOf(type.type);\n}\n\n/**\n * One type's entry: a scalar on its line, an input object one field per\n * line and an enum one value per line, so a schema change moves the lines\n * it changes only.\n */\nfunction entryCode(type: GraphQLNamedType): string {\n\tif (isInputObjectType(type)) {\n\t\tconst fields = Object.values(type.getFields()).map(\n\t\t\t(field) => `${field.name}: ${JSON.stringify(fieldSource(field))}`,\n\t\t);\n\t\treturn block([\n\t\t\t'kind: \"input\"',\n\t\t\t`fields: ${block(fields, 2)}`,\n\t\t\t...(type.isOneOf ? ['oneOf: true'] : []),\n\t\t]);\n\t}\n\tif (isEnumType(type)) {\n\t\tconst values = type.getValues().map((value) => JSON.stringify(value.name));\n\t\treturn block(['kind: \"enum\"', `values: ${list(values, 2)}`]);\n\t}\n\treturn isSpecifiedScalarType(type)\n\t\t? '{ kind: \"builtin\" }'\n\t\t: '{ kind: \"scalar\" }';\n}\n\n/** `{ … }`, one property per line at `depth` tabs, its brace one tab less. */\nfunction block(properties: readonly string[], depth = 1): string {\n\treturn wrapped('{', '}', properties, depth);\n}\n\n/** `[ … ]`, one item per line, as `block`. */\nfunction list(items: readonly string[], depth: number): string {\n\treturn wrapped('[', ']', items, depth);\n}\n\nfunction wrapped(\n\topen: string,\n\tclose: string,\n\titems: readonly string[],\n\tdepth: number,\n): string {\n\tif (items.length === 0) return `${open}${close}`;\n\tconst indent = '\\t'.repeat(depth + 1);\n\tconst lines = items.map((item) => `${indent}${item},`);\n\treturn `${open}\\n${lines.join('\\n')}\\n${'\\t'.repeat(depth)}${close}`;\n}\n\n/**\n * `\"Int! = 1\"`: the field's type, and its default when it has one. Only a\n * non-null field's default changes what graphql refuses (it is then not\n * required); a schema built in code has no default to print, written `…`.\n */\nfunction fieldSource(field: GraphQLInputField): string {\n\tconst type = String(field.type);\n\tconst literal = field.astNode?.defaultValue;\n\tif (literal) return `${type} = ${print(literal)}`;\n\treturn isNonNullType(field.type) && !isRequiredInputField(field)\n\t\t? `${type} = …`\n\t\t: type;\n}\n",
7
- "import * as changeCase from 'change-case';\nimport type { CodegenMswConfig } from './config';\n\n/** The operation kinds a handler is written for. */\nexport type MockedKind = 'query' | 'mutation';\n\n/**\n * The names the generated file uses: each type as `typescript-operations`\n * names it, each schema as `@nxgt/graphql-codegen-zod` names it (the type's\n * name behind `schemaPrefix`), and each handler `mock` and the operation's\n * converted name. Kept as codegen-zod's `naming.ts` (AGENTS.md lists the\n * copy): the spec generates both files and imports one from the other.\n */\nexport class Naming {\n\treadonly #config: CodegenMswConfig;\n\treadonly #convert: (name: string) => string;\n\n\tconstructor(config: CodegenMswConfig) {\n\t\tthis.#config = config;\n\t\tthis.#convert = converter(config.namingConvention);\n\t}\n\n\t/** An operation's variables type name: `SignUpMutationVariables`. */\n\tvariables(operation: string, kind: MockedKind): string {\n\t\treturn this.#wrap(\n\t\t\tthis.#convert(`${operation}${this.#suffix(operation, kind)}Variables`),\n\t\t);\n\t}\n\n\t/** An operation's result type name: `SignUpMutation`. */\n\tresult(operation: string, kind: MockedKind): string {\n\t\treturn this.#wrap(\n\t\t\tthis.#convert(`${operation}${this.#suffix(operation, kind)}`),\n\t\t);\n\t}\n\n\t/** The schema of the type named `type`: `zSignUpMutationVariables`. */\n\tschema(type: string): string {\n\t\treturn `${this.#config.schemaPrefix ?? 'z'}${type}`;\n\t}\n\n\t/** An operation's handler factory: `mockSignUpMutation`, no type prefix or suffix. */\n\thandler(operation: string, kind: MockedKind): string {\n\t\treturn `mock${this.#convert(`${operation}${this.#suffix(operation, kind)}`)}`;\n\t}\n\n\t/** As visitor-plugin-common's `getOperationSuffix`. */\n\t#suffix(operation: string, kind: MockedKind): string {\n\t\tconst type = changeCase.pascalCase(kind);\n\t\tconst { omitOperationSuffix, dedupeOperationSuffix } = this.#config;\n\t\treturn omitOperationSuffix ||\n\t\t\t(dedupeOperationSuffix &&\n\t\t\t\toperation.toLowerCase().endsWith(type.toLowerCase()))\n\t\t\t? ''\n\t\t\t: type;\n\t}\n\n\t#wrap(name: string): string {\n\t\treturn `${this.#config.typesPrefix ?? ''}${name}${this.#config.typesSuffix ?? ''}`;\n\t}\n}\n\ntype Convention = NonNullable<CodegenMswConfig['namingConvention']>;\ntype Case = (name: string) => string;\n\nconst lowerCaseFirst: Case = (name) =>\n\tname.charAt(0).toLowerCase() + name.slice(1);\nconst upperCaseFirst: Case = (name) =>\n\tname.charAt(0).toUpperCase() + name.slice(1);\n\n/**\n * The cases a `namingConvention` string can name, by module: change-case-all\n * 2's names (what the typescript plugins resolve), and change-case 5's.\n */\nconst cases: Readonly<Record<string, Readonly<Record<string, Case>>>> = {\n\t'change-case-all': {\n\t\tcamelCase: changeCase.camelCase,\n\t\tcapitalCase: changeCase.capitalCase,\n\t\tconstantCase: changeCase.constantCase,\n\t\tdotCase: changeCase.dotCase,\n\t\theaderCase: changeCase.trainCase,\n\t\tnoCase: changeCase.noCase,\n\t\tparamCase: changeCase.kebabCase,\n\t\tpascalCase: changeCase.pascalCase,\n\t\tpathCase: changeCase.pathCase,\n\t\tsentenceCase: changeCase.sentenceCase,\n\t\tsnakeCase: changeCase.snakeCase,\n\t\tlowerCase: (name) => name.toLowerCase(),\n\t\tupperCase: (name) => name.toUpperCase(),\n\t\tlowerCaseFirst,\n\t\tupperCaseFirst,\n\t},\n\t'change-case': {\n\t\tcamelCase: changeCase.camelCase,\n\t\tcapitalCase: changeCase.capitalCase,\n\t\tconstantCase: changeCase.constantCase,\n\t\tdotCase: changeCase.dotCase,\n\t\tkebabCase: changeCase.kebabCase,\n\t\tnoCase: changeCase.noCase,\n\t\tpascalCase: changeCase.pascalCase,\n\t\tpascalSnakeCase: changeCase.pascalSnakeCase,\n\t\tpathCase: changeCase.pathCase,\n\t\tsentenceCase: changeCase.sentenceCase,\n\t\tsnakeCase: changeCase.snakeCase,\n\t\ttrainCase: changeCase.trainCase,\n\t},\n};\n\n/** Applies `fn` to each part between underscores, or to the whole name. */\nconst byPart =\n\t(fn: Case, transformUnderscore: boolean): Case =>\n\t(name) =>\n\t\ttransformUnderscore ? fn(name) : name.split('_').map(fn).join('_');\n\n/**\n * A `namingConvention` as `@graphql-codegen/visitor-plugin-common`'s\n * `convertFactory` reads it for type names: undefined is PascalCase per\n * part; `'keep'`; a `'change-case-all#<case>'` string or a function, per\n * part; an object's `typeNames`, on the whole name, or, without\n * `typeNames`, PascalCase per part unless `transformUnderscore` is true.\n */\nfunction converter(convention: Convention | undefined): Case {\n\tif (convention === undefined) return byPart(changeCase.pascalCase, false);\n\tif (convention === 'keep') return (name) => name;\n\tif (typeof convention === 'function') return byPart(convention, false);\n\tif (typeof convention === 'string')\n\t\treturn byPart(caseNamed(convention), false);\n\tconst { typeNames, transformUnderscore } = convention;\n\tif (typeNames === 'keep') return (name) => name;\n\tif (typeNames === undefined)\n\t\treturn byPart(changeCase.pascalCase, transformUnderscore ?? false);\n\tconst fn = typeof typeNames === 'function' ? typeNames : caseNamed(typeNames);\n\treturn byPart(fn, true);\n}\n\nfunction caseNamed(spec: string): Case {\n\tconst [module = '', name = ''] = spec.split('#');\n\tconst fn = cases[module]?.[name];\n\tif (fn) return fn;\n\tthrow new Error(\n\t\t`@nxgt/graphql-codegen-msw: namingConvention \"${spec}\" is not one this plugin reads. Use 'keep', a function, or 'change-case-all#<case>' with one of ${Object.keys(cases['change-case-all'] ?? {}).join(', ')}.`,\n\t);\n}\n",
8
- "import { Kind, type OperationDefinitionNode } from 'graphql';\nimport type { DocumentFile } from './config';\nimport type { MockedKind } from './naming';\n\n/** A named query or mutation of the documents. */\nexport interface MockedOperationNode {\n\treadonly name: string;\n\treadonly kind: MockedKind;\n\treadonly node: OperationDefinitionNode;\n}\n\n/**\n * Every named query and mutation, in document order. An anonymous\n * operation has no name for msw to match, and a subscription is not an\n * HTTP request msw's `query` or `mutation` handler answers: neither gets a\n * handler.\n */\nexport function mockedOperations(\n\tdocuments: readonly DocumentFile[],\n): MockedOperationNode[] {\n\treturn documents\n\t\t.flatMap((file) => file.document?.definitions ?? [])\n\t\t.filter(\n\t\t\t(node): node is OperationDefinitionNode =>\n\t\t\t\tnode.kind === Kind.OPERATION_DEFINITION,\n\t\t)\n\t\t.flatMap((node) => {\n\t\t\tconst name = node.name?.value;\n\t\t\tconst kind: string = node.operation;\n\t\t\tif (!name || (kind !== 'query' && kind !== 'mutation')) return [];\n\t\t\treturn [{ name, kind: kind as MockedKind, node }];\n\t\t});\n}\n",
7
+ "import * as changeCase from 'change-case';\nimport type { CodegenMswConfig } from './config';\n\n/** The operation kinds a handler is written for. */\nexport type MockedKind = 'query' | 'mutation' | 'subscription';\n\n/**\n * The names the generated file uses: each type as `typescript-operations`\n * names it, each schema as `@nxgt/graphql-codegen-zod` names it (the type's\n * name behind `schemaPrefix`), and each handler `mock` and the operation's\n * converted name. Kept as codegen-zod's `naming.ts` (AGENTS.md lists the\n * copy): the spec generates both files and imports one from the other.\n */\nexport class Naming {\n\treadonly #config: CodegenMswConfig;\n\treadonly #convert: (name: string) => string;\n\n\tconstructor(config: CodegenMswConfig) {\n\t\tthis.#config = config;\n\t\tthis.#convert = converter(config.namingConvention);\n\t}\n\n\t/** An operation's variables type name: `SignUpMutationVariables`. */\n\tvariables(operation: string, kind: MockedKind): string {\n\t\treturn this.#wrap(\n\t\t\tthis.#convert(`${operation}${this.#suffix(operation, kind)}Variables`),\n\t\t);\n\t}\n\n\t/** An operation's result type name: `SignUpMutation`. */\n\tresult(operation: string, kind: MockedKind): string {\n\t\treturn this.#wrap(\n\t\t\tthis.#convert(`${operation}${this.#suffix(operation, kind)}`),\n\t\t);\n\t}\n\n\t/** The schema of the type named `type`: `zSignUpMutationVariables`. */\n\tschema(type: string): string {\n\t\treturn `${this.#config.schemaPrefix ?? 'z'}${type}`;\n\t}\n\n\t/** An operation's handler factory: `mockSignUpMutation`, no type prefix or suffix. */\n\thandler(operation: string, kind: MockedKind): string {\n\t\treturn `mock${this.#convert(`${operation}${this.#suffix(operation, kind)}`)}`;\n\t}\n\n\t/** As visitor-plugin-common's `getOperationSuffix`. */\n\t#suffix(operation: string, kind: MockedKind): string {\n\t\tconst type = changeCase.pascalCase(kind);\n\t\tconst { omitOperationSuffix, dedupeOperationSuffix } = this.#config;\n\t\treturn omitOperationSuffix ||\n\t\t\t(dedupeOperationSuffix &&\n\t\t\t\toperation.toLowerCase().endsWith(type.toLowerCase()))\n\t\t\t? ''\n\t\t\t: type;\n\t}\n\n\t#wrap(name: string): string {\n\t\treturn `${this.#config.typesPrefix ?? ''}${name}${this.#config.typesSuffix ?? ''}`;\n\t}\n}\n\ntype Convention = NonNullable<CodegenMswConfig['namingConvention']>;\ntype Case = (name: string) => string;\n\nconst lowerCaseFirst: Case = (name) =>\n\tname.charAt(0).toLowerCase() + name.slice(1);\nconst upperCaseFirst: Case = (name) =>\n\tname.charAt(0).toUpperCase() + name.slice(1);\n\n/**\n * The cases a `namingConvention` string can name, by module: change-case-all\n * 2's names (what the typescript plugins resolve), and change-case 5's.\n */\nconst cases: Readonly<Record<string, Readonly<Record<string, Case>>>> = {\n\t'change-case-all': {\n\t\tcamelCase: changeCase.camelCase,\n\t\tcapitalCase: changeCase.capitalCase,\n\t\tconstantCase: changeCase.constantCase,\n\t\tdotCase: changeCase.dotCase,\n\t\theaderCase: changeCase.trainCase,\n\t\tnoCase: changeCase.noCase,\n\t\tparamCase: changeCase.kebabCase,\n\t\tpascalCase: changeCase.pascalCase,\n\t\tpathCase: changeCase.pathCase,\n\t\tsentenceCase: changeCase.sentenceCase,\n\t\tsnakeCase: changeCase.snakeCase,\n\t\tlowerCase: (name) => name.toLowerCase(),\n\t\tupperCase: (name) => name.toUpperCase(),\n\t\tlowerCaseFirst,\n\t\tupperCaseFirst,\n\t},\n\t'change-case': {\n\t\tcamelCase: changeCase.camelCase,\n\t\tcapitalCase: changeCase.capitalCase,\n\t\tconstantCase: changeCase.constantCase,\n\t\tdotCase: changeCase.dotCase,\n\t\tkebabCase: changeCase.kebabCase,\n\t\tnoCase: changeCase.noCase,\n\t\tpascalCase: changeCase.pascalCase,\n\t\tpascalSnakeCase: changeCase.pascalSnakeCase,\n\t\tpathCase: changeCase.pathCase,\n\t\tsentenceCase: changeCase.sentenceCase,\n\t\tsnakeCase: changeCase.snakeCase,\n\t\ttrainCase: changeCase.trainCase,\n\t},\n};\n\n/** Applies `fn` to each part between underscores, or to the whole name. */\nconst byPart =\n\t(fn: Case, transformUnderscore: boolean): Case =>\n\t(name) =>\n\t\ttransformUnderscore ? fn(name) : name.split('_').map(fn).join('_');\n\n/**\n * A `namingConvention` as `@graphql-codegen/visitor-plugin-common`'s\n * `convertFactory` reads it for type names: undefined is PascalCase per\n * part; `'keep'`; a `'change-case-all#<case>'` string or a function, per\n * part; an object's `typeNames`, on the whole name, or, without\n * `typeNames`, PascalCase per part unless `transformUnderscore` is true.\n */\nfunction converter(convention: Convention | undefined): Case {\n\tif (convention === undefined) return byPart(changeCase.pascalCase, false);\n\tif (convention === 'keep') return (name) => name;\n\tif (typeof convention === 'function') return byPart(convention, false);\n\tif (typeof convention === 'string')\n\t\treturn byPart(caseNamed(convention), false);\n\tconst { typeNames, transformUnderscore } = convention;\n\tif (typeNames === 'keep') return (name) => name;\n\tif (typeNames === undefined)\n\t\treturn byPart(changeCase.pascalCase, transformUnderscore ?? false);\n\tconst fn = typeof typeNames === 'function' ? typeNames : caseNamed(typeNames);\n\treturn byPart(fn, true);\n}\n\nfunction caseNamed(spec: string): Case {\n\tconst [module = '', name = ''] = spec.split('#');\n\tconst fn = cases[module]?.[name];\n\tif (fn) return fn;\n\tthrow new Error(\n\t\t`@nxgt/graphql-codegen-msw: namingConvention \"${spec}\" is not one this plugin reads. Use 'keep', a function, or 'change-case-all#<case>' with one of ${Object.keys(cases['change-case-all'] ?? {}).join(', ')}.`,\n\t);\n}\n",
8
+ "import { Kind, type OperationDefinitionNode } from 'graphql';\nimport type { DocumentFile } from './config';\nimport type { MockedKind } from './naming';\n\n/** A named query, mutation or subscription of the documents. */\nexport interface MockedOperationNode {\n\treadonly name: string;\n\treadonly kind: MockedKind;\n\treadonly node: OperationDefinitionNode;\n}\n\n/**\n * Every named operation, in document order. An anonymous operation has no\n * name to match: it gets no handler.\n */\nexport function mockedOperations(\n\tdocuments: readonly DocumentFile[],\n): MockedOperationNode[] {\n\treturn documents\n\t\t.flatMap((file) => file.document?.definitions ?? [])\n\t\t.filter(\n\t\t\t(node): node is OperationDefinitionNode =>\n\t\t\t\tnode.kind === Kind.OPERATION_DEFINITION,\n\t\t)\n\t\t.flatMap((node) => {\n\t\t\tconst name = node.name?.value;\n\t\t\tconst kind = node.operation;\n\t\t\tif (!name) return [];\n\t\t\treturn [{ name, kind: kind as MockedKind, node }];\n\t\t});\n}\n",
9
9
  "import type { CodegenMswConfig } from './config';\n\n/** The plugin's name, before each of its messages. */\nconst NAME = '@nxgt/graphql-codegen-msw';\n\n/** How an invalid input is answered, as the config names it. */\nexport type InvalidInputChoice =\n\t| { readonly kind: 'invalid-input'; readonly translate?: ModuleExport }\n\t| { readonly kind: 'bad-user-input' }\n\t| { readonly kind: 'own'; readonly fn: ModuleExport };\n\n/** A `'<module>#<export>'` option, split. */\nexport interface ModuleExport {\n\treadonly module: string;\n\treadonly exported: string;\n}\n\n/** The options the plugin cannot write a file without, checked. */\nexport interface CheckedOptions {\n\treadonly endpoint: string;\n\treadonly schemasImport: string;\n\treadonly typesImport: string;\n\treadonly invalidInput: InvalidInputChoice;\n}\n\n/**\n * The config, checked before anything is written: each required option is\n * set, and `invalidInput` and `translate` say something this plugin reads.\n * Each message names the option and what to write; each has an entry in\n * docs/troubleshooting.md, headed by it.\n */\nexport function checkedOptions(config: CodegenMswConfig): CheckedOptions {\n\tconst endpoint = required(\n\t\tconfig,\n\t\t'endpoint',\n\t\t`set it to the URL your client sends its operations to, e.g. endpoint: 'https://api.example.com/graphql', or a path msw matches on any origin: '*/graphql'`,\n\t);\n\tconst schemasImport = required(\n\t\tconfig,\n\t\t'schemasImport',\n\t\t`point it at the file @nxgt/graphql-codegen-zod writes, as this file imports it, e.g. schemasImport: './zod'`,\n\t);\n\tconst typesImport = required(\n\t\tconfig,\n\t\t'typesImport',\n\t\t`point it at the module that exports each operation's result and variables types, as this file imports it: './graphql' for the client preset, or the file typescript-operations writes`,\n\t);\n\treturn {\n\t\tendpoint,\n\t\tschemasImport,\n\t\ttypesImport,\n\t\tinvalidInput: invalidInputOf(config),\n\t};\n}\n\nfunction required(\n\tconfig: CodegenMswConfig,\n\toption: 'endpoint' | 'schemasImport' | 'typesImport',\n\twhat: string,\n): string {\n\tconst value: unknown = config[option];\n\tif (typeof value === 'string' && value.trim() !== '') return value;\n\tthrow new Error(`${NAME}: ${option} is not set; ${what}.`);\n}\n\nfunction invalidInputOf(config: CodegenMswConfig): InvalidInputChoice {\n\tconst choice = config.invalidInput ?? 'invalid-input';\n\tconst translate =\n\t\tconfig.translate === undefined\n\t\t\t? undefined\n\t\t\t: moduleExport('translate', config.translate, './i18n#translate');\n\tif (choice === 'invalid-input')\n\t\treturn translate ? { kind: choice, translate } : { kind: choice };\n\tif (translate) {\n\t\tthrow new Error(\n\t\t\t`${NAME}: translate words the default invalidInput's messages only, and invalidInput is \"${choice}\". Remove translate, or translate inside your own function.`,\n\t\t);\n\t}\n\tif (choice === 'bad-user-input') return { kind: choice };\n\treturn {\n\t\tkind: 'own',\n\t\tfn: moduleExport('invalidInput', choice, './invalid-input#invalidInput'),\n\t};\n}\n\n/** `'<module>#<export>'` split in two, or an error naming the option. */\nfunction moduleExport(\n\toption: string,\n\tvalue: string,\n\texample: string,\n): ModuleExport {\n\tconst at = value.lastIndexOf('#');\n\tif (at <= 0 || at === value.length - 1) {\n\t\tconst choices =\n\t\t\toption === 'invalidInput' ? `'invalid-input', 'bad-user-input' or ` : '';\n\t\tthrow new Error(\n\t\t\t`${NAME}: ${option} is \"${value}\"; write ${choices}'<module>#<export>', e.g. '${example}'.`,\n\t\t);\n\t}\n\treturn { module: value.slice(0, at), exported: value.slice(at + 1) };\n}\n",
10
- "import type { GraphQLSchema } from 'graphql';\nimport type { CodegenMswConfig, DocumentFile } from './config';\nimport { Imports } from './imports';\nimport { inputTypesCode, variableTypesCode } from './input-types';\nimport { Naming } from './naming';\nimport { type MockedOperationNode, mockedOperations } from './operations';\nimport { type CheckedOptions, checkedOptions } from './options';\n\nexport type { CodegenMswConfig, DocumentFile } from './config';\n\n/** Where the generated file takes `mockOperation` and the refusals from. */\nconst RUNTIME = '@nxgt/graphql-codegen-msw/runtime';\n\n/**\n * The graphql-codegen plugin: one msw handler factory per named query and\n * mutation of `documents`, `mock<Operation>(resolver, options?)`, typed with\n * the operation's result and variables types, its variables checked with\n * `@nxgt/graphql-codegen-zod`'s schema before the resolver runs. The schema\n * gives the input types the variables reach, written once as `inputTypes`\n * for the answer to a value graphql refuses.\n */\nexport function plugin(\n\tschema: GraphQLSchema,\n\tdocuments: readonly DocumentFile[],\n\tconfig: CodegenMswConfig = {},\n): string {\n\tconst options = checkedOptions(config);\n\tconst naming = new Naming(config);\n\tconst operations = mockedOperations(documents);\n\tconst handlers = operations.map(({ name, kind }) =>\n\t\tnaming.handler(name, kind),\n\t);\n\tconst twice = handlers.find(\n\t\t(handler, index) => handlers.indexOf(handler) !== index,\n\t);\n\tif (twice) {\n\t\tthrow new Error(\n\t\t\t`@nxgt/graphql-codegen-msw: the file would declare ${twice} twice: two operations give it the same name. Rename one of them.`,\n\t\t);\n\t}\n\tconst imports = new Imports([\n\t\t'endpoint',\n\t\t'invalidInput',\n\t\t'inputTypes',\n\t\t...handlers,\n\t]);\n\t// Only what the file uses is imported: no operation, no handler types.\n\tconst any = operations.length > 0;\n\tconst handler = any ? imports.type('msw/graphql', 'GraphQLHandler') : '';\n\tconst runtime = {\n\t\tresolver: any ? imports.type(RUNTIME, 'GraphQLMockResolver') : '',\n\t\toptions: any ? imports.type(RUNTIME, 'MockOptions') : '',\n\t\tinvalidInput: imports.type(RUNTIME, 'InvalidInput'),\n\t\tinputTypes: any ? imports.type(RUNTIME, 'InputTypes') : '',\n\t\tmock: any ? imports.value(RUNTIME, 'mockOperation') : '',\n\t};\n\tconst refusal = refusalCode(options, imports);\n\tconst blocks = operations.map((operation) => {\n\t\tconst { name, kind } = operation;\n\t\tconst result = imports.type(options.typesImport, naming.result(name, kind));\n\t\tconst variables = imports.type(\n\t\t\toptions.typesImport,\n\t\t\tnaming.variables(name, kind),\n\t\t);\n\t\tconst schema = imports.value(\n\t\t\toptions.schemasImport,\n\t\t\tnaming.schema(naming.variables(name, kind)),\n\t\t);\n\t\treturn handlerBlock(operation, naming.handler(name, kind), {\n\t\t\t...runtime,\n\t\t\thandler,\n\t\t\tresult,\n\t\t\tvariables,\n\t\t\tschema,\n\t\t});\n\t});\n\treturn `${[\n\t\timports.lines().join('\\n'),\n\t\t`/** Where the client sends its operations; a handler's \\`options.endpoint\\` overrides it. */\\nexport const endpoint = ${JSON.stringify(options.endpoint)};`,\n\t\t`/** How an invalid input is answered, without calling the resolver. */\\nexport const invalidInput: ${runtime.invalidInput} = ${refusal};`,\n\t\t...(any ? [inputTypesBlock(schema, operations, runtime.inputTypes)] : []),\n\t\t...blocks,\n\t].join('\\n\\n')}\\n`;\n}\n\n/** The source of the `invalidInput` constant, its imports added. */\nfunction refusalCode(options: CheckedOptions, imports: Imports): string {\n\tconst choice = options.invalidInput;\n\tif (choice.kind === 'bad-user-input')\n\t\treturn imports.value(RUNTIME, 'badUserInputRefusal');\n\tif (choice.kind === 'own')\n\t\treturn imports.value(choice.fn.module, choice.fn.exported);\n\tconst refusal = imports.value(RUNTIME, 'invalidInputRefusal');\n\tif (!choice.translate) return `${refusal}()`;\n\tconst translate = imports.value(\n\t\tchoice.translate.module,\n\t\tchoice.translate.exported,\n\t);\n\treturn `${refusal}({ ${translate === 'translate' ? translate : `translate: ${translate}`} })`;\n}\n\n/** The file's private `inputTypes`, which every handler passes on. */\nfunction inputTypesBlock(\n\tschema: GraphQLSchema,\n\toperations: readonly MockedOperationNode[],\n\ttype: string,\n): string {\n\tconst code = inputTypesCode(\n\t\tschema,\n\t\toperations.map(({ node }) => node),\n\t);\n\treturn [\n\t\t'/**',\n\t\t' * The input types the variables reach, from the schema: how a handler words',\n\t\t' * a value graphql refuses. Internal: its shape may change in any version.',\n\t\t' */',\n\t\t`const inputTypes: ${type} = ${code};`,\n\t].join('\\n');\n}\n\n/** The local names one handler's source uses. */\ninterface HandlerNames {\n\treadonly handler: string;\n\treadonly resolver: string;\n\treadonly options: string;\n\treadonly mock: string;\n\treadonly result: string;\n\treadonly variables: string;\n\treadonly schema: string;\n}\n\nfunction handlerBlock(\n\t{ name, kind, node }: MockedOperationNode,\n\tfactory: string,\n\tnames: HandlerNames,\n): string {\n\tconst operation = `{ type: ${JSON.stringify(kind)}, name: ${JSON.stringify(name)}, variables: ${names.schema}, variableTypes: ${variableTypesCode(node)}, inputTypes, endpoint, invalidInput }`;\n\treturn [\n\t\t`/** Mocks the ${name} ${kind}: \\`resolver\\` answers once the variables pass \\`${names.schema}\\`. */`,\n\t\t`export function ${factory}(`,\n\t\t`\\tresolver: ${names.resolver}<${names.result}, ${names.variables}>,`,\n\t\t`\\toptions?: ${names.options},`,\n\t\t`): ${names.handler} {`,\n\t\t`\\treturn ${names.mock}(${operation}, resolver, options);`,\n\t\t'}',\n\t].join('\\n');\n}\n"
10
+ "import type { GraphQLSchema } from 'graphql';\nimport type { CodegenMswConfig, DocumentFile } from './config';\nimport { Imports } from './imports';\nimport { inputTypesCode, variableTypesCode } from './input-types';\nimport { Naming } from './naming';\nimport { type MockedOperationNode, mockedOperations } from './operations';\nimport { type CheckedOptions, checkedOptions } from './options';\n\nexport type { CodegenMswConfig, DocumentFile } from './config';\n\n/** Where the generated file takes `mockOperation` and the refusals from. */\nconst RUNTIME = '@nxgt/graphql-codegen-msw/runtime';\n\n/**\n * The graphql-codegen plugin: one msw handler factory per named query and\n * mutation of `documents`, `mock<Operation>(resolver, options?)`, typed with\n * the operation's result and variables types, its variables checked with\n * `@nxgt/graphql-codegen-zod`'s schema before the resolver runs. The schema\n * gives the input types the variables reach, written once as `inputTypes`\n * for the answer to a value graphql refuses.\n */\nexport function plugin(\n\tschema: GraphQLSchema,\n\tdocuments: readonly DocumentFile[],\n\tconfig: CodegenMswConfig = {},\n): string {\n\tconst options = checkedOptions(config);\n\tconst naming = new Naming(config);\n\tconst operations = mockedOperations(documents);\n\tconst handlers = operations.map(({ name, kind }) =>\n\t\tnaming.handler(name, kind),\n\t);\n\tconst twice = handlers.find(\n\t\t(handler, index) => handlers.indexOf(handler) !== index,\n\t);\n\tif (twice) {\n\t\tthrow new Error(\n\t\t\t`@nxgt/graphql-codegen-msw: the file would declare ${twice} twice: two operations give it the same name. Rename one of them.`,\n\t\t);\n\t}\n\tconst imports = new Imports([\n\t\t'endpoint',\n\t\t'invalidInput',\n\t\t'inputTypes',\n\t\t...handlers,\n\t]);\n\t// Only what the file uses is imported: no operation, no handler types.\n\tconst any = operations.length > 0;\n\tconst plain = operations.some(({ kind }) => kind !== 'subscription');\n\tconst handler = plain ? imports.type('msw/graphql', 'GraphQLHandler') : '';\n\tconst subscribing = operations.some(({ kind }) => kind === 'subscription');\n\tconst subscription = {\n\t\thandler: subscribing ? imports.type('msw', 'HttpHandler') : '',\n\t\texecutor: subscribing ? imports.type(RUNTIME, 'SubscriptionExecutor') : '',\n\t\tmock: subscribing ? imports.value(RUNTIME, 'mockSubscription') : '',\n\t};\n\tconst runtime = {\n\t\tresolver: plain ? imports.type(RUNTIME, 'GraphQLMockResolver') : '',\n\t\toptions: any ? imports.type(RUNTIME, 'MockOptions') : '',\n\t\tinvalidInput: imports.type(RUNTIME, 'InvalidInput'),\n\t\tinputTypes: any ? imports.type(RUNTIME, 'InputTypes') : '',\n\t\tmock: plain ? imports.value(RUNTIME, 'mockOperation') : '',\n\t};\n\tconst refusal = refusalCode(options, imports);\n\tconst blocks = operations.map((operation) => {\n\t\tconst { name, kind } = operation;\n\t\tconst factory = naming.handler(name, kind);\n\t\tif (kind === 'subscription') {\n\t\t\tconst schema = imports.value(\n\t\t\t\toptions.schemasImport,\n\t\t\t\tnaming.schema(naming.variables(name, kind)),\n\t\t\t);\n\t\t\treturn subscriptionBlock(operation, factory, {\n\t\t\t\t...subscription,\n\t\t\t\toptions: runtime.options,\n\t\t\t\tschema,\n\t\t\t});\n\t\t}\n\t\tconst result = imports.type(options.typesImport, naming.result(name, kind));\n\t\tconst variables = imports.type(\n\t\t\toptions.typesImport,\n\t\t\tnaming.variables(name, kind),\n\t\t);\n\t\tconst schema = imports.value(\n\t\t\toptions.schemasImport,\n\t\t\tnaming.schema(naming.variables(name, kind)),\n\t\t);\n\t\treturn handlerBlock(operation, factory, {\n\t\t\t...runtime,\n\t\t\thandler,\n\t\t\tresult,\n\t\t\tvariables,\n\t\t\tschema,\n\t\t});\n\t});\n\treturn `${[\n\t\timports.lines().join('\\n'),\n\t\t`/** Where the client sends its operations; a handler's \\`options.endpoint\\` overrides it. */\\nexport const endpoint = ${JSON.stringify(options.endpoint)};`,\n\t\t`/** How an invalid input is answered, without calling the resolver. */\\nexport const invalidInput: ${runtime.invalidInput} = ${refusal};`,\n\t\t...(any ? [inputTypesBlock(schema, operations, runtime.inputTypes)] : []),\n\t\t...blocks,\n\t].join('\\n\\n')}\\n`;\n}\n\n/** The source of the `invalidInput` constant, its imports added. */\nfunction refusalCode(options: CheckedOptions, imports: Imports): string {\n\tconst choice = options.invalidInput;\n\tif (choice.kind === 'bad-user-input')\n\t\treturn imports.value(RUNTIME, 'badUserInputRefusal');\n\tif (choice.kind === 'own')\n\t\treturn imports.value(choice.fn.module, choice.fn.exported);\n\tconst refusal = imports.value(RUNTIME, 'invalidInputRefusal');\n\tif (!choice.translate) return `${refusal}()`;\n\tconst translate = imports.value(\n\t\tchoice.translate.module,\n\t\tchoice.translate.exported,\n\t);\n\treturn `${refusal}({ ${translate === 'translate' ? translate : `translate: ${translate}`} })`;\n}\n\n/** The file's private `inputTypes`, which every handler passes on. */\nfunction inputTypesBlock(\n\tschema: GraphQLSchema,\n\toperations: readonly MockedOperationNode[],\n\ttype: string,\n): string {\n\tconst code = inputTypesCode(\n\t\tschema,\n\t\toperations.map(({ node }) => node),\n\t);\n\treturn [\n\t\t'/**',\n\t\t' * The input types the variables reach, from the schema: how a handler words',\n\t\t' * a value graphql refuses. Internal: its shape may change in any version.',\n\t\t' */',\n\t\t`const inputTypes: ${type} = ${code};`,\n\t].join('\\n');\n}\n\n/** The local names one handler's source uses. */\ninterface HandlerNames {\n\treadonly handler: string;\n\treadonly resolver: string;\n\treadonly options: string;\n\treadonly mock: string;\n\treadonly result: string;\n\treadonly variables: string;\n\treadonly schema: string;\n}\n\n/** The local names one subscription handler's source uses. */\ninterface SubscriptionNames {\n\treadonly handler: string;\n\treadonly executor: string;\n\treadonly options: string;\n\treadonly mock: string;\n\treadonly schema: string;\n}\n\nfunction subscriptionBlock(\n\t{ name, node }: MockedOperationNode,\n\tfactory: string,\n\tnames: SubscriptionNames,\n): string {\n\tconst operation = `{ type: \"subscription\", name: ${JSON.stringify(name)}, variables: ${names.schema}, variableTypes: ${variableTypesCode(node)}, inputTypes, endpoint, invalidInput }`;\n\treturn [\n\t\t`/** Mocks the ${name} subscription: a POST with \\`Accept: text/event-stream\\` is streamed by \\`execute\\` once the variables pass \\`${names.schema}\\`. */`,\n\t\t`export function ${factory}(`,\n\t\t`\\texecute: ${names.executor},`,\n\t\t`\\toptions?: ${names.options},`,\n\t\t`): ${names.handler} {`,\n\t\t`\\treturn ${names.mock}(${operation}, execute, options);`,\n\t\t'}',\n\t].join('\\n');\n}\n\nfunction handlerBlock(\n\t{ name, kind, node }: MockedOperationNode,\n\tfactory: string,\n\tnames: HandlerNames,\n): string {\n\tconst operation = `{ type: ${JSON.stringify(kind)}, name: ${JSON.stringify(name)}, variables: ${names.schema}, variableTypes: ${variableTypesCode(node)}, inputTypes, endpoint, invalidInput }`;\n\treturn [\n\t\t`/** Mocks the ${name} ${kind}: \\`resolver\\` answers once the variables pass \\`${names.schema}\\`. */`,\n\t\t`export function ${factory}(`,\n\t\t`\\tresolver: ${names.resolver}<${names.result}, ${names.variables}>,`,\n\t\t`\\toptions?: ${names.options},`,\n\t\t`): ${names.handler} {`,\n\t\t`\\treturn ${names.mock}(${operation}, resolver, options);`,\n\t\t'}',\n\t].join('\\n');\n}\n"
11
11
  ],
12
- "mappings": "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",
13
- "debugId": "9EF728C8AF82F3D964756E2164756E21",
12
+ "mappings": "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",
13
+ "debugId": "A301100766A457D164756E2164756E21",
14
14
  "names": []
15
15
  }
package/dist/naming.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import type { CodegenMswConfig } from './config.js';
2
2
  /** The operation kinds a handler is written for. */
3
- export type MockedKind = 'query' | 'mutation';
3
+ export type MockedKind = 'query' | 'mutation' | 'subscription';
4
4
  /**
5
5
  * The names the generated file uses: each type as `typescript-operations`
6
6
  * names it, each schema as `@nxgt/graphql-codegen-zod` names it (the type's
@@ -1 +1 @@
1
- {"version":3,"file":"naming.d.ts","sourceRoot":"","sources":["../src/naming.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEjD,oDAAoD;AACpD,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,UAAU,CAAC;AAE9C;;;;;;GAMG;AACH,qBAAa,MAAM;;gBAIN,MAAM,EAAE,gBAAgB;IAKpC,qEAAqE;IACrE,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,MAAM;IAMtD,yDAAyD;IACzD,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,MAAM;IAMnD,uEAAuE;IACvE,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAI5B,sFAAsF;IACtF,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,MAAM;CAkBpD"}
1
+ {"version":3,"file":"naming.d.ts","sourceRoot":"","sources":["../src/naming.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEjD,oDAAoD;AACpD,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,UAAU,GAAG,cAAc,CAAC;AAE/D;;;;;;GAMG;AACH,qBAAa,MAAM;;gBAIN,MAAM,EAAE,gBAAgB;IAKpC,qEAAqE;IACrE,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,MAAM;IAMtD,yDAAyD;IACzD,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,MAAM;IAMnD,uEAAuE;IACvE,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAI5B,sFAAsF;IACtF,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,MAAM;CAkBpD"}
@@ -1,17 +1,15 @@
1
1
  import { type OperationDefinitionNode } from 'graphql';
2
2
  import type { DocumentFile } from './config.js';
3
3
  import type { MockedKind } from './naming.js';
4
- /** A named query or mutation of the documents. */
4
+ /** A named query, mutation or subscription of the documents. */
5
5
  export interface MockedOperationNode {
6
6
  readonly name: string;
7
7
  readonly kind: MockedKind;
8
8
  readonly node: OperationDefinitionNode;
9
9
  }
10
10
  /**
11
- * Every named query and mutation, in document order. An anonymous
12
- * operation has no name for msw to match, and a subscription is not an
13
- * HTTP request msw's `query` or `mutation` handler answers: neither gets a
14
- * handler.
11
+ * Every named operation, in document order. An anonymous operation has no
12
+ * name to match: it gets no handler.
15
13
  */
16
14
  export declare function mockedOperations(documents: readonly DocumentFile[]): MockedOperationNode[];
17
15
  //# sourceMappingURL=operations.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["../src/operations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3C,kDAAkD;AAClD,MAAM,WAAW,mBAAmB;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,uBAAuB,CAAC;CACvC;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC/B,SAAS,EAAE,SAAS,YAAY,EAAE,GAChC,mBAAmB,EAAE,CAavB"}
1
+ {"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["../src/operations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3C,gEAAgE;AAChE,MAAM,WAAW,mBAAmB;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,uBAAuB,CAAC;CACvC;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC/B,SAAS,EAAE,SAAS,YAAY,EAAE,GAChC,mBAAmB,EAAE,CAavB"}
@@ -1,6 +1,7 @@
1
1
  export { type FieldError, type FieldIssue, fieldIssueOf, fieldsError, inputPath, invalidInputError, type Translate, } from '@nxgt/graphql-validation';
2
2
  export type { InputType, InputTypes } from './coercion/index.js';
3
3
  export { type GraphQLMockInfo, type GraphQLMockResolver, type MockedOperation, type MockOptions, mockOperation, } from './mock-operation.js';
4
+ export { type MockedSubscription, mockSubscription, type SubscriptionExecutor, } from './mock-subscription.js';
4
5
  export { badUserInputRefusal, type InvalidInput, type InvalidInputAnswer, invalidInputRefusal, type RefusedOperation, } from './refusals.js';
5
6
  export { type AnyGraphQLError, errorResponse, isGraphQLError, } from './response.js';
6
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACN,KAAK,UAAU,EACf,KAAK,UAAU,EACf,YAAY,EACZ,WAAW,EACX,SAAS,EACT,iBAAiB,EACjB,KAAK,SAAS,GACd,MAAM,0BAA0B,CAAC;AAClC,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EACN,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,aAAa,GACb,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACN,mBAAmB,EACnB,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,mBAAmB,EACnB,KAAK,gBAAgB,GACrB,MAAM,YAAY,CAAC;AACpB,OAAO,EACN,KAAK,eAAe,EACpB,aAAa,EACb,cAAc,GACd,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACN,KAAK,UAAU,EACf,KAAK,UAAU,EACf,YAAY,EACZ,WAAW,EACX,SAAS,EACT,iBAAiB,EACjB,KAAK,SAAS,GACd,MAAM,0BAA0B,CAAC;AAClC,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EACN,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,aAAa,GACb,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACN,KAAK,kBAAkB,EACvB,gBAAgB,EAChB,KAAK,oBAAoB,GACzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACN,mBAAmB,EACnB,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,mBAAmB,EACnB,KAAK,gBAAgB,GACrB,MAAM,YAAY,CAAC;AACpB,OAAO,EACN,KAAK,eAAe,EACpB,aAAa,EACb,cAAc,GACd,MAAM,YAAY,CAAC"}
@@ -553,15 +553,9 @@ function mockOperation(operation, resolver, options = {}) {
553
553
  const link = graphql.link(endpoint);
554
554
  const where = { type: operation.type, name: operation.name };
555
555
  return link[operation.type](operation.name, async (info) => {
556
- const checked = await operation.variables.safeParseAsync(info.variables);
557
- if (!checked.success) {
558
- const { issues } = checked.error;
559
- const refused = coercionErrors(issues, info, operation);
560
- if (refused.length > 0)
561
- return errorResponse(refused, { status: COERCION_STATUS });
562
- const { error, status } = await operation.invalidInput(issues, where);
563
- return errorResponse(error, { status });
564
- }
556
+ const refusal = await refuseInvalid(operation, info, where);
557
+ if (refusal)
558
+ return refusal;
565
559
  try {
566
560
  const answer = await resolver(info);
567
561
  assertNotIterator(answer, operation.name);
@@ -573,11 +567,69 @@ function mockOperation(operation, resolver, options = {}) {
573
567
  }
574
568
  }, handlerOptions);
575
569
  }
570
+ async function refuseInvalid(operation, info, where) {
571
+ const checked = await operation.variables.safeParseAsync(info.variables);
572
+ if (checked.success)
573
+ return;
574
+ const { issues } = checked.error;
575
+ const refused = coercionErrors(issues, info, operation);
576
+ if (refused.length > 0)
577
+ return errorResponse(refused, { status: COERCION_STATUS });
578
+ const { error, status } = await operation.invalidInput(issues, where);
579
+ return errorResponse(error, { status });
580
+ }
576
581
  function assertNotIterator(answer, name) {
577
582
  if (typeof answer === "object" && answer !== null && !(answer instanceof Response) && typeof answer.next === "function") {
578
583
  throw new TypeError(`@nxgt/graphql-codegen-msw: the resolver of ${name} returned an iterator (a generator function?). Each request's variables are checked before the resolver runs, which msw cannot do once it keeps an iterator: answer each request from a plain function, or register one handler per answer with { once: true }.`);
579
584
  }
580
585
  }
586
+ // src/runtime/mock-subscription.ts
587
+ import { Kind as Kind2, parse as parse2 } from "graphql";
588
+ import { http } from "msw";
589
+ function mockSubscription(operation, execute, options = {}) {
590
+ const { endpoint = operation.endpoint, ...handlerOptions } = options;
591
+ const where = { type: operation.type, name: operation.name };
592
+ return http.post(endpoint, async ({ request }) => {
593
+ if (!(request.headers.get("accept") ?? "").includes("text/event-stream"))
594
+ return;
595
+ const body = await bodyOf(request.clone());
596
+ if (!body || !isNamedSubscription(body, operation.name))
597
+ return;
598
+ const info = {
599
+ query: body.query,
600
+ operationName: body.operationName ?? operation.name,
601
+ variables: body.variables ?? {}
602
+ };
603
+ const refusal = await refuseInvalid(operation, info, where);
604
+ if (refusal)
605
+ return refusal;
606
+ return execute({
607
+ query: body.query,
608
+ variables: body.variables ?? null,
609
+ operationName: body.operationName ?? null,
610
+ request
611
+ });
612
+ }, handlerOptions);
613
+ }
614
+ async function bodyOf(request) {
615
+ try {
616
+ const body = await request.json();
617
+ if (typeof body === "object" && body !== null && typeof body.query === "string")
618
+ return body;
619
+ } catch {}
620
+ return;
621
+ }
622
+ function isNamedSubscription(body, name) {
623
+ let document;
624
+ try {
625
+ document = parse2(body.query);
626
+ } catch {
627
+ return false;
628
+ }
629
+ const operations = document.definitions.filter((node) => node.kind === Kind2.OPERATION_DEFINITION);
630
+ const selected = body.operationName ? operations.find((node) => node.name?.value === body.operationName) : operations.length === 1 ? operations[0] : undefined;
631
+ return selected?.operation === "subscription" && selected.name?.value === name;
632
+ }
581
633
  // src/runtime/refusals.ts
582
634
  import {
583
635
  badUserInput,
@@ -605,8 +657,9 @@ export {
605
657
  invalidInputError2 as invalidInputError,
606
658
  invalidInputRefusal,
607
659
  isGraphQLError,
608
- mockOperation
660
+ mockOperation,
661
+ mockSubscription
609
662
  };
610
663
 
611
- //# debugId=A78B80C245DE4C5F64756E2164756E21
664
+ //# debugId=91FE470D788D891964756E2164756E21
612
665
  //# sourceMappingURL=index.js.map
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/runtime/index.ts", "../src/runtime/mock-operation.ts", "../src/runtime/coercion/index.ts", "../src/runtime/coercion/document.ts", "../src/runtime/coercion/issues.ts", "../src/runtime/coercion/cross-inspect.ts", "../src/runtime/coercion/inspect.ts", "../src/runtime/coercion/suggestions.ts", "../src/runtime/coercion/messages.ts", "../src/runtime/coercion/validate.ts", "../src/runtime/response.ts", "../src/runtime/refusals.ts"],
3
+ "sources": ["../src/runtime/index.ts", "../src/runtime/mock-operation.ts", "../src/runtime/coercion/index.ts", "../src/runtime/coercion/document.ts", "../src/runtime/coercion/issues.ts", "../src/runtime/coercion/cross-inspect.ts", "../src/runtime/coercion/inspect.ts", "../src/runtime/coercion/suggestions.ts", "../src/runtime/coercion/messages.ts", "../src/runtime/coercion/validate.ts", "../src/runtime/response.ts", "../src/runtime/mock-subscription.ts", "../src/runtime/refusals.ts"],
4
4
  "sourcesContent": [
5
- "// What an `invalidInput` of your own builds its answer with, from\n// `@nxgt/graphql-validation`, so an application needs no direct import of it.\nexport {\n\ttype FieldError,\n\ttype FieldIssue,\n\tfieldIssueOf,\n\tfieldsError,\n\tinputPath,\n\tinvalidInputError,\n\ttype Translate,\n} from '@nxgt/graphql-validation';\nexport type { InputType, InputTypes } from './coercion';\nexport {\n\ttype GraphQLMockInfo,\n\ttype GraphQLMockResolver,\n\ttype MockedOperation,\n\ttype MockOptions,\n\tmockOperation,\n} from './mock-operation';\nexport {\n\tbadUserInputRefusal,\n\ttype InvalidInput,\n\ttype InvalidInputAnswer,\n\tinvalidInputRefusal,\n\ttype RefusedOperation,\n} from './refusals';\nexport {\n\ttype AnyGraphQLError,\n\terrorResponse,\n\tisGraphQLError,\n} from './response';\n",
6
- "import type {\n\tPath,\n\tRequestHandlerOptions,\n\tResponseResolverInfo,\n\tResponseResolverReturnType,\n} from 'msw';\nimport {\n\ttype GraphQLHandler,\n\ttype GraphQLQuery,\n\ttype GraphQLResponseBody,\n\ttype GraphQLVariables,\n\tgraphql,\n} from 'msw/graphql';\nimport type { z } from 'zod';\nimport { COERCION_STATUS, coercionErrors, type InputTypes } from './coercion';\nimport type { InvalidInput } from './refusals';\nimport { errorResponse, isGraphQLError } from './response';\n\n/**\n * What a resolver receives: msw's own resolver info for a GraphQL\n * operation (`variables`, `query`, `operationName`, `request`, `cookies`,\n * `requestId`, `finalize`), `variables` typed with the operation's\n * variables type. They are the variables as sent: checked, not parsed.\n */\nexport type GraphQLMockInfo<Variables extends GraphQLVariables> =\n\tResponseResolverInfo<{\n\t\tquery: string;\n\t\toperationName: string;\n\t\tvariables: Variables;\n\t\tcookies: Record<string, string>;\n\t}>;\n\n/**\n * A handler's resolver, as msw's `graphql.link(...).query(name, resolver)`\n * takes one, without its generator form: return\n * `HttpResponse.json({ data })`, an `errorResponse(...)`, or nothing to\n * let the next handler answer; throw a `GraphQLError` to answer with it.\n */\nexport type GraphQLMockResolver<\n\tResult extends GraphQLQuery,\n\tVariables extends GraphQLVariables,\n> = (\n\tinfo: GraphQLMockInfo<Variables>,\n) =>\n\t| ResponseResolverReturnType<GraphQLResponseBody<Result>>\n\t| Promise<ResponseResolverReturnType<GraphQLResponseBody<Result>>>;\n\n/** A handler's options: msw's (`once`), and an endpoint for this handler only. */\nexport interface MockOptions extends RequestHandlerOptions {\n\t/** Overrides the generated `endpoint` for this handler: a URL or a path msw matches. */\n\treadonly endpoint?: Path;\n}\n\n/** One operation, as the generated file describes it. */\nexport interface MockedOperation {\n\treadonly type: 'query' | 'mutation';\n\t/** The operation's name in the document: `SignUp`. */\n\treadonly name: string;\n\t/** The variables' schema, from `@nxgt/graphql-codegen-zod`: `zSignUpMutationVariables`. */\n\treadonly variables: z.ZodType;\n\t/**\n\t * Each variable's GraphQL type, with its default: `{ first: \"Int = 10\" }`.\n\t * Internal: written by the plugin for the coercion answer, its form may\n\t * change in any version together with the generated file. Defaults to\n\t * `{}`: no variable is walked, and every refusal goes to `invalidInput`.\n\t */\n\treadonly variableTypes?: Readonly<Record<string, string>> | undefined;\n\t/**\n\t * The input types the variables reach, from the schema. Internal, as\n\t * `variableTypes`; defaults to `{}`.\n\t */\n\treadonly inputTypes?: InputTypes | undefined;\n\treadonly endpoint: Path;\n\treadonly invalidInput: InvalidInput;\n}\n\n/**\n * An msw handler for one operation: `graphql.link(endpoint)`'s `query` or\n * `mutation` by the operation's name. Its variables are checked with the\n * operation's schema first, without calling `resolver` when they fail: a\n * value graphql refuses while coercing the variables (missing, null, of\n * the wrong type, an unknown enum value or field, an Int beyond 32 bits, a\n * value a custom scalar refuses) is answered as graphql-yoga answers it\n * (`coercionErrors`, status 400), whatever `invalidInput` is; any other\n * invalid input with `invalidInput`'s error and status. A `GraphQLError`\n * the resolver throws is answered as `errorResponse` answers it; anything\n * else it throws is msw's to answer (a 500).\n */\nexport function mockOperation<\n\tResult extends GraphQLQuery,\n\tVariables extends GraphQLVariables,\n>(\n\toperation: MockedOperation,\n\tresolver: GraphQLMockResolver<Result, Variables>,\n\toptions: MockOptions = {},\n): GraphQLHandler {\n\tconst { endpoint = operation.endpoint, ...handlerOptions } = options;\n\tconst link = graphql.link(endpoint);\n\tconst where = { type: operation.type, name: operation.name };\n\treturn link[operation.type](\n\t\toperation.name,\n\t\tasync (info) => {\n\t\t\tconst checked = await operation.variables.safeParseAsync(info.variables);\n\t\t\tif (!checked.success) {\n\t\t\t\tconst { issues } = checked.error;\n\t\t\t\t// The API refuses these while coercing the variables, before\n\t\t\t\t// its own validation: whatever invalidInput says.\n\t\t\t\tconst refused = coercionErrors(issues, info, operation);\n\t\t\t\tif (refused.length > 0)\n\t\t\t\t\treturn errorResponse(refused, { status: COERCION_STATUS });\n\t\t\t\t// A status no response can carry is ignored, as errorResponse\n\t\t\t\t// ignores it: the error's own, else 200.\n\t\t\t\tconst { error, status } = await operation.invalidInput(issues, where);\n\t\t\t\treturn errorResponse(error, { status });\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tconst answer = await resolver(info as GraphQLMockInfo<Variables>);\n\t\t\t\tassertNotIterator(answer, operation.name);\n\t\t\t\treturn answer;\n\t\t\t} catch (error) {\n\t\t\t\tif (isGraphQLError(error)) return errorResponse(error);\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t},\n\t\thandlerOptions,\n\t);\n}\n\n/**\n * msw would keep a generator's iterator and answer the next requests from\n * it without calling this handler's resolver again, so their variables would\n * go unchecked: refused instead.\n */\nfunction assertNotIterator(answer: unknown, name: string): void {\n\tif (\n\t\ttypeof answer === 'object' &&\n\t\tanswer !== null &&\n\t\t!(answer instanceof Response) &&\n\t\ttypeof (answer as { next?: unknown }).next === 'function'\n\t) {\n\t\tthrow new TypeError(\n\t\t\t`@nxgt/graphql-codegen-msw: the resolver of ${name} returned an iterator (a generator function?). Each request's variables are checked before the resolver runs, which msw cannot do once it keeps an iterator: answer each request from a plain function, or register one handler per answer with { once: true }.`,\n\t\t);\n\t}\n}\n",
5
+ "// What an `invalidInput` of your own builds its answer with, from\n// `@nxgt/graphql-validation`, so an application needs no direct import of it.\nexport {\n\ttype FieldError,\n\ttype FieldIssue,\n\tfieldIssueOf,\n\tfieldsError,\n\tinputPath,\n\tinvalidInputError,\n\ttype Translate,\n} from '@nxgt/graphql-validation';\nexport type { InputType, InputTypes } from './coercion';\nexport {\n\ttype GraphQLMockInfo,\n\ttype GraphQLMockResolver,\n\ttype MockedOperation,\n\ttype MockOptions,\n\tmockOperation,\n} from './mock-operation';\nexport {\n\ttype MockedSubscription,\n\tmockSubscription,\n\ttype SubscriptionExecutor,\n} from './mock-subscription';\nexport {\n\tbadUserInputRefusal,\n\ttype InvalidInput,\n\ttype InvalidInputAnswer,\n\tinvalidInputRefusal,\n\ttype RefusedOperation,\n} from './refusals';\nexport {\n\ttype AnyGraphQLError,\n\terrorResponse,\n\tisGraphQLError,\n} from './response';\n",
6
+ "import type {\n\tPath,\n\tRequestHandlerOptions,\n\tResponseResolverInfo,\n\tResponseResolverReturnType,\n} from 'msw';\nimport {\n\ttype GraphQLHandler,\n\ttype GraphQLQuery,\n\ttype GraphQLResponseBody,\n\ttype GraphQLVariables,\n\tgraphql,\n} from 'msw/graphql';\nimport type { z } from 'zod';\nimport { COERCION_STATUS, coercionErrors, type InputTypes } from './coercion';\nimport type { InvalidInput, RefusedOperation } from './refusals';\nimport { errorResponse, isGraphQLError } from './response';\n\n/**\n * What a resolver receives: msw's own resolver info for a GraphQL\n * operation (`variables`, `query`, `operationName`, `request`, `cookies`,\n * `requestId`, `finalize`), `variables` typed with the operation's\n * variables type. They are the variables as sent: checked, not parsed.\n */\nexport type GraphQLMockInfo<Variables extends GraphQLVariables> =\n\tResponseResolverInfo<{\n\t\tquery: string;\n\t\toperationName: string;\n\t\tvariables: Variables;\n\t\tcookies: Record<string, string>;\n\t}>;\n\n/**\n * A handler's resolver, as msw's `graphql.link(...).query(name, resolver)`\n * takes one, without its generator form: return\n * `HttpResponse.json({ data })`, an `errorResponse(...)`, or nothing to\n * let the next handler answer; throw a `GraphQLError` to answer with it.\n */\nexport type GraphQLMockResolver<\n\tResult extends GraphQLQuery,\n\tVariables extends GraphQLVariables,\n> = (\n\tinfo: GraphQLMockInfo<Variables>,\n) =>\n\t| ResponseResolverReturnType<GraphQLResponseBody<Result>>\n\t| Promise<ResponseResolverReturnType<GraphQLResponseBody<Result>>>;\n\n/** A handler's options: msw's (`once`), and an endpoint for this handler only. */\nexport interface MockOptions extends RequestHandlerOptions {\n\t/** Overrides the generated `endpoint` for this handler: a URL or a path msw matches. */\n\treadonly endpoint?: Path;\n}\n\n/** One operation, as the generated file describes it. */\nexport interface MockedOperation {\n\treadonly type: 'query' | 'mutation';\n\t/** The operation's name in the document: `SignUp`. */\n\treadonly name: string;\n\t/** The variables' schema, from `@nxgt/graphql-codegen-zod`: `zSignUpMutationVariables`. */\n\treadonly variables: z.ZodType;\n\t/**\n\t * Each variable's GraphQL type, with its default: `{ first: \"Int = 10\" }`.\n\t * Internal: written by the plugin for the coercion answer, its form may\n\t * change in any version together with the generated file. Defaults to\n\t * `{}`: no variable is walked, and every refusal goes to `invalidInput`.\n\t */\n\treadonly variableTypes?: Readonly<Record<string, string>> | undefined;\n\t/**\n\t * The input types the variables reach, from the schema. Internal, as\n\t * `variableTypes`; defaults to `{}`.\n\t */\n\treadonly inputTypes?: InputTypes | undefined;\n\treadonly endpoint: Path;\n\treadonly invalidInput: InvalidInput;\n}\n\n/**\n * An msw handler for one operation: `graphql.link(endpoint)`'s `query` or\n * `mutation` by the operation's name. Its variables are checked with the\n * operation's schema first, without calling `resolver` when they fail: a\n * value graphql refuses while coercing the variables (missing, null, of\n * the wrong type, an unknown enum value or field, an Int beyond 32 bits, a\n * value a custom scalar refuses) is answered as graphql-yoga answers it\n * (`coercionErrors`, status 400), whatever `invalidInput` is; any other\n * invalid input with `invalidInput`'s error and status. A `GraphQLError`\n * the resolver throws is answered as `errorResponse` answers it; anything\n * else it throws is msw's to answer (a 500).\n */\nexport function mockOperation<\n\tResult extends GraphQLQuery,\n\tVariables extends GraphQLVariables,\n>(\n\toperation: MockedOperation,\n\tresolver: GraphQLMockResolver<Result, Variables>,\n\toptions: MockOptions = {},\n): GraphQLHandler {\n\tconst { endpoint = operation.endpoint, ...handlerOptions } = options;\n\tconst link = graphql.link(endpoint);\n\tconst where = { type: operation.type, name: operation.name };\n\treturn link[operation.type](\n\t\toperation.name,\n\t\tasync (info) => {\n\t\t\tconst refusal = await refuseInvalid(operation, info, where);\n\t\t\tif (refusal) return refusal;\n\t\t\ttry {\n\t\t\t\tconst answer = await resolver(info as GraphQLMockInfo<Variables>);\n\t\t\t\tassertNotIterator(answer, operation.name);\n\t\t\t\treturn answer;\n\t\t\t} catch (error) {\n\t\t\t\tif (isGraphQLError(error)) return errorResponse(error);\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t},\n\t\thandlerOptions,\n\t);\n}\n\n/**\n * The answer to variables `operation.variables` refuses, or `undefined`\n * when they pass: a value graphql refuses while coercing is answered as\n * graphql-yoga answers it (status 400), any other with `invalidInput`.\n */\nexport async function refuseInvalid(\n\toperation: Pick<\n\t\tMockedOperation,\n\t\t'variables' | 'variableTypes' | 'inputTypes' | 'invalidInput'\n\t>,\n\tinfo: { query: string; operationName: string; variables: unknown },\n\twhere: RefusedOperation,\n): Promise<Response | undefined> {\n\tconst checked = await operation.variables.safeParseAsync(info.variables);\n\tif (checked.success) return undefined;\n\tconst { issues } = checked.error;\n\t// The API refuses these while coercing the variables, before its own\n\t// validation: whatever invalidInput says.\n\tconst refused = coercionErrors(issues, info, operation);\n\tif (refused.length > 0)\n\t\treturn errorResponse(refused, { status: COERCION_STATUS });\n\t// A status no response can carry is ignored, as errorResponse ignores\n\t// it: the error's own, else 200.\n\tconst { error, status } = await operation.invalidInput(issues, where);\n\treturn errorResponse(error, { status });\n}\n\n/**\n * msw would keep a generator's iterator and answer the next requests from\n * it without calling this handler's resolver again, so their variables would\n * go unchecked: refused instead.\n */\nfunction assertNotIterator(answer: unknown, name: string): void {\n\tif (\n\t\ttypeof answer === 'object' &&\n\t\tanswer !== null &&\n\t\t!(answer instanceof Response) &&\n\t\ttypeof (answer as { next?: unknown }).next === 'function'\n\t) {\n\t\tthrow new TypeError(\n\t\t\t`@nxgt/graphql-codegen-msw: the resolver of ${name} returned an iterator (a generator function?). Each request's variables are checked before the resolver runs, which msw cannot do once it keeps an iterator: answer each request from a plain function, or register one handler per answer with { once: true }.`,\n\t\t);\n\t}\n}\n",
7
7
  "// What graphql-yoga refuses while it coerces the variables, before any\n// resolver runs: a missing or null value for a non-null type, a value of the\n// wrong type, an unknown enum value, an unknown input field, an Int beyond\n// 32 bits, a value a custom scalar refuses. Measured on graphql-yoga 5.24\n// (@graphql-tools/executor 2, graphql 17): one error per problem,\n// `{ message, locations }`, status 400 whatever the Accept header. Only a\n// custom scalar's refusal has `extensions`: the `INVALID_SCALAR` ones\n// `zodScalar` puts in its error, which graphql keeps on the variable's.\n//\n// How coercion is decided: the variables are walked as graphql walks them\n// (`validate.ts`), over the input types the generated file describes from\n// the schema. A built-in scalar, an enum, an input object and the non-null\n// and list wrappers are judged as graphql judges them, from the declared\n// type and the value sent, never from a Zod issue; a custom scalar refuses\n// exactly where the operation's Zod schema has an issue at its position.\n// So the answer is graphql-yoga's whenever graphql would refuse, and empty\n// otherwise, when the issues are the API's own validation.\nimport type { GraphQLFormattedError, VariableDefinitionNode } from 'graphql';\nimport { GraphQLError } from 'graphql';\nimport type { z } from 'zod';\nimport {\n\tdeclared,\n\tdefinitionsOf,\n\ttype InputTypes,\n\tprintType,\n} from './document';\nimport { placed } from './issues';\nimport { variableRefusal } from './messages';\nimport { type Problem, validateValue, type Walk } from './validate';\n\nexport type { InputType, InputTypes } from './document';\nexport { STALE_FILE } from './validate';\n\n/** The status graphql-yoga answers a variable coercion error with. */\nexport const COERCION_STATUS = 400;\n\n/**\n * What the generated file says of an operation's variables. Without them\n * (a hand-written handler), no variable is walked.\n */\nexport interface DeclaredVariables {\n\t/** Each variable's type, with its default: `{ first: \"Int = 10\" }`. */\n\treadonly variableTypes?: Readonly<Record<string, string>> | undefined;\n\treadonly inputTypes?: InputTypes | undefined;\n}\n\n/** The request whose variables the operation's schema refused. */\nexport interface CoercedRequest {\n\treadonly query: string;\n\treadonly operationName: string;\n\treadonly variables: unknown;\n}\n\n/**\n * The errors graphql-yoga answers the request's variables with, in its\n * order (variables in declaration order, an object's fields in the\n * schema's, unknown fields last), each located at the variable's\n * definition in the query sent; empty when graphql takes every variable.\n */\nexport function coercionErrors(\n\tissues: readonly z.core.$ZodIssue[],\n\trequest: CoercedRequest,\n\toperation: DeclaredVariables,\n): GraphQLFormattedError[] {\n\tconst definitions = definitionsOf(request.query, request.operationName);\n\tconst sent =\n\t\ttypeof request.variables === 'object' && request.variables !== null\n\t\t\t? (request.variables as Record<string, unknown>)\n\t\t\t: {};\n\tconst walked = placed(issues);\n\tconst { variableTypes = {}, inputTypes = {} } = operation;\n\treturn Object.entries(variableTypes).flatMap(([name, source]) =>\n\t\tvariableMessages(name, source, sent, {\n\t\t\ttypes: inputTypes,\n\t\t\tissues: walked,\n\t\t\tproblems: [],\n\t\t}).map((refused) => located(refused, definitions.get(name))),\n\t);\n}\n\n/** One variable's messages, as @graphql-tools/executor's `getVariableValues` words them. */\nfunction variableMessages(\n\tname: string,\n\tsource: string,\n\tsent: Record<string, unknown>,\n\twalk: Walk,\n): Refused[] {\n\tconst { type, hasDefault } = declared(source);\n\tif (!Object.hasOwn(sent, name))\n\t\treturn type.kind === 'non-null' && !hasDefault\n\t\t\t? [{ message: variableRefusal.notProvided(name, printType(type)) }]\n\t\t\t: [];\n\tconst value = sent[name];\n\tif (value === null && type.kind === 'non-null')\n\t\treturn [{ message: variableRefusal.isNull(name, printType(type)) }];\n\tvalidateValue(walk, value, type, { path: [], zodPath: [name] });\n\treturn walk.problems.map(\n\t\t({ path, value: found, reason, extensions }: Problem) => ({\n\t\t\tmessage: variableRefusal.invalidValue(name, found, path, reason),\n\t\t\t...(extensions === undefined ? {} : { extensions }),\n\t\t}),\n\t);\n}\n\n/** One refusal: its message, and the `extensions` a custom scalar's error carries. */\ninterface Refused {\n\treadonly message: string;\n\treadonly extensions?: Record<string, unknown>;\n}\n\nfunction located(\n\t{ message, extensions }: Refused,\n\tdefinition: VariableDefinitionNode | undefined,\n): GraphQLFormattedError {\n\treturn new GraphQLError(message, {\n\t\t...(definition ? { nodes: definition } : {}),\n\t\t...(extensions === undefined ? {} : { extensions }),\n\t}).toJSON();\n}\n",
8
8
  "import {\n\tKind,\n\ttype OperationDefinitionNode,\n\tparse,\n\ttype VariableDefinitionNode,\n} from 'graphql';\n\n/**\n * One GraphQL type the variables reach, as the generated file describes it\n * from the schema: a built-in scalar (`String`, `Int`, `Float`, `Boolean`,\n * `ID`), a custom scalar, an enum and its values, or an input object and\n * the type of each field (`\"[String!]\"`, `\"Int! = 1\"` with a default).\n *\n * Internal: written by the plugin and read by the coercion answer only. Its\n * form may change in any version, together with the generated file.\n */\nexport type InputType =\n\t| { readonly kind: 'builtin' }\n\t| { readonly kind: 'scalar' }\n\t| { readonly kind: 'enum'; readonly values: readonly string[] }\n\t| {\n\t\t\treadonly kind: 'input';\n\t\t\treadonly fields: Readonly<Record<string, string>>;\n\t\t\treadonly oneOf?: true;\n\t };\n\n/** The input types of one generated file, by name. Internal, as `InputType`. */\nexport type InputTypes = Readonly<Record<string, InputType>>;\n\n/** A type as graphql-js walks it: non-null and list wrappers around a name. */\nexport type TypeRef =\n\t| { readonly kind: 'non-null'; readonly of: TypeRef }\n\t| { readonly kind: 'list'; readonly of: TypeRef }\n\t| { readonly kind: 'named'; readonly name: string };\n\n/** A variable's or an input field's declaration: its type, and whether it has a default. */\nexport interface Declared {\n\treadonly type: TypeRef;\n\treadonly hasDefault: boolean;\n}\n\n/** `\"[Int!]! = [1]\"` read: the type before ` = `, a default after it. */\nexport function declared(source: string): Declared {\n\tconst at = source.indexOf(' = ');\n\tconst printed = at === -1 ? source : source.slice(0, at);\n\treturn { type: typeRef(printed.trim()), hasDefault: at !== -1 };\n}\n\nfunction typeRef(printed: string): TypeRef {\n\tif (printed.endsWith('!'))\n\t\treturn { kind: 'non-null', of: typeRef(printed.slice(0, -1)) };\n\tif (printed.startsWith('[') && printed.endsWith(']'))\n\t\treturn { kind: 'list', of: typeRef(printed.slice(1, -1)) };\n\treturn { kind: 'named', name: printed };\n}\n\n/** A type as graphql-js prints it in a message: `[Int!]!`. */\nexport function printType(type: TypeRef): string {\n\tswitch (type.kind) {\n\t\tcase 'non-null':\n\t\t\treturn `${printType(type.of)}!`;\n\t\tcase 'list':\n\t\t\treturn `[${printType(type.of)}]`;\n\t\tdefault:\n\t\t\treturn type.name;\n\t}\n}\n\n/**\n * The variables' definitions of the operation named `name` in the query the\n * client sent, by variable: where each error is located. Empty when the\n * query does not parse.\n */\nexport function definitionsOf(\n\tquery: string,\n\tname: string,\n): ReadonlyMap<string, VariableDefinitionNode> {\n\tlet operations: OperationDefinitionNode[];\n\ttry {\n\t\toperations = parse(query).definitions.filter(\n\t\t\t(node): node is OperationDefinitionNode =>\n\t\t\t\tnode.kind === Kind.OPERATION_DEFINITION,\n\t\t);\n\t} catch {\n\t\treturn new Map();\n\t}\n\tconst operation =\n\t\toperations.find((node) => node.name?.value === name) ?? operations[0];\n\treturn new Map(\n\t\t(operation?.variableDefinitions ?? []).map((node) => [\n\t\t\tnode.variable.name.value,\n\t\t\tnode,\n\t\t]),\n\t);\n}\n",
9
9
  "import type { z } from 'zod';\n\n/** A Zod issue and its whole path inside the variables. */\nexport interface PlacedIssue {\n\treadonly path: readonly (string | number)[];\n\treadonly issue: z.core.$ZodIssue;\n}\n\n/**\n * Every issue with its whole path, a union's own issue followed by each of\n * its branches' (`@oneOf` and nested unions): a custom scalar's refusal may\n * sit in either branch. A list's item issues come from the pipe after its\n * shaping union, outside any union.\n */\nexport function placed(\n\tissues: readonly z.core.$ZodIssue[],\n\tprefix: readonly (string | number)[] = [],\n): PlacedIssue[] {\n\treturn issues.flatMap((issue) => {\n\t\tconst path = [...prefix, ...issue.path.map(segment)];\n\t\tconst own = { path, issue };\n\t\tif (issue.code !== 'invalid_union') return [own];\n\t\treturn [own, ...issue.errors.flatMap((branch) => placed(branch, path))];\n\t});\n}\n\nfunction segment(key: PropertyKey): string | number {\n\treturn typeof key === 'number' ? key : String(key);\n}\n\n/**\n * The first issue at `path` or below it: what a custom scalar's schema\n * refused there. A scalar built with `zodScalar` refuses with its schema's\n * first issue, which the client's schema, the same one, reports first too.\n */\nexport function issueAt(\n\tissues: readonly PlacedIssue[],\n\tpath: readonly (string | number)[],\n): z.core.$ZodIssue | undefined {\n\treturn issues.find(\n\t\t(placedIssue) =>\n\t\t\tplacedIssue.path.length >= path.length &&\n\t\t\tpath.every((key, index) => placedIssue.path[index] === key),\n\t)?.issue;\n}\n",
@@ -13,9 +13,10 @@
13
13
  "/*!\n * Messages ported from graphql-js 17.0.2 (src/type/scalars.ts,\n * src/type/definition.ts), https://github.com/graphql/graphql-js\n * Copyright (c) GraphQL Contributors\n * and from @graphql-tools/executor 2.0.3 (execution/validateInputValue,\n * execution/values), https://github.com/ardatan/graphql-tools\n * Copyright (c) 2020 The Guild, Inc.\n * @license MIT\n */\n\n// How graphql 17 words a value it refuses, as graphql-yoga 5 with\n// @graphql-tools/executor 2 answers it: the leaf scalars' and enums' own\n// messages, printed with graphql's `inspect`, and the input object's and\n// the variable's prefix, which the executor words and prints with\n// `cross-inspect`.\nimport type { z } from 'zod';\nimport { crossInspect } from './cross-inspect';\nimport { inspect } from './inspect';\nimport { didYouMean, suggestionList } from './suggestions';\n\nconst INT_MAX = 2_147_483_647;\nconst INT_MIN = -2_147_483_648;\n\n/** Why a built-in scalar refuses `value`, or undefined when it takes it. */\nexport function builtinRefusal(\n\tname: string,\n\tvalue: unknown,\n): string | undefined {\n\tconst found = inspect(value);\n\tswitch (name) {\n\t\tcase 'String':\n\t\t\treturn typeof value === 'string'\n\t\t\t\t? undefined\n\t\t\t\t: `String cannot represent a non string value: ${found}`;\n\t\tcase 'Boolean':\n\t\t\treturn typeof value === 'boolean'\n\t\t\t\t? undefined\n\t\t\t\t: `Boolean cannot represent a non boolean value: ${found}`;\n\t\tcase 'Float':\n\t\t\treturn typeof value === 'number' && Number.isFinite(value)\n\t\t\t\t? undefined\n\t\t\t\t: `Float cannot represent non numeric value: ${found}`;\n\t\tcase 'ID':\n\t\t\treturn typeof value === 'string' || Number.isInteger(value)\n\t\t\t\t? undefined\n\t\t\t\t: `ID cannot represent value: ${found}`;\n\t\tcase 'Int':\n\t\t\treturn intRefusal(value);\n\t\tdefault:\n\t\t\treturn undefined;\n\t}\n}\n\n/** Int's bound is decided from the declared type, never from a Zod issue. */\nfunction intRefusal(value: unknown): string | undefined {\n\tif (typeof value !== 'number' || !Number.isInteger(value))\n\t\treturn `Int cannot represent non-integer value: ${inspect(value)}`;\n\tif (value > INT_MAX || value < INT_MIN)\n\t\treturn `Int cannot represent non 32-bit signed integer value: ${inspect(value)}`;\n\treturn undefined;\n}\n\n/** Why the enum `name` refuses `value`, with graphql's suggestions. */\nexport function enumRefusal(\n\tname: string,\n\tvalues: readonly string[],\n\tvalue: unknown,\n): string | undefined {\n\tif (typeof value !== 'string') {\n\t\tconst found = inspect(value);\n\t\treturn `Enum \"${name}\" cannot represent non-string value: ${found}.${suggest(found, values)}`;\n\t}\n\tif (values.includes(value)) return undefined;\n\treturn `Value \"${value}\" does not exist in \"${name}\" enum.${suggest(value, values)}`;\n}\n\nfunction suggest(value: string, values: readonly string[]): string {\n\treturn didYouMean(suggestionList(value, values), 'the enum value');\n}\n\n/**\n * Why a custom scalar refuses the value, and the `extensions` it carries, as\n * a scalar built with `zodScalar` (`@nxgt/graphql-scalars`) words it: its\n * schema's first issue, which the client's schema, the same one, reports too.\n */\nexport function scalarRefusal(\n\tname: string,\n\tissue: z.core.$ZodIssue | undefined,\n): { reason: string; extensions: Record<string, unknown> } | undefined {\n\treturn (\n\t\tissue && {\n\t\t\treason: `${name} cannot represent this input: ${issue.message}`,\n\t\t\t// What `zodScalar` puts in its error, which graphql keeps on the\n\t\t\t// variable's.\n\t\t\textensions: { code: 'INVALID_SCALAR', scalar: name, reason: issue.code },\n\t\t}\n\t);\n}\n\n/** The input object messages, by what is wrong with the object. */\nexport const objectRefusal = {\n\tnotAnObject: (type: string, value: unknown) =>\n\t\t`Expected value of type \"${type}\" to be an object, found: ${crossInspect(value)}.`,\n\tmissingField: (type: string, field: string, object: unknown) =>\n\t\t`Expected value of type \"${type}\" to include required field \"${field}\", found: ${crossInspect(object)}.`,\n\tunknownField: (\n\t\ttype: string,\n\t\tfield: string,\n\t\tknown: readonly string[],\n\t\tobject: unknown,\n\t) => {\n\t\tconst suggestion = didYouMean(suggestionList(field, known));\n\t\treturn `Expected value of type \"${type}\" not to include unknown field \"${field}\"${suggestion ? `.${suggestion} Found` : ', found'}: ${crossInspect(object)}.`;\n\t},\n\toneOf: (type: string) =>\n\t\t`Within OneOf Input Object type \"${type}\", exactly one field must be specified, and the value for that field must be non-null.`,\n\tnotProvided: (type: string) =>\n\t\t`Expected a value of non-null type \"${type}\" to be provided.`,\n\tisNull: (type: string) =>\n\t\t`Expected value of non-null type \"${type}\" not to be null.`,\n};\n\n/** The messages about a variable itself, before its value is walked. */\nexport const variableRefusal = {\n\tnotProvided: (name: string, type: string) =>\n\t\t`Variable \"$${name}\" of required type \"${type}\" was not provided.`,\n\tisNull: (name: string, type: string) =>\n\t\t`Variable \"$${name}\" of non-null type \"${type}\" must not be null.`,\n\t/** `Variable \"$input\" got invalid value 1 at \"input.tags[0]\"; <reason>` */\n\tinvalidValue: (\n\t\tname: string,\n\t\tvalue: unknown,\n\t\tpath: readonly (string | number)[],\n\t\treason: string,\n\t) => {\n\t\tconst at =\n\t\t\tpath.length > 0\n\t\t\t\t? ` at \"${name}${path.map((key) => (typeof key === 'number' ? `[${key}]` : `.${key}`)).join('')}\"`\n\t\t\t\t: '';\n\t\treturn `Variable \"$${name}\" got invalid value ${crossInspect(value)}${at}; ${reason}`;\n\t},\n};\n",
14
14
  "/*!\n * Ported from @graphql-tools/executor 2.0.3 (execution/validateInputValue),\n * https://github.com/ardatan/graphql-tools\n * Copyright (c) 2020 The Guild, Inc.\n * itself a copy of graphql-js 17's validateInputValue,\n * https://github.com/graphql/graphql-js\n * Copyright (c) GraphQL Contributors\n * @license MIT\n */\n\n// @graphql-tools/executor 2.0.3's copy of graphql 17's `validateInputValue`,\n// the one it runs on each variable, walked over the generated input types:\n// the same problems, at the same paths, in the same order.\nimport {\n\tdeclared,\n\ttype InputType,\n\ttype InputTypes,\n\tprintType,\n\ttype TypeRef,\n} from './document';\nimport { issueAt, type PlacedIssue } from './issues';\nimport {\n\tbuiltinRefusal,\n\tenumRefusal,\n\tobjectRefusal,\n\tscalarRefusal,\n} from './messages';\n\ntype Path = readonly (string | number)[];\ntype InputObject = Extract<InputType, { kind: 'input' }>;\n\n/** One value graphql refuses: where, the value there, and why. */\nexport interface Problem {\n\treadonly path: Path;\n\treadonly value: unknown;\n\treadonly reason: string;\n\t/** What the refusing scalar puts in its error's `extensions`. */\n\treadonly extensions?: Record<string, unknown>;\n}\n\n/** What a walk reads, and the problems it found so far. */\nexport interface Walk {\n\treadonly types: InputTypes;\n\treadonly issues: readonly PlacedIssue[];\n\treadonly problems: Problem[];\n}\n\n/** Where a walk stands: graphql's path below the variable, and the Zod schema's. */\ninterface At {\n\treadonly path: Path;\n\t/**\n\t * From the variable's name. It differs from graphql's where a single\n\t * value stands for a list: the schema wraps it (`[0]`), graphql does not.\n\t */\n\treadonly zodPath: Path;\n}\n\n/** Walks `value` at `type`, recording each problem in `walk.problems`. */\nexport function validateValue(\n\twalk: Walk,\n\tvalue: unknown,\n\ttype: TypeRef,\n\tat: At,\n): void {\n\tif (type.kind === 'non-null') {\n\t\tif (value === undefined)\n\t\t\treport(walk, at, value, objectRefusal.notProvided(printType(type)));\n\t\telse if (value === null)\n\t\t\treport(walk, at, value, objectRefusal.isNull(printType(type)));\n\t\telse validateValue(walk, value, type.of, at);\n\t} else if (value === null || value === undefined) {\n\t\t// A nullable type takes null, and an absent field is the object's.\n\t} else if (type.kind === 'list') {\n\t\tvalidateList(walk, value, type.of, at);\n\t} else {\n\t\tvalidateNamed(walk, value, type.name, at);\n\t}\n}\n\nfunction validateList(walk: Walk, value: unknown, item: TypeRef, at: At): void {\n\tif (!Array.isArray(value)) {\n\t\tvalidateValue(walk, value, item, { ...at, zodPath: [...at.zodPath, 0] });\n\t\treturn;\n\t}\n\tvalue.forEach((element, index) => {\n\t\tvalidateValue(walk, element, item, {\n\t\t\tpath: [...at.path, index],\n\t\t\tzodPath: [...at.zodPath, index],\n\t\t});\n\t});\n}\n\n/** The spec scalars, judged as built-ins even when the file omits them. */\nconst BUILT_INS: ReadonlySet<string> = new Set([\n\t'String',\n\t'Int',\n\t'Float',\n\t'Boolean',\n\t'ID',\n]);\n\nfunction validateNamed(walk: Walk, value: unknown, name: string, at: At): void {\n\t// A name the generated file does not describe is judged as a custom\n\t// scalar is: refused only where the Zod schema refused it.\n\tconst named: InputType =\n\t\twalk.types[name] ??\n\t\t(BUILT_INS.has(name) ? { kind: 'builtin' } : { kind: 'scalar' });\n\tif (named.kind === 'input') {\n\t\tvalidateObject(walk, value, name, named, at);\n\t\treturn;\n\t}\n\tconst refusal = leafRefusal(walk, value, name, named, at);\n\tif (refusal !== undefined)\n\t\treport(walk, at, value, refusal.reason, refusal.extensions);\n}\n\nfunction leafRefusal(\n\twalk: Walk,\n\tvalue: unknown,\n\tname: string,\n\tnamed: Exclude<InputType, InputObject>,\n\tat: At,\n): { reason: string; extensions?: Record<string, unknown> } | undefined {\n\tswitch (named.kind) {\n\t\tcase 'builtin':\n\t\t\treturn plain(builtinRefusal(name, value));\n\t\tcase 'enum':\n\t\t\treturn plain(enumRefusal(name, named.values, value));\n\t\tcase 'scalar':\n\t\t\treturn scalarRefusal(name, issueAt(walk.issues, at.zodPath));\n\t\tdefault:\n\t\t\t// A kind this runtime does not know: the file was written by\n\t\t\t// another version of the plugin.\n\t\t\tthrow new Error(STALE_FILE);\n\t}\n}\n\nfunction plain(reason: string | undefined): { reason: string } | undefined {\n\treturn reason === undefined ? undefined : { reason };\n}\n\n/** Thrown on an input type whose `kind` this runtime does not know. */\nexport const STALE_FILE =\n\t'@nxgt/graphql-codegen-msw: the generated file was written by another version than the runtime; regenerate it';\n\nfunction validateObject(\n\twalk: Walk,\n\tvalue: unknown,\n\tname: string,\n\ttype: InputObject,\n\tat: At,\n): void {\n\tif (typeof value !== 'object' || value === null || Array.isArray(value)) {\n\t\treport(walk, at, value, objectRefusal.notAnObject(name, value));\n\t\treturn;\n\t}\n\tconst object = value as Record<string, unknown>;\n\tfor (const [field, source] of Object.entries(type.fields)) {\n\t\tconst { type: fieldType, hasDefault } = declared(source);\n\t\tconst fieldValue = Object.hasOwn(object, field) ? object[field] : undefined;\n\t\tif (fieldValue !== undefined)\n\t\t\tvalidateValue(walk, fieldValue, fieldType, {\n\t\t\t\tpath: [...at.path, field],\n\t\t\t\tzodPath: [...at.zodPath, field],\n\t\t\t});\n\t\telse if (fieldType.kind === 'non-null' && !hasDefault)\n\t\t\treport(walk, at, object, objectRefusal.missingField(name, field, object));\n\t}\n\tconst names = Object.keys(type.fields);\n\tconst known: string[] = [];\n\tfor (const key of Object.keys(object)) {\n\t\tif (object[key] === undefined) continue;\n\t\tif (Object.hasOwn(type.fields, key)) known.push(key);\n\t\telse\n\t\t\treport(\n\t\t\t\twalk,\n\t\t\t\tat,\n\t\t\t\tobject,\n\t\t\t\tobjectRefusal.unknownField(name, key, names, object),\n\t\t\t);\n\t}\n\tif (type.oneOf) validateOneOf(walk, object, name, known, at);\n}\n\n/** A `@oneOf` input object: exactly one field, and not null. */\nfunction validateOneOf(\n\twalk: Walk,\n\tobject: Record<string, unknown>,\n\tname: string,\n\tknown: readonly string[],\n\tat: At,\n): void {\n\tconst [only] = known;\n\tif (known.length !== 1 || only === undefined)\n\t\treport(walk, at, object, objectRefusal.oneOf(name));\n\telse if (object[only] === null)\n\t\treport(\n\t\t\twalk,\n\t\t\t{ ...at, path: [...at.path, only] },\n\t\t\tobject,\n\t\t\tobjectRefusal.oneOf(name),\n\t\t);\n}\n\nfunction report(\n\twalk: Walk,\n\tat: At,\n\tvalue: unknown,\n\treason: string,\n\textensions?: Record<string, unknown>,\n): void {\n\twalk.problems.push({\n\t\tpath: at.path,\n\t\tvalue,\n\t\treason,\n\t\t...(extensions === undefined ? {} : { extensions }),\n\t});\n}\n",
15
15
  "import type { GraphQLError, GraphQLFormattedError } from 'graphql';\nimport { HttpResponse } from 'msw';\n\n/** An error as a resolver throws it, or as it goes on the wire. */\nexport type AnyGraphQLError = GraphQLError | GraphQLFormattedError;\n\n/**\n * Whether `value` is a `GraphQLError`, from any copy of `graphql`: by its\n * name (or its `[object GraphQLError]` tag, which a subclass with its own\n * `name` keeps) and its `toJSON`, never `instanceof`, so an error your\n * application built with its own `graphql` is one too.\n */\nexport function isGraphQLError(value: unknown): value is GraphQLError {\n\treturn (\n\t\tvalue instanceof Error &&\n\t\t(value.name === 'GraphQLError' ||\n\t\t\tObject.prototype.toString.call(value) === '[object GraphQLError]') &&\n\t\ttypeof (value as { toJSON?: unknown }).toJSON === 'function'\n\t);\n}\n\n/**\n * `error` as the response carries it: a `GraphQLError`'s `toJSON()`, or\n * itself, without `extensions.http` and `extensions.unexpected`, which\n * graphql-yoga keeps for itself and never sends (an `extensions` left empty\n * goes too).\n */\nexport function formatted(error: AnyGraphQLError): GraphQLFormattedError {\n\tconst json = isGraphQLError(error) ? error.toJSON() : error;\n\tconst { extensions, ...rest } = json;\n\tif (extensions === undefined) return json;\n\tconst { http: _http, unexpected: _unexpected, ...kept } = extensions;\n\treturn Object.keys(kept).length > 0 ? { ...rest, extensions: kept } : rest;\n}\n\n/**\n * `status` when a response can carry it: an integer from 200 to 599 other\n * than 204, 205 and 304, which have no body.\n */\nfunction validStatus(status: unknown): number | undefined {\n\treturn typeof status === 'number' &&\n\t\tNumber.isInteger(status) &&\n\t\tstatus >= 200 &&\n\t\tstatus <= 599 &&\n\t\tstatus !== 204 &&\n\t\tstatus !== 205 &&\n\t\tstatus !== 304\n\t\t? status\n\t\t: undefined;\n}\n\n/** `extensions.http.status`, when it is a status a response can carry. */\nexport function statusOf(error: AnyGraphQLError): number | undefined {\n\tconst http = (error.extensions as { http?: { status?: unknown } } | undefined)\n\t\t?.http;\n\treturn validStatus(http?.status);\n}\n\n/**\n * A GraphQL response holding `errors` only, as graphql-yoga answers one:\n * `{ errors }`, each error without its `extensions.http` (see `formatted`),\n * at `status` when a response can carry it, else the highest\n * `extensions.http.status` among the errors, else 200. What a resolver\n * returns to refuse, as your server would:\n * `return errorResponse(fieldsError('conflict', fields, { status: 409 }))`.\n */\nexport function errorResponse(\n\terror: AnyGraphQLError | readonly AnyGraphQLError[],\n\tinit: { readonly status?: number } = {},\n): HttpResponse<{ errors: GraphQLFormattedError[] }> {\n\tconst errors = (Array.isArray(error) ? error : [error]) as AnyGraphQLError[];\n\tconst statuses = errors\n\t\t.map(statusOf)\n\t\t.filter((status) => status !== undefined);\n\tconst status =\n\t\tvalidStatus(init.status) ??\n\t\t(statuses.length > 0 ? Math.max(...statuses) : 200);\n\treturn HttpResponse.json({ errors: errors.map(formatted) }, { status });\n}\n",
16
- "import {\n\tbadUserInput,\n\tfieldIssueOf,\n\tinvalidInputError,\n\ttype Translate,\n} from '@nxgt/graphql-validation';\nimport { z } from 'zod';\nimport type { AnyGraphQLError } from './response';\n\n/** The operation whose variables were refused. */\nexport interface RefusedOperation {\n\treadonly type: 'query' | 'mutation';\n\t/** The operation's name in the document: `SignUp`. */\n\treadonly name: string;\n}\n\n/** What an invalid input is answered with: the one error, and the HTTP status. */\nexport interface InvalidInputAnswer {\n\treadonly error: AnyGraphQLError;\n\treadonly status: number;\n}\n\n/**\n * Answers an invalid input: the issues of the variables' Zod schema (each\n * `path` starting with the variable's name) and the operation, to the error\n * and status the handler responds with. The resolver is not called.\n */\nexport type InvalidInput = (\n\tissues: readonly z.core.$ZodIssue[],\n\toperation: RefusedOperation,\n) => InvalidInputAnswer | Promise<InvalidInputAnswer>;\n\n/**\n * The default answer: `invalidInputError`'s one 400 error, its `fields` the\n * issues in order through `fieldIssueOf` (`@nxgt/graphql-validation`'s),\n * each message `translate(code)`, or the code without a translator.\n */\nexport function invalidInputRefusal(\n\toptions: { readonly translate?: Translate } = {},\n): InvalidInput {\n\tconst { translate } = options;\n\treturn (issues) => ({\n\t\terror: invalidInputError(\n\t\t\tissues.map(fieldIssueOf),\n\t\t\ttranslate ? { translate } : {},\n\t\t),\n\t\tstatus: 400,\n\t});\n}\n\n/**\n * The answer `withValidation` gives: one `BAD_USER_INPUT` error,\n * `Invalid arguments for <operation>. <path>: <first message>`, its\n * `extensions.issues` each with its path inside the variables; status 200,\n * as a GraphQL server answers a resolver's error.\n */\nexport const badUserInputRefusal: InvalidInput = (issues, operation) => ({\n\terror: badUserInput(operation.name, new z.ZodError([...issues])),\n\tstatus: 200,\n});\n"
16
+ "import { type DocumentNode, Kind, parse } from 'graphql';\nimport { type HttpHandler, http } from 'msw';\nimport type { MockedOperation, MockOptions } from './mock-operation';\nimport { refuseInvalid } from './mock-operation';\n\n/**\n * What a subscription handler hands the request to: the shape of\n * `@nxgt/msw-graphql`'s `Executor` (`createExecutor({ schema })`), which\n * streams the schema's `Subscription` resolvers as graphql-sse distinct\n * connections. Declared here so this package needs no dependency on it.\n */\nexport type SubscriptionExecutor = (input: {\n\tquery: string;\n\tvariables?: Record<string, unknown> | null;\n\toperationName?: string | null;\n\trequest: Request;\n}) => Promise<Response>;\n\n/** One subscription, as the generated file describes it. */\nexport interface MockedSubscription extends Omit<MockedOperation, 'type'> {\n\treadonly type: 'subscription';\n}\n\ninterface Body {\n\treadonly query: string;\n\treadonly variables?: Record<string, unknown> | null;\n\treadonly operationName?: string | null;\n}\n\n/**\n * An msw handler for one subscription: a POST to the endpoint that asks for\n * `Accept: text/event-stream` and whose operation is the subscription named\n * `operation.name`. Its variables are checked as a query's are, then the\n * request goes to `execute`, whose response (the event stream) is the\n * answer. Any other request, including this subscription sent without the\n * event-stream `Accept`, is left to the next handler.\n */\nexport function mockSubscription(\n\toperation: MockedSubscription,\n\texecute: SubscriptionExecutor,\n\toptions: MockOptions = {},\n): HttpHandler {\n\tconst { endpoint = operation.endpoint, ...handlerOptions } = options;\n\tconst where = { type: operation.type, name: operation.name };\n\treturn http.post(\n\t\tendpoint,\n\t\tasync ({ request }) => {\n\t\t\tif (!(request.headers.get('accept') ?? '').includes('text/event-stream'))\n\t\t\t\treturn undefined;\n\t\t\tconst body = await bodyOf(request.clone());\n\t\t\tif (!body || !isNamedSubscription(body, operation.name)) return undefined;\n\t\t\tconst info = {\n\t\t\t\tquery: body.query,\n\t\t\t\toperationName: body.operationName ?? operation.name,\n\t\t\t\tvariables: body.variables ?? {},\n\t\t\t};\n\t\t\tconst refusal = await refuseInvalid(operation, info, where);\n\t\t\tif (refusal) return refusal;\n\t\t\treturn execute({\n\t\t\t\tquery: body.query,\n\t\t\t\tvariables: body.variables ?? null,\n\t\t\t\toperationName: body.operationName ?? null,\n\t\t\t\trequest,\n\t\t\t});\n\t\t},\n\t\thandlerOptions,\n\t);\n}\n\nasync function bodyOf(request: Request): Promise<Body | undefined> {\n\ttry {\n\t\tconst body: unknown = await request.json();\n\t\tif (\n\t\t\ttypeof body === 'object' &&\n\t\t\tbody !== null &&\n\t\t\ttypeof (body as { query?: unknown }).query === 'string'\n\t\t)\n\t\t\treturn body as Body;\n\t} catch {\n\t\t// Not JSON: not ours.\n\t}\n\treturn undefined;\n}\n\n/** Whether the operation the body selects is the subscription `name`. */\nfunction isNamedSubscription(body: Body, name: string): boolean {\n\tlet document: DocumentNode;\n\ttry {\n\t\tdocument = parse(body.query);\n\t} catch {\n\t\treturn false;\n\t}\n\tconst operations = document.definitions.filter(\n\t\t(node) => node.kind === Kind.OPERATION_DEFINITION,\n\t);\n\tconst selected = body.operationName\n\t\t? operations.find((node) => node.name?.value === body.operationName)\n\t\t: operations.length === 1\n\t\t\t? operations[0]\n\t\t\t: undefined;\n\treturn (\n\t\tselected?.operation === 'subscription' && selected.name?.value === name\n\t);\n}\n",
17
+ "import {\n\tbadUserInput,\n\tfieldIssueOf,\n\tinvalidInputError,\n\ttype Translate,\n} from '@nxgt/graphql-validation';\nimport { z } from 'zod';\nimport type { AnyGraphQLError } from './response';\n\n/** The operation whose variables were refused. */\nexport interface RefusedOperation {\n\treadonly type: 'query' | 'mutation' | 'subscription';\n\t/** The operation's name in the document: `SignUp`. */\n\treadonly name: string;\n}\n\n/** What an invalid input is answered with: the one error, and the HTTP status. */\nexport interface InvalidInputAnswer {\n\treadonly error: AnyGraphQLError;\n\treadonly status: number;\n}\n\n/**\n * Answers an invalid input: the issues of the variables' Zod schema (each\n * `path` starting with the variable's name) and the operation, to the error\n * and status the handler responds with. The resolver is not called.\n */\nexport type InvalidInput = (\n\tissues: readonly z.core.$ZodIssue[],\n\toperation: RefusedOperation,\n) => InvalidInputAnswer | Promise<InvalidInputAnswer>;\n\n/**\n * The default answer: `invalidInputError`'s one 400 error, its `fields` the\n * issues in order through `fieldIssueOf` (`@nxgt/graphql-validation`'s),\n * each message `translate(code)`, or the code without a translator.\n */\nexport function invalidInputRefusal(\n\toptions: { readonly translate?: Translate } = {},\n): InvalidInput {\n\tconst { translate } = options;\n\treturn (issues) => ({\n\t\terror: invalidInputError(\n\t\t\tissues.map(fieldIssueOf),\n\t\t\ttranslate ? { translate } : {},\n\t\t),\n\t\tstatus: 400,\n\t});\n}\n\n/**\n * The answer `withValidation` gives: one `BAD_USER_INPUT` error,\n * `Invalid arguments for <operation>. <path>: <first message>`, its\n * `extensions.issues` each with its path inside the variables; status 200,\n * as a GraphQL server answers a resolver's error.\n */\nexport const badUserInputRefusal: InvalidInput = (issues, operation) => ({\n\terror: badUserInput(operation.name, new z.ZodError([...issues])),\n\tstatus: 200,\n});\n"
17
18
  ],
18
- "mappings": "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",
19
- "debugId": "A78B80C245DE4C5F64756E2164756E21",
19
+ "mappings": "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",
20
+ "debugId": "91FE470D788D891964756E2164756E21",
20
21
  "names": []
21
22
  }
@@ -2,7 +2,7 @@ import type { Path, RequestHandlerOptions, ResponseResolverInfo, ResponseResolve
2
2
  import { type GraphQLHandler, type GraphQLQuery, type GraphQLResponseBody, type GraphQLVariables } from 'msw/graphql';
3
3
  import type { z } from 'zod';
4
4
  import { type InputTypes } from './coercion/index.js';
5
- import type { InvalidInput } from './refusals.js';
5
+ import type { InvalidInput, RefusedOperation } from './refusals.js';
6
6
  /**
7
7
  * What a resolver receives: msw's own resolver info for a GraphQL
8
8
  * operation (`variables`, `query`, `operationName`, `request`, `cookies`,
@@ -62,4 +62,14 @@ export interface MockedOperation {
62
62
  * else it throws is msw's to answer (a 500).
63
63
  */
64
64
  export declare function mockOperation<Result extends GraphQLQuery, Variables extends GraphQLVariables>(operation: MockedOperation, resolver: GraphQLMockResolver<Result, Variables>, options?: MockOptions): GraphQLHandler;
65
+ /**
66
+ * The answer to variables `operation.variables` refuses, or `undefined`
67
+ * when they pass: a value graphql refuses while coercing is answered as
68
+ * graphql-yoga answers it (status 400), any other with `invalidInput`.
69
+ */
70
+ export declare function refuseInvalid(operation: Pick<MockedOperation, 'variables' | 'variableTypes' | 'inputTypes' | 'invalidInput'>, info: {
71
+ query: string;
72
+ operationName: string;
73
+ variables: unknown;
74
+ }, where: RefusedOperation): Promise<Response | undefined>;
65
75
  //# sourceMappingURL=mock-operation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mock-operation.d.ts","sourceRoot":"","sources":["../../src/runtime/mock-operation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,IAAI,EACJ,qBAAqB,EACrB,oBAAoB,EACpB,0BAA0B,EAC1B,MAAM,KAAK,CAAC;AACb,OAAO,EACN,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EAErB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,EAAmC,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAC9E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG/C;;;;;GAKG;AACH,MAAM,MAAM,eAAe,CAAC,SAAS,SAAS,gBAAgB,IAC7D,oBAAoB,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,SAAS,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChC,CAAC,CAAC;AAEJ;;;;;GAKG;AACH,MAAM,MAAM,mBAAmB,CAC9B,MAAM,SAAS,YAAY,EAC3B,SAAS,SAAS,gBAAgB,IAC/B,CACH,IAAI,EAAE,eAAe,CAAC,SAAS,CAAC,KAE9B,0BAA0B,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,GACvD,OAAO,CAAC,0BAA0B,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAEpE,kFAAkF;AAClF,MAAM,WAAW,WAAY,SAAQ,qBAAqB;IACzD,wFAAwF;IACxF,QAAQ,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC;CACzB;AAED,yDAAyD;AACzD,MAAM,WAAW,eAAe;IAC/B,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,UAAU,CAAC;IACpC,sDAAsD;IACtD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,2FAA2F;IAC3F,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC;IAC9B;;;;;OAKG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC;IACtE;;;OAGG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IAC7C,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC;IACxB,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;CACpC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAC5B,MAAM,SAAS,YAAY,EAC3B,SAAS,SAAS,gBAAgB,EAElC,SAAS,EAAE,eAAe,EAC1B,QAAQ,EAAE,mBAAmB,CAAC,MAAM,EAAE,SAAS,CAAC,EAChD,OAAO,GAAE,WAAgB,GACvB,cAAc,CA+BhB"}
1
+ {"version":3,"file":"mock-operation.d.ts","sourceRoot":"","sources":["../../src/runtime/mock-operation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,IAAI,EACJ,qBAAqB,EACrB,oBAAoB,EACpB,0BAA0B,EAC1B,MAAM,KAAK,CAAC;AACb,OAAO,EACN,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EAErB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,EAAmC,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAC9E,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGjE;;;;;GAKG;AACH,MAAM,MAAM,eAAe,CAAC,SAAS,SAAS,gBAAgB,IAC7D,oBAAoB,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,SAAS,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChC,CAAC,CAAC;AAEJ;;;;;GAKG;AACH,MAAM,MAAM,mBAAmB,CAC9B,MAAM,SAAS,YAAY,EAC3B,SAAS,SAAS,gBAAgB,IAC/B,CACH,IAAI,EAAE,eAAe,CAAC,SAAS,CAAC,KAE9B,0BAA0B,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,GACvD,OAAO,CAAC,0BAA0B,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAEpE,kFAAkF;AAClF,MAAM,WAAW,WAAY,SAAQ,qBAAqB;IACzD,wFAAwF;IACxF,QAAQ,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC;CACzB;AAED,yDAAyD;AACzD,MAAM,WAAW,eAAe;IAC/B,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,UAAU,CAAC;IACpC,sDAAsD;IACtD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,2FAA2F;IAC3F,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC;IAC9B;;;;;OAKG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC;IACtE;;;OAGG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IAC7C,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC;IACxB,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;CACpC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAC5B,MAAM,SAAS,YAAY,EAC3B,SAAS,SAAS,gBAAgB,EAElC,SAAS,EAAE,eAAe,EAC1B,QAAQ,EAAE,mBAAmB,CAAC,MAAM,EAAE,SAAS,CAAC,EAChD,OAAO,GAAE,WAAgB,GACvB,cAAc,CAoBhB;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CAClC,SAAS,EAAE,IAAI,CACd,eAAe,EACf,WAAW,GAAG,eAAe,GAAG,YAAY,GAAG,cAAc,CAC7D,EACD,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,EAClE,KAAK,EAAE,gBAAgB,GACrB,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC,CAa/B"}
@@ -0,0 +1,28 @@
1
+ import { type HttpHandler } from 'msw';
2
+ import type { MockedOperation, MockOptions } from './mock-operation.js';
3
+ /**
4
+ * What a subscription handler hands the request to: the shape of
5
+ * `@nxgt/msw-graphql`'s `Executor` (`createExecutor({ schema })`), which
6
+ * streams the schema's `Subscription` resolvers as graphql-sse distinct
7
+ * connections. Declared here so this package needs no dependency on it.
8
+ */
9
+ export type SubscriptionExecutor = (input: {
10
+ query: string;
11
+ variables?: Record<string, unknown> | null;
12
+ operationName?: string | null;
13
+ request: Request;
14
+ }) => Promise<Response>;
15
+ /** One subscription, as the generated file describes it. */
16
+ export interface MockedSubscription extends Omit<MockedOperation, 'type'> {
17
+ readonly type: 'subscription';
18
+ }
19
+ /**
20
+ * An msw handler for one subscription: a POST to the endpoint that asks for
21
+ * `Accept: text/event-stream` and whose operation is the subscription named
22
+ * `operation.name`. Its variables are checked as a query's are, then the
23
+ * request goes to `execute`, whose response (the event stream) is the
24
+ * answer. Any other request, including this subscription sent without the
25
+ * event-stream `Accept`, is left to the next handler.
26
+ */
27
+ export declare function mockSubscription(operation: MockedSubscription, execute: SubscriptionExecutor, options?: MockOptions): HttpHandler;
28
+ //# sourceMappingURL=mock-subscription.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock-subscription.d.ts","sourceRoot":"","sources":["../../src/runtime/mock-subscription.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,WAAW,EAAQ,MAAM,KAAK,CAAC;AAC7C,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGrE;;;;;GAKG;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,KAAK,EAAE;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC3C,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,OAAO,EAAE,OAAO,CAAC;CACjB,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;AAExB,4DAA4D;AAC5D,MAAM,WAAW,kBAAmB,SAAQ,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC;IACxE,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;CAC9B;AAQD;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC/B,SAAS,EAAE,kBAAkB,EAC7B,OAAO,EAAE,oBAAoB,EAC7B,OAAO,GAAE,WAAgB,GACvB,WAAW,CA0Bb"}
@@ -3,7 +3,7 @@ import { z } from 'zod';
3
3
  import type { AnyGraphQLError } from './response.js';
4
4
  /** The operation whose variables were refused. */
5
5
  export interface RefusedOperation {
6
- readonly type: 'query' | 'mutation';
6
+ readonly type: 'query' | 'mutation' | 'subscription';
7
7
  /** The operation's name in the document: `SignUp`. */
8
8
  readonly name: string;
9
9
  }
@@ -1 +1 @@
1
- {"version":3,"file":"refusals.d.ts","sourceRoot":"","sources":["../../src/runtime/refusals.ts"],"names":[],"mappings":"AAAA,OAAO,EAIN,KAAK,SAAS,EACd,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,kDAAkD;AAClD,MAAM,WAAW,gBAAgB;IAChC,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,UAAU,CAAC;IACpC,sDAAsD;IACtD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACtB;AAED,kFAAkF;AAClF,MAAM,WAAW,kBAAkB;IAClC,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACxB;AAED;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG,CAC1B,MAAM,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,EACnC,SAAS,EAAE,gBAAgB,KACvB,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;AAEtD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAClC,OAAO,GAAE;IAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAA;CAAO,GAC9C,YAAY,CASd;AAED;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,EAAE,YAGhC,CAAC"}
1
+ {"version":3,"file":"refusals.d.ts","sourceRoot":"","sources":["../../src/runtime/refusals.ts"],"names":[],"mappings":"AAAA,OAAO,EAIN,KAAK,SAAS,EACd,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,kDAAkD;AAClD,MAAM,WAAW,gBAAgB;IAChC,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,UAAU,GAAG,cAAc,CAAC;IACrD,sDAAsD;IACtD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACtB;AAED,kFAAkF;AAClF,MAAM,WAAW,kBAAkB;IAClC,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACxB;AAED;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG,CAC1B,MAAM,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,EACnC,SAAS,EAAE,gBAAgB,KACvB,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;AAEtD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAClC,OAAO,GAAE;IAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAA;CAAO,GAC9C,YAAY,CASd;AAED;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,EAAE,YAGhC,CAAC"}
package/docs/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  | Page | Read it when |
6
6
  | --- | --- |
7
- | [Handlers](guide/handlers.md) | you want to know what the plugin writes: the handlers, where their types and schemas come from, naming, the endpoint, the resolver, how an invalid input is answered (`invalid-input`, `bad-user-input`, your own), tests under Node and Bun, and the runtime |
7
+ | [Handlers](guide/handlers.md) | you want to know what the plugin writes: the handlers, where their types and schemas come from, naming, the endpoint, the resolver, how an invalid input is answered (`invalid-input`, `bad-user-input`, your own), subscriptions over SSE, tests under Node and Bun, and the runtime |
8
8
 
9
9
  ## Reference
10
10
 
@@ -558,13 +558,60 @@ test('a missing user', async () => {
558
558
  ## What gets no handler
559
559
 
560
560
  - **An anonymous operation**: msw matches by name, and has none to match.
561
- - **A subscription**: msw 3 mocks subscriptions over WebSocket
562
- (`graphql-transport-ws`) only, through another resolver shape. See the
563
- [roadmap](../roadmap.md).
564
561
  - **A fragment**: it is not an operation.
565
562
 
566
563
  Persisted queries (a request with a hash and no query text) and batched
567
- requests (an array of operations in one POST) are not matched either.
564
+ requests (an array of operations in one POST) are not matched either: a body
565
+ without a `query` string, or an array, falls through to the next handler, a
566
+ subscription handler's included.
567
+
568
+ ## Subscriptions over SSE
569
+
570
+ A named `subscription` gets `mock<Name>Subscription(execute, options?)`, an
571
+ msw `HttpHandler` that answers only a POST to the endpoint with
572
+ `Accept: text/event-stream` whose operation is that subscription. It checks
573
+ the variables as a query's are, then hands the request to `execute`, which
574
+ streams it. Pass `createExecutor({ schema })` from
575
+ [`@nxgt/msw-graphql`](https://www.npmjs.com/package/@nxgt/msw-graphql) (0.4.0
576
+ or later) and the stream comes from the schema's `Subscription` resolvers
577
+ (graphql-sse distinct connections: `next` events, then `complete`), with no
578
+ wrapper around `fetch`. Any other request, this subscription sent without the
579
+ event-stream `Accept` included, goes on to the next handler.
580
+
581
+ ```ts
582
+ import { createExecutor } from '@nxgt/msw-graphql';
583
+ import { buildMockSchema } from '@nxgt/msw-graphql/schema';
584
+ import { mockItemChangedSubscription } from './generated/msw';
585
+
586
+ const typeDefs = `
587
+ type Item { id: ID!, name: String! }
588
+ type Query { item(id: ID!): Item }
589
+ type Subscription { itemChanged(id: ID!): Item }
590
+ `;
591
+
592
+ const schema = buildMockSchema({
593
+ typeDefs,
594
+ resolvers: {
595
+ Subscription: {
596
+ itemChanged: {
597
+ subscribe: async function* (_, { id }) {
598
+ yield { itemChanged: { id, name: 'first' } };
599
+ },
600
+ },
601
+ },
602
+ },
603
+ });
604
+
605
+ server.use(mockItemChangedSubscription(createExecutor({ schema })));
606
+ ```
607
+
608
+ `execute` is any `(input: { query, variables, operationName, request }) =>
609
+ Promise<Response>`; this package does not depend on `@nxgt/msw-graphql`.
610
+
611
+ The handler is `mockSubscription` from the runtime; a `SubscriptionExecutor`
612
+ is the type of `execute`. An invalid input is refused before the stream with a
613
+ real status and a JSON `{ errors }`, as for a query. msw 3's WebSocket
614
+ subscriptions (`graphql-transport-ws`) are not generated.
568
615
 
569
616
  ## The runtime
570
617
 
package/docs/roadmap.md CHANGED
@@ -15,10 +15,8 @@ Candidates, not commitments.
15
15
 
16
16
  ## Later
17
17
 
18
- - **Subscriptions.** msw 3 mocks them over WebSocket (`graphql-transport-ws`)
19
- only, with a resolver that publishes rather than answers, and an invalid
20
- input has no HTTP status there. `@nxgt/graphql-client` subscribes over SSE,
21
- which msw's GraphQL subscription handler does not intercept.
18
+ - **msw WebSocket subscriptions** (`graphql-transport-ws`), with a resolver
19
+ that publishes rather than answers; SSE subscriptions are shipped.
22
20
  - **Persisted queries**: matching a request that carries a hash and no query
23
21
  text (`documentId`, APQ).
24
22
  - **Batched requests**: answering an array of operations posted at once.
@@ -31,6 +29,9 @@ Candidates, not commitments.
31
29
 
32
30
  ## Shipped
33
31
 
32
+ - **Subscription handlers** — `mock<Name>Subscription(execute)` streams a
33
+ subscription sent with `Accept: text/event-stream` through
34
+ `@nxgt/msw-graphql`'s executor, from the schema's `Subscription` resolvers.
34
35
  - **The first release** — 0.1.0. One typed msw 3 handler per named query
35
36
  and mutation, its variables checked with `@nxgt/graphql-codegen-zod`'s
36
37
  schemas, a value the API cannot coerce answered as graphql-yoga answers it
@@ -128,10 +128,8 @@ would collide, as their types do in the typescript plugins' files.
128
128
 
129
129
  **When:** an operation is in the documents, but the generated file has no
130
130
  `mock…` for it.
131
- **Why:** it is anonymous (msw matches by name), or a subscription (msw 3 mocks
132
- subscriptions over WebSocket only; see the [roadmap](roadmap.md)).
133
- **Fix:** name the operation. For a subscription, use msw's own
134
- `graphql.link(endpoint).subscription(name, resolver)`.
131
+ **Why:** it is anonymous (msw matches by name).
132
+ **Fix:** name the operation.
135
133
 
136
134
  ## The generated file
137
135
 
@@ -302,3 +300,11 @@ schema, and their shape may change with this package.
302
300
  and `toJSON`) is answered as a GraphQL error; anything else is msw's, which
303
301
  answers 500.
304
302
  **Fix:** throw a `GraphQLError`, or return `errorResponse(...)`.
303
+
304
+ ### A subscription handler never answers
305
+
306
+ **When:** `mock<Name>Subscription(execute)` is registered, but the request
307
+ falls through to the next handler or is unhandled.
308
+ **Why:** it answers only a POST with `Accept: text/event-stream` whose
309
+ operation is that subscription, named in the document (or by `operationName`).
310
+ **Fix:** send the header, and name the subscription operation.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@nxgt/graphql-codegen-msw",
3
- "version": "0.2.2",
4
- "description": "A graphql-codegen plugin that writes one typed msw 3 handler per named query and mutation, its variables checked by the Zod schemas of @nxgt/graphql-codegen-zod and an invalid input answered as your API answers it",
3
+ "version": "0.3.1",
4
+ "description": "A graphql-codegen plugin that writes one typed msw 3 handler per named query, mutation and subscription, its variables checked by the Zod schemas of @nxgt/graphql-codegen-zod and an invalid input answered as your API answers it",
5
5
  "license": "MIT",
6
6
  "type": "module",
7
7
  "main": "./dist/index.js",
@@ -59,14 +59,14 @@
59
59
  ]
60
60
  },
61
61
  "dependencies": {
62
- "@nxgt/graphql-validation": "^0.8.0",
62
+ "@nxgt/graphql-validation": "^0.9.0",
63
63
  "change-case": "^5.4.4"
64
64
  },
65
65
  "devDependencies": {
66
66
  "@graphql-codegen/typescript": "6.1.2",
67
67
  "@graphql-codegen/typescript-operations": "6.1.10",
68
68
  "@mswjs/interceptors": "0.45.7",
69
- "@nxgt/graphql-codegen-zod": "^0.3.6",
69
+ "@nxgt/graphql-codegen-zod": "^0.4.1",
70
70
  "@types/bun": "^1.4.0",
71
71
  "graphql": "16.11.0",
72
72
  "msw": "3.0.3",