nitro-graphql 2.0.0-beta.72 → 2.0.0-beta.73

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.
Files changed (187) hide show
  1. package/README.md +1 -1
  2. package/dist/cli/adapter.d.mts +0 -3
  3. package/dist/cli/adapter.mjs +6 -29
  4. package/dist/cli/commands/generate.mjs +2 -2
  5. package/dist/cli/config.d.mts +4 -5
  6. package/dist/cli/config.mjs +3 -1
  7. package/dist/cli/index.d.mts +3 -6
  8. package/dist/cli/index.mjs +1 -1
  9. package/dist/cli/server/graphql-handler.mjs +2 -1
  10. package/dist/cli/server/watcher.mjs +1 -1
  11. package/dist/core/codegen/client.d.mts +4 -27
  12. package/dist/core/codegen/client.mjs +26 -445
  13. package/dist/core/codegen/file-header.d.mts +7 -0
  14. package/dist/core/codegen/file-header.mjs +12 -0
  15. package/dist/core/codegen/index.d.mts +7 -5
  16. package/dist/core/codegen/index.mjs +7 -5
  17. package/dist/core/codegen/{runtime.d.mts → runtime-generator.d.mts} +1 -1
  18. package/dist/core/codegen/{runtime.mjs → runtime-generator.mjs} +1 -1
  19. package/dist/core/codegen/schema-loader.d.mts +2 -7
  20. package/dist/core/codegen/schema-loader.mjs +65 -70
  21. package/dist/core/codegen/server-type-helpers.d.mts +14 -0
  22. package/dist/core/codegen/server-type-helpers.mjs +76 -0
  23. package/dist/core/codegen/server.d.mts +1 -15
  24. package/dist/core/codegen/server.mjs +15 -105
  25. package/dist/core/codegen/subscription-extractor.d.mts +20 -0
  26. package/dist/core/codegen/subscription-extractor.mjs +30 -0
  27. package/dist/core/codegen/vue-subscription-builder.d.mts +10 -0
  28. package/dist/core/codegen/vue-subscription-builder.mjs +351 -0
  29. package/dist/core/constants.d.mts +5 -53
  30. package/dist/core/constants.mjs +13 -54
  31. package/dist/core/create-config.d.mts +31 -0
  32. package/dist/core/create-config.mjs +42 -0
  33. package/dist/core/debug/index.d.mts +2 -2
  34. package/dist/core/debug/index.mjs +2 -2
  35. package/dist/core/debug/template.d.mts +1 -5
  36. package/dist/core/debug/template.mjs +1 -1
  37. package/dist/core/extend/loader.d.mts +0 -1
  38. package/dist/core/extend/loader.mjs +59 -89
  39. package/dist/core/index.d.mts +22 -17
  40. package/dist/core/index.mjs +19 -15
  41. package/dist/core/manifest.mjs +3 -1
  42. package/dist/core/pubsub/index.d.mts +2 -109
  43. package/dist/core/pubsub/index.mjs +1 -145
  44. package/dist/core/pubsub/memory-pubsub.d.mts +109 -0
  45. package/dist/core/pubsub/memory-pubsub.mjs +146 -0
  46. package/dist/core/scanning/ast-scanner.mjs +4 -2
  47. package/dist/core/scanning/directives.mjs +2 -3
  48. package/dist/core/scanning/documents.d.mts +4 -3
  49. package/dist/core/scanning/documents.mjs +1 -1
  50. package/dist/core/scanning/{common.d.mts → file-scanner.d.mts} +1 -1
  51. package/dist/core/scanning/{common.mjs → file-scanner.mjs} +2 -10
  52. package/dist/core/scanning/index.d.mts +3 -3
  53. package/dist/core/scanning/index.mjs +3 -3
  54. package/dist/core/scanning/resolvers.mjs +8 -9
  55. package/dist/core/scanning/schemas.d.mts +1 -5
  56. package/dist/core/scanning/schemas.mjs +2 -24
  57. package/dist/core/schema/builder.d.mts +4 -2
  58. package/dist/core/schema/builder.mjs +4 -2
  59. package/dist/core/schema/index.d.mts +2 -2
  60. package/dist/core/schema/index.mjs +2 -2
  61. package/dist/core/server/apollo.d.mts +20 -0
  62. package/dist/core/server/apollo.mjs +54 -0
  63. package/dist/core/server/index.d.mts +4 -2
  64. package/dist/core/server/index.mjs +3 -2
  65. package/dist/core/server/types.d.mts +7 -14
  66. package/dist/core/server/types.mjs +15 -1
  67. package/dist/core/server/yoga.d.mts +1 -7
  68. package/dist/core/server/yoga.mjs +4 -13
  69. package/dist/core/types/adapter.d.mts +4 -39
  70. package/dist/core/types/codegen.d.mts +22 -45
  71. package/dist/core/types/config.d.mts +33 -121
  72. package/dist/core/types/define.d.mts +8 -5
  73. package/dist/core/types/index.d.mts +5 -4
  74. package/dist/core/types/scanning.d.mts +4 -1
  75. package/dist/core/types/standard-schema.d.mts +64 -0
  76. package/dist/core/utils/directive-parser.d.mts +8 -63
  77. package/dist/core/utils/directive-parser.mjs +114 -166
  78. package/dist/core/utils/file-io.d.mts +1 -5
  79. package/dist/core/utils/file-io.mjs +1 -11
  80. package/dist/core/utils/index.d.mts +5 -4
  81. package/dist/core/utils/index.mjs +6 -5
  82. package/dist/core/utils/logger.d.mts +1 -10
  83. package/dist/core/utils/logger.mjs +1 -19
  84. package/dist/core/utils/ofetch-templates.mjs +3 -4
  85. package/dist/core/utils/runtime.d.mts +1 -30
  86. package/dist/core/utils/runtime.mjs +2 -44
  87. package/dist/core/utils/string.d.mts +10 -0
  88. package/dist/core/utils/string.mjs +12 -0
  89. package/dist/core/watcher/create-watcher.d.mts +103 -0
  90. package/dist/core/watcher/create-watcher.mjs +143 -0
  91. package/dist/core/watcher/index.d.mts +2 -107
  92. package/dist/core/watcher/index.mjs +1 -139
  93. package/dist/define.d.mts +4 -2
  94. package/dist/define.mjs +7 -6
  95. package/dist/index.d.mts +4 -3
  96. package/dist/index.mjs +1 -1
  97. package/dist/nitro/adapter.d.mts +6 -10
  98. package/dist/nitro/adapter.mjs +12 -42
  99. package/dist/nitro/codegen/client-types.d.mts +12 -0
  100. package/dist/nitro/codegen/client-types.mjs +73 -0
  101. package/dist/nitro/codegen/external-types.d.mts +8 -0
  102. package/dist/nitro/codegen/external-types.mjs +47 -0
  103. package/dist/nitro/codegen/index.d.mts +4 -0
  104. package/dist/nitro/codegen/index.mjs +4 -0
  105. package/dist/nitro/codegen/server-types.d.mts +12 -0
  106. package/dist/nitro/codegen/server-types.mjs +81 -0
  107. package/dist/nitro/defaults.d.mts +28 -0
  108. package/dist/nitro/defaults.mjs +34 -0
  109. package/dist/nitro/index.d.mts +11 -3
  110. package/dist/nitro/index.mjs +1 -1
  111. package/dist/nitro/paths.d.mts +3 -2
  112. package/dist/nitro/paths.mjs +13 -9
  113. package/dist/nitro/rollup.mjs +4 -3
  114. package/dist/nitro/routes/_ws-handler.d.mts +6 -0
  115. package/dist/nitro/routes/_ws-handler.mjs +49 -0
  116. package/dist/nitro/routes/apollo-server-ws.d.mts +1 -1
  117. package/dist/nitro/routes/apollo-server-ws.mjs +9 -44
  118. package/dist/nitro/routes/apollo-server.d.mts +1 -1
  119. package/dist/nitro/routes/apollo-server.mjs +16 -55
  120. package/dist/nitro/routes/debug.d.mts +1 -1
  121. package/dist/nitro/routes/debug.mjs +1 -0
  122. package/dist/nitro/routes/graphql-yoga-ws.d.mts +1 -1
  123. package/dist/nitro/routes/graphql-yoga-ws.mjs +6 -44
  124. package/dist/nitro/routes/graphql-yoga.mjs +7 -5
  125. package/dist/nitro/routes/health.mjs +22 -24
  126. package/dist/nitro/setup/extend-loader.d.mts +6 -5
  127. package/dist/nitro/setup/extend-loader.mjs +30 -58
  128. package/dist/nitro/setup/file-watcher.mjs +6 -4
  129. package/dist/nitro/setup/logging.d.mts +1 -8
  130. package/dist/nitro/setup/logging.mjs +7 -22
  131. package/dist/nitro/setup/rollup-integration.mjs +32 -1
  132. package/dist/nitro/setup/scanner.d.mts +8 -43
  133. package/dist/nitro/setup/scanner.mjs +56 -58
  134. package/dist/nitro/setup/security.d.mts +10 -0
  135. package/dist/nitro/setup/security.mjs +17 -0
  136. package/dist/nitro/setup/type-generation.d.mts +13 -0
  137. package/dist/nitro/setup/type-generation.mjs +16 -0
  138. package/dist/nitro/setup.d.mts +4 -3
  139. package/dist/nitro/setup.mjs +87 -74
  140. package/dist/nitro/state.d.mts +32 -0
  141. package/dist/nitro/state.mjs +58 -0
  142. package/dist/nitro/types/augmentation.d.mts +59 -0
  143. package/dist/nitro/types/augmentation.mjs +1 -0
  144. package/dist/nitro/types/config.d.mts +327 -0
  145. package/dist/nitro/types/config.mjs +1 -0
  146. package/dist/nitro/types/define.d.mts +13 -0
  147. package/dist/nitro/types/define.mjs +1 -0
  148. package/dist/nitro/types/index.d.mts +10 -0
  149. package/dist/nitro/types/index.mjs +1 -0
  150. package/dist/nitro/virtual/debug-info.d.mts +9 -0
  151. package/dist/nitro/virtual/debug-info.mjs +35 -0
  152. package/dist/nitro/virtual/graphql-config.d.mts +9 -0
  153. package/dist/nitro/virtual/graphql-config.mjs +33 -0
  154. package/dist/nitro/virtual/index.d.mts +25 -0
  155. package/dist/nitro/virtual/index.mjs +45 -0
  156. package/dist/nitro/virtual/module-config.d.mts +9 -0
  157. package/dist/nitro/virtual/module-config.mjs +10 -0
  158. package/dist/nitro/virtual/pubsub.d.mts +9 -0
  159. package/dist/nitro/virtual/pubsub.mjs +17 -0
  160. package/dist/nitro/virtual/server-directives.d.mts +9 -0
  161. package/dist/nitro/virtual/server-directives.mjs +12 -0
  162. package/dist/nitro/virtual/server-resolvers.d.mts +9 -0
  163. package/dist/nitro/virtual/server-resolvers.mjs +17 -0
  164. package/dist/nitro/virtual/server-schemas.d.mts +9 -0
  165. package/dist/nitro/virtual/server-schemas.mjs +31 -0
  166. package/dist/nitro/virtual/stubs.d.mts +42 -10
  167. package/dist/nitro/virtual/stubs.mjs +0 -5
  168. package/dist/nitro/virtual/utils.d.mts +15 -0
  169. package/dist/nitro/virtual/utils.mjs +26 -0
  170. package/dist/nitro/virtual/validation-schemas.d.mts +9 -0
  171. package/dist/nitro/virtual/validation-schemas.mjs +33 -0
  172. package/native/index.js +52 -52
  173. package/package.json +15 -15
  174. package/dist/cli/commands/index.d.mts +0 -5
  175. package/dist/cli/commands/index.mjs +0 -5
  176. package/dist/core/codegen/plugin.d.mts +0 -19
  177. package/dist/core/codegen/plugin.mjs +0 -29
  178. package/dist/core/config.d.mts +0 -45
  179. package/dist/core/config.mjs +0 -76
  180. package/dist/nitro/codegen.d.mts +0 -18
  181. package/dist/nitro/codegen.mjs +0 -171
  182. package/dist/nitro/config.d.mts +0 -50
  183. package/dist/nitro/config.mjs +0 -55
  184. package/dist/nitro/types.d.mts +0 -549
  185. package/dist/nitro/virtual/generators.d.mts +0 -38
  186. package/dist/nitro/virtual/generators.mjs +0 -190
  187. /package/dist/{nitro/types.mjs → core/types/standard-schema.mjs} +0 -0
