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.
- package/README.md +1 -1
- package/dist/cli/adapter.d.mts +0 -3
- package/dist/cli/adapter.mjs +6 -29
- package/dist/cli/commands/generate.mjs +2 -2
- package/dist/cli/config.d.mts +4 -5
- package/dist/cli/config.mjs +3 -1
- package/dist/cli/index.d.mts +3 -6
- package/dist/cli/index.mjs +1 -1
- package/dist/cli/server/graphql-handler.mjs +2 -1
- package/dist/cli/server/watcher.mjs +1 -1
- package/dist/core/codegen/client.d.mts +4 -27
- package/dist/core/codegen/client.mjs +26 -445
- package/dist/core/codegen/file-header.d.mts +7 -0
- package/dist/core/codegen/file-header.mjs +12 -0
- package/dist/core/codegen/index.d.mts +7 -5
- package/dist/core/codegen/index.mjs +7 -5
- package/dist/core/codegen/{runtime.d.mts → runtime-generator.d.mts} +1 -1
- package/dist/core/codegen/{runtime.mjs → runtime-generator.mjs} +1 -1
- package/dist/core/codegen/schema-loader.d.mts +2 -7
- package/dist/core/codegen/schema-loader.mjs +65 -70
- package/dist/core/codegen/server-type-helpers.d.mts +14 -0
- package/dist/core/codegen/server-type-helpers.mjs +76 -0
- package/dist/core/codegen/server.d.mts +1 -15
- package/dist/core/codegen/server.mjs +15 -105
- package/dist/core/codegen/subscription-extractor.d.mts +20 -0
- package/dist/core/codegen/subscription-extractor.mjs +30 -0
- package/dist/core/codegen/vue-subscription-builder.d.mts +10 -0
- package/dist/core/codegen/vue-subscription-builder.mjs +351 -0
- package/dist/core/constants.d.mts +5 -53
- package/dist/core/constants.mjs +13 -54
- package/dist/core/create-config.d.mts +31 -0
- package/dist/core/create-config.mjs +42 -0
- package/dist/core/debug/index.d.mts +2 -2
- package/dist/core/debug/index.mjs +2 -2
- package/dist/core/debug/template.d.mts +1 -5
- package/dist/core/debug/template.mjs +1 -1
- package/dist/core/extend/loader.d.mts +0 -1
- package/dist/core/extend/loader.mjs +59 -89
- package/dist/core/index.d.mts +22 -17
- package/dist/core/index.mjs +19 -15
- package/dist/core/manifest.mjs +3 -1
- package/dist/core/pubsub/index.d.mts +2 -109
- package/dist/core/pubsub/index.mjs +1 -145
- package/dist/core/pubsub/memory-pubsub.d.mts +109 -0
- package/dist/core/pubsub/memory-pubsub.mjs +146 -0
- package/dist/core/scanning/ast-scanner.mjs +4 -2
- package/dist/core/scanning/directives.mjs +2 -3
- package/dist/core/scanning/documents.d.mts +4 -3
- package/dist/core/scanning/documents.mjs +1 -1
- package/dist/core/scanning/{common.d.mts → file-scanner.d.mts} +1 -1
- package/dist/core/scanning/{common.mjs → file-scanner.mjs} +2 -10
- package/dist/core/scanning/index.d.mts +3 -3
- package/dist/core/scanning/index.mjs +3 -3
- package/dist/core/scanning/resolvers.mjs +8 -9
- package/dist/core/scanning/schemas.d.mts +1 -5
- package/dist/core/scanning/schemas.mjs +2 -24
- package/dist/core/schema/builder.d.mts +4 -2
- package/dist/core/schema/builder.mjs +4 -2
- package/dist/core/schema/index.d.mts +2 -2
- package/dist/core/schema/index.mjs +2 -2
- package/dist/core/server/apollo.d.mts +20 -0
- package/dist/core/server/apollo.mjs +54 -0
- package/dist/core/server/index.d.mts +4 -2
- package/dist/core/server/index.mjs +3 -2
- package/dist/core/server/types.d.mts +7 -14
- package/dist/core/server/types.mjs +15 -1
- package/dist/core/server/yoga.d.mts +1 -7
- package/dist/core/server/yoga.mjs +4 -13
- package/dist/core/types/adapter.d.mts +4 -39
- package/dist/core/types/codegen.d.mts +22 -45
- package/dist/core/types/config.d.mts +33 -121
- package/dist/core/types/define.d.mts +8 -5
- package/dist/core/types/index.d.mts +5 -4
- package/dist/core/types/scanning.d.mts +4 -1
- package/dist/core/types/standard-schema.d.mts +64 -0
- package/dist/core/utils/directive-parser.d.mts +8 -63
- package/dist/core/utils/directive-parser.mjs +114 -166
- package/dist/core/utils/file-io.d.mts +1 -5
- package/dist/core/utils/file-io.mjs +1 -11
- package/dist/core/utils/index.d.mts +5 -4
- package/dist/core/utils/index.mjs +6 -5
- package/dist/core/utils/logger.d.mts +1 -10
- package/dist/core/utils/logger.mjs +1 -19
- package/dist/core/utils/ofetch-templates.mjs +3 -4
- package/dist/core/utils/runtime.d.mts +1 -30
- package/dist/core/utils/runtime.mjs +2 -44
- package/dist/core/utils/string.d.mts +10 -0
- package/dist/core/utils/string.mjs +12 -0
- package/dist/core/watcher/create-watcher.d.mts +103 -0
- package/dist/core/watcher/create-watcher.mjs +143 -0
- package/dist/core/watcher/index.d.mts +2 -107
- package/dist/core/watcher/index.mjs +1 -139
- package/dist/define.d.mts +4 -2
- package/dist/define.mjs +7 -6
- package/dist/index.d.mts +4 -3
- package/dist/index.mjs +1 -1
- package/dist/nitro/adapter.d.mts +6 -10
- package/dist/nitro/adapter.mjs +12 -42
- package/dist/nitro/codegen/client-types.d.mts +12 -0
- package/dist/nitro/codegen/client-types.mjs +73 -0
- package/dist/nitro/codegen/external-types.d.mts +8 -0
- package/dist/nitro/codegen/external-types.mjs +47 -0
- package/dist/nitro/codegen/index.d.mts +4 -0
- package/dist/nitro/codegen/index.mjs +4 -0
- package/dist/nitro/codegen/server-types.d.mts +12 -0
- package/dist/nitro/codegen/server-types.mjs +81 -0
- package/dist/nitro/defaults.d.mts +28 -0
- package/dist/nitro/defaults.mjs +34 -0
- package/dist/nitro/index.d.mts +11 -3
- package/dist/nitro/index.mjs +1 -1
- package/dist/nitro/paths.d.mts +3 -2
- package/dist/nitro/paths.mjs +13 -9
- package/dist/nitro/rollup.mjs +4 -3
- package/dist/nitro/routes/_ws-handler.d.mts +6 -0
- package/dist/nitro/routes/_ws-handler.mjs +49 -0
- package/dist/nitro/routes/apollo-server-ws.d.mts +1 -1
- package/dist/nitro/routes/apollo-server-ws.mjs +9 -44
- package/dist/nitro/routes/apollo-server.d.mts +1 -1
- package/dist/nitro/routes/apollo-server.mjs +16 -55
- package/dist/nitro/routes/debug.d.mts +1 -1
- package/dist/nitro/routes/debug.mjs +1 -0
- package/dist/nitro/routes/graphql-yoga-ws.d.mts +1 -1
- package/dist/nitro/routes/graphql-yoga-ws.mjs +6 -44
- package/dist/nitro/routes/graphql-yoga.mjs +7 -5
- package/dist/nitro/routes/health.mjs +22 -24
- package/dist/nitro/setup/extend-loader.d.mts +6 -5
- package/dist/nitro/setup/extend-loader.mjs +30 -58
- package/dist/nitro/setup/file-watcher.mjs +6 -4
- package/dist/nitro/setup/logging.d.mts +1 -8
- package/dist/nitro/setup/logging.mjs +7 -22
- package/dist/nitro/setup/rollup-integration.mjs +32 -1
- package/dist/nitro/setup/scanner.d.mts +8 -43
- package/dist/nitro/setup/scanner.mjs +56 -58
- package/dist/nitro/setup/security.d.mts +10 -0
- package/dist/nitro/setup/security.mjs +17 -0
- package/dist/nitro/setup/type-generation.d.mts +13 -0
- package/dist/nitro/setup/type-generation.mjs +16 -0
- package/dist/nitro/setup.d.mts +4 -3
- package/dist/nitro/setup.mjs +87 -74
- package/dist/nitro/state.d.mts +32 -0
- package/dist/nitro/state.mjs +58 -0
- package/dist/nitro/types/augmentation.d.mts +59 -0
- package/dist/nitro/types/augmentation.mjs +1 -0
- package/dist/nitro/types/config.d.mts +327 -0
- package/dist/nitro/types/config.mjs +1 -0
- package/dist/nitro/types/define.d.mts +13 -0
- package/dist/nitro/types/define.mjs +1 -0
- package/dist/nitro/types/index.d.mts +10 -0
- package/dist/nitro/types/index.mjs +1 -0
- package/dist/nitro/virtual/debug-info.d.mts +9 -0
- package/dist/nitro/virtual/debug-info.mjs +35 -0
- package/dist/nitro/virtual/graphql-config.d.mts +9 -0
- package/dist/nitro/virtual/graphql-config.mjs +33 -0
- package/dist/nitro/virtual/index.d.mts +25 -0
- package/dist/nitro/virtual/index.mjs +45 -0
- package/dist/nitro/virtual/module-config.d.mts +9 -0
- package/dist/nitro/virtual/module-config.mjs +10 -0
- package/dist/nitro/virtual/pubsub.d.mts +9 -0
- package/dist/nitro/virtual/pubsub.mjs +17 -0
- package/dist/nitro/virtual/server-directives.d.mts +9 -0
- package/dist/nitro/virtual/server-directives.mjs +12 -0
- package/dist/nitro/virtual/server-resolvers.d.mts +9 -0
- package/dist/nitro/virtual/server-resolvers.mjs +17 -0
- package/dist/nitro/virtual/server-schemas.d.mts +9 -0
- package/dist/nitro/virtual/server-schemas.mjs +31 -0
- package/dist/nitro/virtual/stubs.d.mts +42 -10
- package/dist/nitro/virtual/stubs.mjs +0 -5
- package/dist/nitro/virtual/utils.d.mts +15 -0
- package/dist/nitro/virtual/utils.mjs +26 -0
- package/dist/nitro/virtual/validation-schemas.d.mts +9 -0
- package/dist/nitro/virtual/validation-schemas.mjs +33 -0
- package/native/index.js +52 -52
- package/package.json +15 -15
- package/dist/cli/commands/index.d.mts +0 -5
- package/dist/cli/commands/index.mjs +0 -5
- package/dist/core/codegen/plugin.d.mts +0 -19
- package/dist/core/codegen/plugin.mjs +0 -29
- package/dist/core/config.d.mts +0 -45
- package/dist/core/config.mjs +0 -76
- package/dist/nitro/codegen.d.mts +0 -18
- package/dist/nitro/codegen.mjs +0 -171
- package/dist/nitro/config.d.mts +0 -50
- package/dist/nitro/config.mjs +0 -55
- package/dist/nitro/types.d.mts +0 -549
- package/dist/nitro/virtual/generators.d.mts +0 -38
- package/dist/nitro/virtual/generators.mjs +0 -190
- /package/dist/{nitro/types.mjs → core/types/standard-schema.mjs} +0 -0
package/dist/nitro/adapter.d.mts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { CoreConfig,
|
|
1
|
+
import { CoreConfig, CoreLogger } from "../core/types/config.mjs";
|
|
2
2
|
import { ScanContext } from "../core/types/scanning.mjs";
|
|
3
|
-
import { FrameworkAdapter
|
|
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
|
-
*
|
|
20
|
+
* Nitro framework adapter
|
|
21
21
|
*/
|
|
22
|
-
declare
|
|
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,
|
|
24
|
+
export { NitroAdapter, NitroAdapter as default, createCoreConfigFromNitro, createLoggerFromNitro, createScanContextFromNitro };
|
package/dist/nitro/adapter.mjs
CHANGED
|
@@ -1,8 +1,4 @@
|
|
|
1
|
-
import {
|
|
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
|
-
|
|
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
|
|
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,
|
|
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,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,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 };
|
package/dist/nitro/index.d.mts
CHANGED
|
@@ -1,6 +1,14 @@
|
|
|
1
|
-
import {
|
|
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/
|
|
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,
|
|
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 };
|
package/dist/nitro/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { NitroAdapter } from "./adapter.mjs";
|
|
2
|
-
import { resolveSecurityConfig } from "./setup/
|
|
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";
|
package/dist/nitro/paths.d.mts
CHANGED
|
@@ -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
|
-
*
|
|
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
|
/**
|
package/dist/nitro/paths.mjs
CHANGED
|
@@ -1,18 +1,22 @@
|
|
|
1
1
|
import { isAbsolute, resolve } from "pathe";
|
|
2
2
|
//#region src/nitro/paths.ts
|
|
3
|
-
const
|
|
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
|
-
*
|
|
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
|
-
|
|
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
|
package/dist/nitro/rollup.mjs
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
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
|
|
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,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
|
|
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.
|