@@ -1,6 +1,6 @@
1
- import { CoreConfig, CoreContext, CoreLogger } from "../core/types/config.mjs";
1
+ import { CoreConfig, CoreLogger } from "../core/types/config.mjs";
2
2
  import { ScanContext } from "../core/types/scanning.mjs";
3
- import { FrameworkAdapter, ScanAdapter } from "../core/types/adapter.mjs";
3
+ import { FrameworkAdapter } from "../core/types/adapter.mjs";
4
4
  import { Nitro } from "nitro/types";
5
5
 
6
6
  //#region src/nitro/adapter.d.ts
@@ -9,7 +9,7 @@ import { Nitro } from "nitro/types";
9
9
  */
10
10
  declare function createLoggerFromNitro(nitro: Nitro): CoreLogger;
11
11
  /**
12
- * Create a ScanContext from Nitro instance
12
+ * Create a ScanContext directly from Nitro instance
13
13
  */
14
14
  declare function createScanContextFromNitro(nitro: Nitro): ScanContext;
15
15
  /**
@@ -17,12 +17,8 @@ declare function createScanContextFromNitro(nitro: Nitro): ScanContext;
17
17
  */
18
18
  declare function createCoreConfigFromNitro(nitro: Nitro): CoreConfig;
19
19
  /**
20
- * Create a CoreContext from Nitro instance
20
+ * Nitro framework adapter
21
21
  */
22
- declare function createCoreContextFromNitro(nitro: Nitro): CoreContext;
23
- /**
24
- * Nitro framework adapter implementation
25
- */
26
- declare const NitroAdapter: FrameworkAdapter<Nitro> & ScanAdapter<Nitro>;
22
+ declare const NitroAdapter: FrameworkAdapter<Nitro>;
27
23
  //#endregion
28
- export { NitroAdapter, NitroAdapter as default, createCoreConfigFromNitro, createCoreContextFromNitro, createLoggerFromNitro, createScanContextFromNitro };
24
+ export { NitroAdapter, NitroAdapter as default, createCoreConfigFromNitro, createLoggerFromNitro, createScanContextFromNitro };
@@ -1,8 +1,4 @@
1
- import { scanDirectivesCore } from "../core/scanning/directives.mjs";
2
- import { scanDocumentsCore } from "../core/scanning/documents.mjs";
3
- import { scanResolversCore } from "../core/scanning/resolvers.mjs";
4
- import { scanGraphqlCore, scanSchemasCore } from "../core/scanning/schemas.mjs";
5
- import { join, relative } from "pathe";
1
+ import { join } from "pathe";
6
2
  //#region src/nitro/adapter.ts
7
3
  /**
8
4
  * Create a CoreLogger from Nitro's logger
@@ -17,7 +13,7 @@ function createLoggerFromNitro(nitro) {
17
13
  };
18
14
  }
19
15
  /**
20
- * Create a ScanContext from Nitro instance
16
+ * Create a ScanContext directly from Nitro instance
21
17
  */
22
18
  function createScanContextFromNitro(nitro) {
23
19
  return {
@@ -34,57 +30,31 @@ function createScanContextFromNitro(nitro) {
34
30
  */
35
31
  function createCoreConfigFromNitro(nitro) {
36
32
  const graphqlOptions = nitro.options.graphql || {};
37
- const isNuxt = nitro.options.framework?.name === "nuxt";
38
- const typesDir = join(nitro.graphql.buildDir, "types");
39
33
  return {
40
34
  rootDir: nitro.options.rootDir,
41
35
  buildDir: nitro.graphql.buildDir,
42
36
  serverDir: nitro.graphql.serverDir,
43
37
  clientDir: nitro.graphql.clientDir,
44
- typesDir,
38
+ typesDir: join(nitro.graphql.buildDir, "types"),
45
39
  framework: graphqlOptions.framework || "graphql-yoga",
46
- isNuxt,
40
+ isNuxt: nitro.options.framework?.name === "nuxt",
47
41
  isDev: nitro.options.dev,
48
- graphqlOptions: {
49
- framework: graphqlOptions.framework,
50
- endpoint: typeof graphqlOptions.endpoint === "object" ? graphqlOptions.endpoint?.graphql : graphqlOptions.endpoint,
51
- federation: graphqlOptions.federation,
52
- security: graphqlOptions.security
53
- },
54
42
  logger: createLoggerFromNitro(nitro),
55
- ignorePatterns: nitro.options.ignore
56
- };
57
- }
58
- /**
59
- * Create a CoreContext from Nitro instance
60
- */
61
- function createCoreContextFromNitro(nitro) {
62
- return {
63
- config: createCoreConfigFromNitro(nitro),
64
- graphqlBuildDir: nitro.graphql.buildDir,
65
- watchDirs: nitro.graphql.watchDirs,
66
- dir: nitro.graphql.dir
43
+ ignorePatterns: nitro.options.ignore,
44
+ security: graphqlOptions.security,
45
+ federation: graphqlOptions.federation,
46
+ codegen: graphqlOptions.codegen,
47
+ externalServices: graphqlOptions.externalServices
67
48
  };
68
49
  }
69
50
  /**
70
- * Nitro framework adapter implementation
51
+ * Nitro framework adapter
71
52
  */
72
53
  const NitroAdapter = {
73
54
  name: "nitro",
74
55
  createCoreConfig: createCoreConfigFromNitro,
75
- createCoreContext: createCoreContextFromNitro,
76
56
  createScanContext: createScanContextFromNitro,
77
- getLogger: createLoggerFromNitro,
78
- scanSchemas: (nitro) => scanSchemasCore(createScanContextFromNitro(nitro)),
79
- scanGraphql: (nitro) => scanGraphqlCore(createScanContextFromNitro(nitro)),
80
- scanResolvers: (nitro) => scanResolversCore(createScanContextFromNitro(nitro)),
81
- scanDirectives: (nitro) => scanDirectivesCore(createScanContextFromNitro(nitro)),
82
- scanDocuments(nitro) {
83
- return scanDocumentsCore(createScanContextFromNitro(nitro), {
84
- externalServices: nitro.options.graphql?.externalServices,
85
- clientDirRelative: relative(nitro.options.rootDir, nitro.graphql.clientDir)
86
- });
87
- }
57
+ getLogger: createLoggerFromNitro
88
58
  };
89
59
  //#endregion
90
- export { NitroAdapter, NitroAdapter as default, createCoreConfigFromNitro, createCoreContextFromNitro, createLoggerFromNitro, createScanContextFromNitro };
60
+ export { NitroAdapter, NitroAdapter as default, createCoreConfigFromNitro, createLoggerFromNitro, createScanContextFromNitro };
@@ -0,0 +1,12 @@
1
+ import { Nitro } from "nitro/types";
2
+
3
+ //#region src/nitro/codegen/client-types.d.ts
4
+ /**
5
+ * Generate client-side operation types
6
+ */
7
+ declare function generateClientTypes(nitro: Nitro, options?: {
8
+ silent?: boolean;
9
+ isInitial?: boolean;
10
+ }, schemaString?: string): Promise<void>;
11
+ //#endregion
12
+ export { generateClientTypes };
@@ -0,0 +1,73 @@
1
+ import { LOG_TAG } from "../../core/constants.mjs";
2
+ import { generateClientTypesCore } from "../../core/codegen/client.mjs";
3
+ import { loadGraphQLDocuments } from "../../core/codegen/document-loader.mjs";
4
+ import { writeFile } from "../../core/utils/file-io.mjs";
5
+ import { generateSubscriptionBuilder } from "../../core/codegen/vue-subscription-builder.mjs";
6
+ import { getDefaultPaths, getSdkConfig, getTypesConfig, resolveFilePath } from "../paths.mjs";
7
+ import { subscribeClientTemplate } from "../../core/utils/subscribe-templates.mjs";
8
+ import { generateExternalTypes } from "./external-types.mjs";
9
+ import consola from "consola";
10
+ import { join } from "pathe";
11
+ import { existsSync, readFileSync } from "node:fs";
12
+ //#region src/nitro/codegen/client-types.ts
13
+ const logger = consola.withTag(LOG_TAG);
14
+ /**
15
+ * Generate client-side operation types
16
+ */
17
+ async function generateClientTypes(nitro, options = {}, schemaString) {
18
+ try {
19
+ if (nitro.graphql.state.schemas.length) await generateMainClientTypes(nitro, options, schemaString);
20
+ if (nitro.options.graphql?.externalServices?.length) await generateExternalTypes(nitro, options);
21
+ } catch (error) {
22
+ logger.error("Client type generation failed:", error);
23
+ }
24
+ }
25
+ async function generateMainClientTypes(nitro, options = {}, schemaString) {
26
+ if (!schemaString) {
27
+ const schemaPath = join(nitro.graphql.buildDir, "schema.graphql");
28
+ if (!existsSync(schemaPath)) {
29
+ if (!options.silent) consola.info("Schema not ready for client types");
30
+ return;
31
+ }
32
+ schemaString = readFileSync(schemaPath, "utf-8");
33
+ }
34
+ const docs = await loadGraphQLDocuments([...nitro.graphql.state.documents]);
35
+ const serverScalars = nitro.options.graphql?.codegen?.server?.scalars;
36
+ const clientConfig = nitro.options.graphql?.codegen?.client || {};
37
+ const resolvedClientConfig = {
38
+ ...clientConfig,
39
+ scalars: clientConfig.scalars ?? serverScalars
40
+ };
41
+ const types = await generateClientTypesCore({
42
+ schemaString,
43
+ documents: docs,
44
+ config: resolvedClientConfig,
45
+ sdkConfig: nitro.options.graphql?.codegen?.clientSDK,
46
+ options
47
+ });
48
+ if (types === false) return;
49
+ const placeholders = getDefaultPaths(nitro);
50
+ const typesConfig = getTypesConfig(nitro);
51
+ const sdkFileConfig = getSdkConfig(nitro);
52
+ const subscriptionsEnabled = nitro.options.graphql?.subscriptions?.enabled ?? false;
53
+ const clientPath = resolveFilePath(typesConfig.client, typesConfig.enabled, true, "{typesDir}/nitro-graphql-client.d.ts", placeholders);
54
+ if (clientPath) {
55
+ writeFile(clientPath, types.types);
56
+ if (!options.silent) logger.success(`Client types: ${clientPath}`);
57
+ }
58
+ const subscriptionCode = generateSubscriptionBuilder(docs, subscriptionsEnabled);
59
+ const sdkPath = resolveFilePath(sdkFileConfig.main, sdkFileConfig.enabled, true, "{clientDir}/default/sdk.ts", placeholders);
60
+ if (sdkPath) {
61
+ writeFile(sdkPath, subscriptionCode ? types.sdk + subscriptionCode : types.sdk);
62
+ if (!options.silent) logger.success(`SDK: ${sdkPath}`);
63
+ }
64
+ if (subscriptionsEnabled) {
65
+ const subscribePath = resolveFilePath(true, true, true, "{clientDir}/default/subscribe.ts", placeholders);
66
+ if (subscribePath && !existsSync(subscribePath)) {
67
+ writeFile(subscribePath, subscribeClientTemplate);
68
+ if (!options.silent) logger.success(`Subscribe config: ${subscribePath}`);
69
+ }
70
+ }
71
+ }
72
+ //#endregion
73
+ export { generateClientTypes };
@@ -0,0 +1,8 @@
1
+ import { Nitro } from "nitro/types";
2
+
3
+ //#region src/nitro/codegen/external-types.d.ts
4
+ declare function generateExternalTypes(nitro: Nitro, options?: {
5
+ silent?: boolean;
6
+ }): Promise<void>;
7
+ //#endregion
8
+ export { generateExternalTypes };
@@ -0,0 +1,47 @@
1
+ import { generateExternalClientTypesCore } from "../../core/codegen/client.mjs";
2
+ import { loadGraphQLDocuments } from "../../core/codegen/document-loader.mjs";
3
+ import { writeFile } from "../../core/utils/file-io.mjs";
4
+ import { downloadAndSaveSchema, loadExternalSchema } from "../../core/codegen/schema-loader.mjs";
5
+ import { getDefaultPaths, getSdkConfig, getTypesConfig, resolveFilePath } from "../paths.mjs";
6
+ import consola from "consola";
7
+ //#region src/nitro/codegen/external-types.ts
8
+ async function generateExternalServiceTypes(nitro, service, options = {}) {
9
+ if (!options.silent) consola.info(`[${service.name}] Processing external service`);
10
+ await downloadAndSaveSchema(service, nitro.options.buildDir);
11
+ const schema = await loadExternalSchema(service, nitro.options.buildDir);
12
+ if (!schema) {
13
+ consola.warn(`[${service.name}] Failed to load schema`);
14
+ return;
15
+ }
16
+ const docs = service.documents?.length ? await loadGraphQLDocuments(service.documents).catch(() => []) : [];
17
+ if (service.documents?.length && !docs.length) {
18
+ consola.warn(`[${service.name}] No documents found`);
19
+ return;
20
+ }
21
+ const types = await generateExternalClientTypesCore(service, schema, docs);
22
+ if (types === false) return;
23
+ const placeholders = {
24
+ ...getDefaultPaths(nitro),
25
+ serviceName: service.name
26
+ };
27
+ const typesConfig = getTypesConfig(nitro);
28
+ const sdkFileConfig = getSdkConfig(nitro);
29
+ const typesPath = resolveFilePath(service.paths?.types ?? typesConfig.external, typesConfig.enabled, true, "{typesDir}/nitro-graphql-client-{serviceName}.d.ts", placeholders);
30
+ if (typesPath) {
31
+ writeFile(typesPath, types.types);
32
+ if (!options.silent) consola.success(`[${service.name}] Types: ${typesPath}`);
33
+ }
34
+ const sdkPath = resolveFilePath(service.paths?.sdk ?? sdkFileConfig.external, sdkFileConfig.enabled, true, "{clientDir}/{serviceName}/sdk.ts", placeholders);
35
+ if (sdkPath) {
36
+ writeFile(sdkPath, types.sdk);
37
+ if (!options.silent) consola.success(`[${service.name}] SDK: ${sdkPath}`);
38
+ }
39
+ }
40
+ async function generateExternalTypes(nitro, options = {}) {
41
+ const services = nitro.options.graphql?.externalServices || [];
42
+ await Promise.all(services.map((service) => generateExternalServiceTypes(nitro, service, options).catch((error) => {
43
+ consola.error(`[${service.name}] External service failed:`, error);
44
+ })));
45
+ }
46
+ //#endregion
47
+ export { generateExternalTypes };
@@ -0,0 +1,4 @@
1
+ import { generateClientTypes } from "./client-types.mjs";
2
+ import { generateExternalTypes } from "./external-types.mjs";
3
+ import { generateServerTypes } from "./server-types.mjs";
4
+ export { generateClientTypes, generateExternalTypes, generateServerTypes };
@@ -0,0 +1,4 @@
1
+ import { generateExternalTypes } from "./external-types.mjs";
2
+ import { generateClientTypes } from "./client-types.mjs";
3
+ import { generateServerTypes } from "./server-types.mjs";
4
+ export { generateClientTypes, generateExternalTypes, generateServerTypes };
@@ -0,0 +1,12 @@
1
+ import { Nitro } from "nitro/types";
2
+
3
+ //#region src/nitro/codegen/server-types.d.ts
4
+ /**
5
+ * Generate server-side resolver types
6
+ * Returns the sorted schema string for reuse by client type generation
7
+ */
8
+ declare function generateServerTypes(nitro: Nitro, options?: {
9
+ silent?: boolean;
10
+ }): Promise<string | undefined>;
11
+ //#endregion
12
+ export { generateServerTypes };
@@ -0,0 +1,81 @@
1
+ import { LOG_TAG } from "../../core/constants.mjs";
2
+ import { writeFile } from "../../core/utils/file-io.mjs";
3
+ import { generateServerTypesCore } from "../../core/codegen/server.mjs";
4
+ import { validateNoDuplicateTypes } from "../../core/codegen/validation.mjs";
5
+ import { loadFederationSupport } from "../../core/schema/federation.mjs";
6
+ import { getDefaultPaths, getTypesConfig, resolveFilePath, shouldGenerateTypes } from "../paths.mjs";
7
+ import consola from "consola";
8
+ import { resolve } from "pathe";
9
+ import { printSchemaWithDirectives } from "@graphql-tools/utils";
10
+ import { parse, print } from "graphql";
11
+ import { mergeTypeDefs } from "@graphql-tools/merge";
12
+ import { makeExecutableSchema } from "@graphql-tools/schema";
13
+ import { loadFilesSync } from "@graphql-tools/load-files";
14
+ //#region src/nitro/codegen/server-types.ts
15
+ const logger = consola.withTag(LOG_TAG);
16
+ /**
17
+ * Build schema with optional federation support
18
+ * Uses @graphql-tools to ensure same graphql instance is used throughout
19
+ */
20
+ async function buildSchemaFromString(source, federation) {
21
+ if (federation) {
22
+ const buildSubgraph = await loadFederationSupport();
23
+ if (!buildSubgraph) throw new Error("Federation enabled but @apollo/subgraph not installed");
24
+ return buildSubgraph([{ typeDefs: parse(source) }]);
25
+ }
26
+ return makeExecutableSchema({ typeDefs: source });
27
+ }
28
+ /**
29
+ * Generate server-side resolver types
30
+ * Returns the sorted schema string for reuse by client type generation
31
+ */
32
+ async function generateServerTypes(nitro, options = {}) {
33
+ if (!shouldGenerateTypes(nitro)) return;
34
+ const schemas = nitro.graphql.state.schemas;
35
+ if (!schemas.length) {
36
+ if (!options.silent) consola.info("No GraphQL schemas found");
37
+ return;
38
+ }
39
+ try {
40
+ const allStrings = loadFilesSync(schemas).map((s) => typeof s === "string" ? s : s.loc?.source?.body || "");
41
+ const validSchemas = [];
42
+ const strings = [];
43
+ schemas.forEach((schema, i) => {
44
+ if (allStrings[i]) {
45
+ validSchemas.push(schema);
46
+ strings.push(allStrings[i]);
47
+ }
48
+ });
49
+ const directiveSchemas = nitro.graphql.state.directiveSchemas;
50
+ if (directiveSchemas) {
51
+ validSchemas.push("<inline-directives>");
52
+ strings.push(directiveSchemas);
53
+ }
54
+ if (!validateNoDuplicateTypes(validSchemas, strings)) return;
55
+ const mergedSchemaString = print(mergeTypeDefs([strings.join("\n\n")], {
56
+ throwOnConflict: true,
57
+ sort: true
58
+ }));
59
+ const federation = nitro.options.graphql?.federation?.enabled === true;
60
+ const sortedSchemaString = printSchemaWithDirectives(await buildSchemaFromString(mergedSchemaString, federation));
61
+ const result = await generateServerTypesCore({
62
+ framework: nitro.options.graphql?.framework || "graphql-yoga",
63
+ schemaString: sortedSchemaString,
64
+ config: nitro.options.graphql?.codegen?.server,
65
+ federationEnabled: federation
66
+ });
67
+ writeFile(resolve(nitro.graphql.buildDir, "schema.graphql"), sortedSchemaString);
68
+ const placeholders = getDefaultPaths(nitro);
69
+ const typesConfig = getTypesConfig(nitro);
70
+ const typesPath = resolveFilePath(typesConfig.server, typesConfig.enabled, true, "{typesDir}/nitro-graphql-server.d.ts", placeholders);
71
+ if (typesPath) {
72
+ writeFile(typesPath, result.types);
73
+ if (!options.silent) logger.success(`Server types: ${typesPath}`);
74
+ }
75
+ return sortedSchemaString;
76
+ } catch (error) {
77
+ logger.error("Server type generation failed:", error);
78
+ }
79
+ }
80
+ //#endregion
81
+ export { generateServerTypes };
@@ -0,0 +1,28 @@
1
+ import { NitroGraphQLOptions } from "./types/config.mjs";
2
+ //#region src/nitro/defaults.d.ts
3
+ /**
4
+ * Default type generation configuration
5
+ */
6
+ declare const DEFAULT_TYPES_CONFIG: {
7
+ readonly server: ".graphql/nitro-graphql-server.d.ts";
8
+ readonly client: ".graphql/nitro-graphql-client.d.ts";
9
+ readonly enabled: true;
10
+ };
11
+ /**
12
+ * Default runtime GraphQL configuration
13
+ */
14
+ declare const DEFAULT_RUNTIME_CONFIG: NitroGraphQLOptions;
15
+ /**
16
+ * Default SDK configuration
17
+ */
18
+ declare const DEFAULT_SDK_CONFIG: {
19
+ readonly enabled: true;
20
+ readonly main: true;
21
+ readonly external: true;
22
+ };
23
+ /**
24
+ * Default TypeScript strict mode setting
25
+ */
26
+ declare const DEFAULT_TYPESCRIPT_STRICT: true;
27
+ //#endregion
28
+ export { DEFAULT_RUNTIME_CONFIG, DEFAULT_SDK_CONFIG, DEFAULT_TYPESCRIPT_STRICT, DEFAULT_TYPES_CONFIG };
@@ -0,0 +1,34 @@
1
+ import { DEFAULT_CLIENT_TYPES_PATH, DEFAULT_SERVER_TYPES_PATH, ENDPOINT_GRAPHQL, ENDPOINT_HEALTH } from "../core/constants.mjs";
2
+ //#region src/nitro/defaults.ts
3
+ /**
4
+ * Default type generation configuration
5
+ */
6
+ const DEFAULT_TYPES_CONFIG = {
7
+ server: DEFAULT_SERVER_TYPES_PATH,
8
+ client: DEFAULT_CLIENT_TYPES_PATH,
9
+ enabled: true
10
+ };
11
+ /**
12
+ * Default runtime GraphQL configuration
13
+ */
14
+ const DEFAULT_RUNTIME_CONFIG = {
15
+ endpoint: {
16
+ graphql: ENDPOINT_GRAPHQL,
17
+ healthCheck: ENDPOINT_HEALTH
18
+ },
19
+ playground: true
20
+ };
21
+ /**
22
+ * Default SDK configuration
23
+ */
24
+ const DEFAULT_SDK_CONFIG = {
25
+ enabled: true,
26
+ main: true,
27
+ external: true
28
+ };
29
+ /**
30
+ * Default TypeScript strict mode setting
31
+ */
32
+ const DEFAULT_TYPESCRIPT_STRICT = true;
33
+ //#endregion
34
+ export { DEFAULT_RUNTIME_CONFIG, DEFAULT_SDK_CONFIG, DEFAULT_TYPESCRIPT_STRICT, DEFAULT_TYPES_CONFIG };
@@ -1,6 +1,14 @@
1
- import { ClientUtilsConfig, CodegenClientConfig, CodegenServerConfig, DefineDirectiveConfig, DefineServerConfig, DirectiveArgument, DirectiveDefinition, ExplicitPathsExtendSource, ExtendSource, ExternalGraphQLService, ExternalServicePaths, FederationConfig, FileGenerationConfig, Flatten, GenImport, GenericSdkConfig, GraphQLArgumentType, GraphQLBaseType, GraphQLScalarType, LocalDirExtendSource, NitroGraphQLOptions, PathsConfig, PubSubConfig, RuntimeConfig, SSETransportConfig, SdkConfig, SecurityConfig, StandardSchemaV1, SubscriptionsConfig, TypesConfig, WatchConfig, WebSocketTransportConfig } from "./types.mjs";
1
+ import { ClientCodegenConfig, ExternalServiceCodegenConfig, SdkCodegenConfig, ServerCodegenConfig } from "../core/types/codegen.mjs";
2
+ import { CoreSecurityConfig } from "../core/types/config.mjs";
3
+ import { ResolverImport, ScannedResolver } from "../core/types/scanning.mjs";
4
+ import { DefineDirectiveConfig, DirectiveArg, DirectiveArgument, DirectiveDefinition, DirectiveLocationName, Flatten, GraphQLArgumentType, GraphQLBaseType, GraphQLScalarType } from "../core/types/define.mjs";
5
+ import { StandardSchemaV1 } from "../core/types/standard-schema.mjs";
6
+ import { DefineServerConfig } from "./types/define.mjs";
7
+ import { LocalDirExtendSource } from "../core/extend/loader.mjs";
8
+ import { CLIGraphQLOptions, ClientUtilsConfig, ExplicitPathsExtendSource, ExtendSource, ExternalGraphQLService, ExternalServicePaths, FederationConfig, FileGenerationConfig, NitroGraphQLOptions, PathsConfig, PubSubConfig, RuntimeConfig, SSETransportConfig, SdkConfig, SubscriptionsConfig, TypesConfig, WatchConfig, WebSocketTransportConfig } from "./types/config.mjs";
9
+ import { GraphQLScanState } from "./types/augmentation.mjs";
2
10
  import { NitroAdapter } from "./adapter.mjs";
3
- import { resolveSecurityConfig } from "./setup/logging.mjs";
11
+ import { resolveSecurityConfig } from "./setup/security.mjs";
4
12
  import { setupNitroGraphQL } from "./setup.mjs";
5
13
  import { NitroModule } from "nitro/types";
6
14
  import { Plugin } from "vite";
@@ -42,4 +50,4 @@ declare function graphqlModule(options?: NitroGraphQLOptions): Plugin & {
42
50
  nitro: NitroModule;
43
51
  };
44
52
  //#endregion
45
- export { ClientUtilsConfig, CodegenClientConfig, CodegenServerConfig, DefineDirectiveConfig, DefineServerConfig, DirectiveArgument, DirectiveDefinition, ExplicitPathsExtendSource, ExtendSource, ExternalGraphQLService, ExternalServicePaths, FederationConfig, FileGenerationConfig, Flatten, GenImport, GenericSdkConfig, GraphQLArgumentType, GraphQLBaseType, GraphQLScalarType, LocalDirExtendSource, NitroAdapter, NitroGraphQLOptions, PathsConfig, PubSubConfig, RuntimeConfig, SSETransportConfig, SdkConfig, SecurityConfig, StandardSchemaV1, SubscriptionsConfig, TypesConfig, WatchConfig, WebSocketTransportConfig, graphqlModule as default, resolveSecurityConfig, setupNitroGraphQL };
53
+ export { CLIGraphQLOptions, ClientCodegenConfig, ClientUtilsConfig, ClientCodegenConfig as CodegenClientConfig, ServerCodegenConfig as CodegenServerConfig, DefineDirectiveConfig, DefineServerConfig, DirectiveArg, DirectiveArgument, DirectiveDefinition, DirectiveLocationName, ExplicitPathsExtendSource, ExtendSource, ExternalGraphQLService, ExternalServiceCodegenConfig, ExternalServicePaths, FederationConfig, FileGenerationConfig, Flatten, SdkCodegenConfig as GenericSdkConfig, GraphQLArgumentType, GraphQLBaseType, GraphQLScalarType, GraphQLScanState, LocalDirExtendSource, NitroAdapter, NitroGraphQLOptions, PathsConfig, PubSubConfig, ResolverImport, RuntimeConfig, SSETransportConfig, ScannedResolver, SdkCodegenConfig, SdkConfig, CoreSecurityConfig as SecurityConfig, ServerCodegenConfig, StandardSchemaV1, SubscriptionsConfig, TypesConfig, WatchConfig, WebSocketTransportConfig, graphqlModule as default, resolveSecurityConfig, setupNitroGraphQL };
@@ -1,5 +1,5 @@
1
1
  import { NitroAdapter } from "./adapter.mjs";
2
- import { resolveSecurityConfig } from "./setup/logging.mjs";
2
+ import { resolveSecurityConfig } from "./setup/security.mjs";
3
3
  import { setupNitroGraphQL } from "./setup.mjs";
4
4
  import { readFile } from "node:fs/promises";
5
5
  import defu from "defu";
@@ -1,4 +1,4 @@
1
- import { FileGenerationConfig, SdkConfig, TypesConfig } from "./types.mjs";
1
+ import { FileGenerationConfig, SdkConfig, TypesConfig } from "./types/config.mjs";
2
2
  import { Nitro } from "nitro/types";
3
3
 
4
4
  //#region src/nitro/paths.d.ts
@@ -16,7 +16,8 @@ interface PathPlaceholders {
16
16
  }
17
17
  /**
18
18
  * Replace placeholders in a path string
19
- * Supports: {serviceName}, {buildDir}, {rootDir}, {framework}, {typesDir}, {serverDir}, {clientDir}
19
+ * Matches any `{key}` and resolves from the placeholders record.
20
+ * Unknown keys pass through unchanged. `{serviceName}` defaults to 'default'.
20
21
  */
21
22
  declare function replacePlaceholders(path: string, placeholders: PathPlaceholders): string;
22
23
  /**
@@ -1,18 +1,22 @@
1
1
  import { isAbsolute, resolve } from "pathe";
2
2
  //#region src/nitro/paths.ts
3
- const SERVICE_NAME_RE = /\{serviceName\}/g;
4
- const BUILD_DIR_RE = /\{buildDir\}/g;
5
- const ROOT_DIR_RE = /\{rootDir\}/g;
6
- const FRAMEWORK_RE = /\{framework\}/g;
7
- const TYPES_DIR_RE = /\{typesDir\}/g;
8
- const SERVER_DIR_RE = /\{serverDir\}/g;
9
- const CLIENT_DIR_RE = /\{clientDir\}/g;
3
+ const PLACEHOLDER_RE = /\{(\w+)\}/g;
10
4
  /**
11
5
  * Replace placeholders in a path string
12
- * Supports: {serviceName}, {buildDir}, {rootDir}, {framework}, {typesDir}, {serverDir}, {clientDir}
6
+ * Matches any `{key}` and resolves from the placeholders record.
7
+ * Unknown keys pass through unchanged. `{serviceName}` defaults to 'default'.
13
8
  */
14
9
  function replacePlaceholders(path, placeholders) {
15
- return path.replace(SERVICE_NAME_RE, placeholders.serviceName || "default").replace(BUILD_DIR_RE, placeholders.buildDir).replace(ROOT_DIR_RE, placeholders.rootDir).replace(FRAMEWORK_RE, placeholders.framework).replace(TYPES_DIR_RE, placeholders.typesDir).replace(SERVER_DIR_RE, placeholders.serverDir).replace(CLIENT_DIR_RE, placeholders.clientDir);
10
+ const lookup = {
11
+ serviceName: placeholders.serviceName || "default",
12
+ buildDir: placeholders.buildDir,
13
+ rootDir: placeholders.rootDir,
14
+ framework: placeholders.framework,
15
+ typesDir: placeholders.typesDir,
16
+ serverDir: placeholders.serverDir,
17
+ clientDir: placeholders.clientDir
18
+ };
19
+ return path.replace(PLACEHOLDER_RE, (match, key) => lookup[key] ?? match);
16
20
  }
17
21
  /**
18
22
  * Get default paths based on framework and user configuration
@@ -1,5 +1,6 @@
1
- import { NitroAdapter } from "./adapter.mjs";
2
- import { registerAllVirtualModules } from "./virtual/generators.mjs";
1
+ import { scanSchemasCore } from "../core/scanning/schemas.mjs";
2
+ import { createScanContextFromNitro } from "./adapter.mjs";
3
+ import { registerAllVirtualModules } from "./virtual/index.mjs";
3
4
  import { readFile } from "node:fs/promises";
4
5
  import { parse } from "graphql";
5
6
  //#region src/nitro/rollup.ts
@@ -40,7 +41,7 @@ async function rollupConfig(nitro) {
40
41
  buildStart: {
41
42
  order: "pre",
42
43
  async handler() {
43
- const result = await NitroAdapter.scanGraphql(nitro);
44
+ const result = await scanSchemasCore(createScanContextFromNitro(nitro));
44
45
  for (const file of result.items) this.addWatchFile(file);
45
46
  }
46
47
  }
@@ -0,0 +1,6 @@
1
+ import { Hooks } from "crossws";
2
+
3
+ //#region src/nitro/routes/_ws-handler.d.ts
4
+ declare const wsHooks: Partial<Hooks>;
5
+ //#endregion
6
+ export { wsHooks };
@@ -0,0 +1,49 @@
1
+ import { createMergedSchema } from "../../core/schema/builder.mjs";
2
+ import { handleProtocols } from "graphql-ws";
3
+ import { makeHooks } from "graphql-ws/use/crossws";
4
+ import { importedConfig } from "#nitro-graphql/graphql-config";
5
+ import { moduleConfig } from "#nitro-graphql/module-config";
6
+ import { directives } from "#nitro-graphql/server-directives";
7
+ import { resolvers } from "#nitro-graphql/server-resolvers";
8
+ import { schemas } from "#nitro-graphql/server-schemas";
9
+ //#region src/nitro/routes/_ws-handler.ts
10
+ let schema = null;
11
+ /**
12
+ * Get or create the merged GraphQL schema
13
+ */
14
+ async function getSchema() {
15
+ if (!schema) schema = await createMergedSchema({
16
+ schemas,
17
+ resolvers,
18
+ directives,
19
+ moduleConfig
20
+ });
21
+ return schema;
22
+ }
23
+ const wsHooks = {
24
+ upgrade(request) {
25
+ const selected = handleProtocols(request.headers.get("sec-websocket-protocol") || "");
26
+ if (selected) return { headers: { "Sec-WebSocket-Protocol": selected } };
27
+ return {};
28
+ },
29
+ ...makeHooks({
30
+ schema: () => getSchema(),
31
+ context: async (ctx) => {
32
+ const baseContext = { connectionParams: ctx.connectionParams };
33
+ if (typeof importedConfig.context === "function") {
34
+ const userContext = await importedConfig.context(baseContext);
35
+ return {
36
+ ...baseContext,
37
+ ...userContext
38
+ };
39
+ }
40
+ if (importedConfig.context && typeof importedConfig.context === "object") return {
41
+ ...baseContext,
42
+ ...importedConfig.context
43
+ };
44
+ return baseContext;
45
+ }
46
+ })
47
+ };
48
+ //#endregion
49
+ export { wsHooks };
@@ -3,7 +3,7 @@ import * as nitro_h30 from "nitro/h3";
3
3
  //#region src/nitro/routes/apollo-server-ws.d.ts
4
4
  /**
5
5
  * Apollo Server WebSocket handler for subscriptions
6
- * Uses graphql-ws library with crossws adapter for proper protocol handling
6
+ * Uses shared WebSocket handler with graphql-ws and crossws
7
7
  *
8
8
  * Note: This handler works independently from Apollo Server for subscriptions,
9
9
  * as Apollo Server v5 requires separate WebSocket handling.