nitro-graphql 2.0.0-beta.36 → 2.0.0-beta.38
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/dist/cli/commands/generate.d.mts +26 -0
- package/dist/cli/commands/generate.mjs +196 -0
- package/dist/cli/commands/index.d.mts +4 -0
- package/dist/cli/commands/index.mjs +5 -0
- package/dist/cli/commands/init.d.mts +12 -0
- package/dist/cli/commands/init.mjs +100 -0
- package/dist/cli/commands/validate.d.mts +10 -0
- package/dist/cli/commands/validate.mjs +69 -0
- package/dist/cli/config.d.mts +75 -0
- package/dist/cli/config.mjs +20 -0
- package/dist/cli/index.d.mts +24 -0
- package/dist/cli/index.mjs +219 -0
- package/dist/core/codegen/client.d.mts +23 -0
- package/dist/core/codegen/client.mjs +150 -0
- package/dist/core/codegen/document-loader.d.mts +10 -0
- package/dist/core/codegen/document-loader.mjs +18 -0
- package/dist/core/codegen/index.d.mts +8 -0
- package/dist/core/codegen/index.mjs +9 -0
- package/dist/{utils/codegen-plugin.d.mts → core/codegen/plugin.d.mts} +2 -2
- package/dist/{utils/codegen-plugin.mjs → core/codegen/plugin.mjs} +1 -1
- package/dist/core/codegen/runtime.d.mts +20 -0
- package/dist/core/codegen/runtime.mjs +60 -0
- package/dist/core/codegen/schema-loader.d.mts +28 -0
- package/dist/core/codegen/schema-loader.mjs +128 -0
- package/dist/core/codegen/server.d.mts +28 -0
- package/dist/core/codegen/server.mjs +143 -0
- package/dist/{codegen → core/codegen}/validation.d.mts +1 -1
- package/dist/{codegen → core/codegen}/validation.mjs +1 -1
- package/dist/core/config.d.mts +50 -0
- package/dist/core/config.mjs +82 -0
- package/dist/core/constants.d.mts +188 -0
- package/dist/core/constants.mjs +210 -0
- package/dist/core/index.d.mts +32 -0
- package/dist/core/index.mjs +26 -0
- package/dist/core/scanning/ast-scanner.d.mts +23 -0
- package/dist/core/scanning/ast-scanner.mjs +103 -0
- package/dist/core/scanning/common.d.mts +37 -0
- package/dist/core/scanning/common.mjs +60 -0
- package/dist/core/scanning/directives.d.mts +10 -0
- package/dist/core/scanning/directives.mjs +29 -0
- package/dist/core/scanning/documents.d.mts +21 -0
- package/dist/core/scanning/documents.mjs +43 -0
- package/dist/core/scanning/index.d.mts +7 -0
- package/dist/core/scanning/index.mjs +8 -0
- package/dist/core/scanning/resolvers.d.mts +10 -0
- package/dist/core/scanning/resolvers.mjs +58 -0
- package/dist/core/scanning/schemas.d.mts +14 -0
- package/dist/core/scanning/schemas.mjs +64 -0
- package/dist/{utils/schema-builder.d.mts → core/schema/builder.d.mts} +7 -2
- package/dist/{utils/schema-builder.mjs → core/schema/builder.mjs} +22 -3
- package/dist/{utils → core/schema}/federation.d.mts +10 -5
- package/dist/{utils → core/schema}/federation.mjs +1 -1
- package/dist/core/schema/index.d.mts +3 -0
- package/dist/core/schema/index.mjs +4 -0
- package/dist/core/types/adapter.d.mts +58 -0
- package/dist/core/types/codegen.d.mts +133 -0
- package/dist/core/types/config.d.mts +212 -0
- package/dist/{types → core/types}/define.d.mts +3 -7
- package/dist/core/types/index.d.mts +5 -0
- package/dist/core/types/scanning.d.mts +69 -0
- package/dist/core/types/scanning.mjs +1 -0
- package/dist/{utils → core/utils}/directive-parser.d.mts +21 -5
- package/dist/{utils → core/utils}/directive-parser.mjs +25 -36
- package/dist/{utils → core/utils}/errors.d.mts +8 -4
- package/dist/{utils → core/utils}/errors.mjs +8 -4
- package/dist/core/utils/file-io.d.mts +24 -0
- package/dist/core/utils/file-io.mjs +47 -0
- package/dist/{utils → core/utils}/imports.d.mts +1 -1
- package/dist/{utils → core/utils}/imports.mjs +1 -1
- package/dist/core/utils/index.d.mts +7 -0
- package/dist/core/utils/index.mjs +8 -0
- package/dist/core/utils/logger.d.mts +19 -0
- package/dist/core/utils/logger.mjs +38 -0
- package/dist/{utils → core/utils}/ofetch-templates.d.mts +1 -1
- package/dist/{utils → core/utils}/ofetch-templates.mjs +1 -1
- package/dist/core/validation/external-services.d.mts +11 -0
- package/dist/{utils/validation.mjs → core/validation/external-services.mjs} +3 -3
- package/dist/core/validation/index.d.mts +2 -0
- package/dist/core/validation/index.mjs +3 -0
- package/dist/define.d.mts +1 -3
- package/dist/index.d.mts +6 -43
- package/dist/index.mjs +5 -62
- package/dist/nitro/adapter.d.mts +30 -0
- package/dist/nitro/adapter.mjs +97 -0
- package/dist/{utils → nitro}/apollo.d.mts +1 -1
- package/dist/{utils → nitro}/apollo.mjs +1 -1
- package/dist/nitro/codegen.d.mts +19 -0
- package/dist/nitro/codegen.mjs +141 -0
- package/dist/nitro/config.d.mts +52 -0
- package/dist/nitro/config.mjs +58 -0
- package/dist/nitro/index.d.mts +46 -0
- package/dist/nitro/index.mjs +65 -0
- package/dist/{utils/path-resolver.d.mts → nitro/paths.d.mts} +3 -19
- package/dist/{utils/path-resolver.mjs → nitro/paths.mjs} +2 -36
- package/dist/{rollup.d.mts → nitro/rollup.d.mts} +1 -1
- package/dist/{rollup.mjs → nitro/rollup.mjs} +11 -23
- package/dist/{routes → nitro/routes}/apollo-server.d.mts +1 -1
- package/dist/nitro/routes/apollo-server.mjs +71 -0
- package/dist/{routes → nitro/routes}/debug-template.d.mts +1 -1
- package/dist/{routes → nitro/routes}/debug-template.mjs +1 -1
- package/dist/{routes → nitro/routes}/debug.d.mts +10 -16
- package/dist/{routes → nitro/routes}/debug.mjs +2 -2
- package/dist/nitro/routes/graphql-yoga.d.mts +6 -0
- package/dist/{routes → nitro/routes}/graphql-yoga.mjs +21 -10
- package/dist/nitro/routes/health.d.mts +10 -0
- package/dist/{routes → nitro/routes}/health.mjs +1 -1
- package/dist/nitro/setup/file-watcher.d.mts +16 -0
- package/dist/{setup → nitro/setup}/file-watcher.mjs +14 -18
- package/dist/nitro/setup/logging.d.mts +17 -0
- package/dist/nitro/setup/logging.mjs +66 -0
- package/dist/nitro/setup/rollup-integration.d.mts +16 -0
- package/dist/{setup → nitro/setup}/rollup-integration.mjs +2 -2
- package/dist/nitro/setup/routes.d.mts +10 -0
- package/dist/nitro/setup/routes.mjs +35 -0
- package/dist/nitro/setup/ts-config.d.mts +11 -0
- package/dist/{setup → nitro/setup}/ts-config.mjs +3 -3
- package/dist/{setup.d.mts → nitro/setup.d.mts} +3 -2
- package/dist/{setup.mjs → nitro/setup.mjs} +73 -62
- package/dist/nitro/types.d.mts +378 -0
- package/dist/nitro/types.mjs +1 -0
- package/dist/nitro/virtual/generators.d.mts +31 -0
- package/dist/nitro/virtual/generators.mjs +193 -0
- package/dist/nitro/virtual/stubs.d.mts +20 -0
- package/dist/nitro/virtual/stubs.mjs +31 -0
- package/dist/{ecosystem/nuxt.d.mts → nuxt.d.mts} +1 -1
- package/dist/{ecosystem/nuxt.mjs → nuxt.mjs} +2 -2
- package/dist/{graphql/server.d.mts → stubs/index.d.mts} +5 -1
- package/dist/stubs/index.mjs +1 -0
- package/package.json +45 -43
- package/dist/codegen/client-types.d.mts +0 -13
- package/dist/codegen/client-types.mjs +0 -131
- package/dist/codegen/external-types.d.mts +0 -12
- package/dist/codegen/external-types.mjs +0 -88
- package/dist/codegen/index.d.mts +0 -18
- package/dist/codegen/index.mjs +0 -24
- package/dist/codegen/server-types.d.mts +0 -13
- package/dist/codegen/server-types.mjs +0 -64
- package/dist/config/defaults.mjs +0 -36
- package/dist/constants/scalars.mjs +0 -27
- package/dist/constants.mjs +0 -106
- package/dist/graphql/index.d.mts +0 -5
- package/dist/routes/apollo-server.mjs +0 -45
- package/dist/routes/graphql-yoga.d.mts +0 -6
- package/dist/routes/health.d.mts +0 -10
- package/dist/setup/graphql-scanner.mjs +0 -25
- package/dist/setup/scaffold-generator.mjs +0 -109
- package/dist/types/index.d.mts +0 -246
- package/dist/types/standard-schema.d.mts +0 -59
- package/dist/utils/client-codegen.d.mts +0 -41
- package/dist/utils/client-codegen.mjs +0 -267
- package/dist/utils/file-generator.d.mts +0 -37
- package/dist/utils/file-generator.mjs +0 -72
- package/dist/utils/file-writer.d.mts +0 -35
- package/dist/utils/file-writer.mjs +0 -32
- package/dist/utils/index.d.mts +0 -13
- package/dist/utils/index.mjs +0 -13
- package/dist/utils/layers.d.mts +0 -22
- package/dist/utils/layers.mjs +0 -28
- package/dist/utils/scanning/common.d.mts +0 -23
- package/dist/utils/scanning/common.mjs +0 -39
- package/dist/utils/scanning/directives.d.mts +0 -11
- package/dist/utils/scanning/directives.mjs +0 -43
- package/dist/utils/scanning/documents.d.mts +0 -15
- package/dist/utils/scanning/documents.mjs +0 -46
- package/dist/utils/scanning/index.d.mts +0 -6
- package/dist/utils/scanning/index.mjs +0 -7
- package/dist/utils/scanning/resolvers.d.mts +0 -11
- package/dist/utils/scanning/resolvers.mjs +0 -100
- package/dist/utils/scanning/schemas.d.mts +0 -15
- package/dist/utils/scanning/schemas.mjs +0 -29
- package/dist/utils/server-codegen.d.mts +0 -7
- package/dist/utils/server-codegen.mjs +0 -113
- package/dist/utils/type-generation.d.mts +0 -6
- package/dist/utils/type-generation.mjs +0 -7
- package/dist/utils/validation.d.mts +0 -11
- package/dist/virtual/debug-info.d.mts +0 -9
- package/dist/virtual/debug-info.mjs +0 -26
- package/dist/virtual/generators/config.d.mts +0 -22
- package/dist/virtual/generators/config.mjs +0 -36
- package/dist/virtual/generators/debug.d.mts +0 -14
- package/dist/virtual/generators/debug.mjs +0 -53
- package/dist/virtual/generators/directives.d.mts +0 -14
- package/dist/virtual/generators/directives.mjs +0 -52
- package/dist/virtual/generators/index.d.mts +0 -6
- package/dist/virtual/generators/index.mjs +0 -7
- package/dist/virtual/generators/resolvers.d.mts +0 -14
- package/dist/virtual/generators/resolvers.mjs +0 -55
- package/dist/virtual/generators/schemas.d.mts +0 -14
- package/dist/virtual/generators/schemas.mjs +0 -43
- package/dist/virtual/graphql-config.d.mts +0 -9
- package/dist/virtual/graphql-config.mjs +0 -10
- package/dist/virtual/module-config.d.mts +0 -9
- package/dist/virtual/module-config.mjs +0 -10
- package/dist/virtual/server-directives.d.mts +0 -11
- package/dist/virtual/server-directives.mjs +0 -10
- package/dist/virtual/server-resolvers.d.mts +0 -11
- package/dist/virtual/server-resolvers.mjs +0 -10
- package/dist/virtual/server-schemas.d.mts +0 -11
- package/dist/virtual/server-schemas.mjs +0 -10
- /package/dist/{graphql/index.mjs → core/types/adapter.mjs} +0 -0
- /package/dist/{graphql/server.mjs → core/types/codegen.mjs} +0 -0
- /package/dist/{types/define.mjs → core/types/config.mjs} +0 -0
- /package/dist/{types/index.mjs → core/types/define.mjs} +0 -0
- /package/dist/{types/standard-schema.mjs → core/types/index.mjs} +0 -0
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { CoreLogger } from "./config.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/core/types/scanning.d.ts
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Scan context for file scanning operations
|
|
7
|
+
* Provides all necessary information for scanning without framework dependencies
|
|
8
|
+
*/
|
|
9
|
+
interface ScanContext {
|
|
10
|
+
/** Root directory of the project */
|
|
11
|
+
rootDir: string;
|
|
12
|
+
/** Server GraphQL directory */
|
|
13
|
+
serverDir: string;
|
|
14
|
+
/** Client GraphQL directory */
|
|
15
|
+
clientDir: string;
|
|
16
|
+
/** Patterns to ignore during scanning */
|
|
17
|
+
ignorePatterns: string[];
|
|
18
|
+
/** Whether running in development mode */
|
|
19
|
+
isDev: boolean;
|
|
20
|
+
/** Logger instance */
|
|
21
|
+
logger: CoreLogger;
|
|
22
|
+
/** Layer server directories (Nuxt layers) */
|
|
23
|
+
layerServerDirs?: string[];
|
|
24
|
+
/** Layer app directories (Nuxt layers) */
|
|
25
|
+
layerAppDirs?: string[];
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Generic scan result wrapper
|
|
29
|
+
* Provides consistent result structure with warnings and errors
|
|
30
|
+
*/
|
|
31
|
+
interface ScanResult<T> {
|
|
32
|
+
/** Scanned items */
|
|
33
|
+
items: T[];
|
|
34
|
+
/** Non-fatal warnings encountered during scanning */
|
|
35
|
+
warnings: string[];
|
|
36
|
+
/** Errors encountered during scanning */
|
|
37
|
+
errors: string[];
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* File information from scanning
|
|
41
|
+
*/
|
|
42
|
+
interface ScannedFile {
|
|
43
|
+
/** Relative path from scan directory */
|
|
44
|
+
path: string;
|
|
45
|
+
/** Absolute file path */
|
|
46
|
+
fullPath: string;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Resolver import information
|
|
50
|
+
*/
|
|
51
|
+
interface ResolverImport {
|
|
52
|
+
/** Export name */
|
|
53
|
+
name: string;
|
|
54
|
+
/** Resolver type (query, mutation, resolver, type, subscription, directive) */
|
|
55
|
+
type: 'query' | 'mutation' | 'resolver' | 'type' | 'subscription' | 'directive';
|
|
56
|
+
/** Aliased import name */
|
|
57
|
+
as: string;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Scanned resolver information
|
|
61
|
+
*/
|
|
62
|
+
interface ScannedResolver {
|
|
63
|
+
/** File specifier (path) */
|
|
64
|
+
specifier: string;
|
|
65
|
+
/** Exports from this file */
|
|
66
|
+
imports: ResolverImport[];
|
|
67
|
+
}
|
|
68
|
+
//#endregion
|
|
69
|
+
export { ResolverImport, ScanContext, ScanResult, ScannedFile, ScannedResolver };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { };
|
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
//#region src/utils/directive-parser.d.ts
|
|
1
|
+
//#region src/core/utils/directive-parser.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Directive parser utilities
|
|
4
|
+
* AST-based parsing for GraphQL directive definitions
|
|
5
|
+
*/
|
|
2
6
|
interface ParsedDirective {
|
|
3
7
|
name: string;
|
|
4
8
|
locations: string[];
|
|
@@ -69,13 +73,25 @@ declare class DirectiveParser {
|
|
|
69
73
|
*/
|
|
70
74
|
declare function generateDirectiveSchema(directive: ParsedDirective): string;
|
|
71
75
|
/**
|
|
72
|
-
*
|
|
73
|
-
*
|
|
76
|
+
* Directive file reference
|
|
77
|
+
* Can be either { fullPath } or { specifier } (for GenImport compatibility)
|
|
74
78
|
*/
|
|
75
|
-
|
|
79
|
+
type DirectiveFileRef = {
|
|
80
|
+
fullPath: string;
|
|
81
|
+
} | {
|
|
82
|
+
specifier: string;
|
|
83
|
+
};
|
|
76
84
|
/**
|
|
77
85
|
* Singleton instance for reuse
|
|
78
86
|
*/
|
|
79
87
|
declare const directiveParser: DirectiveParser;
|
|
88
|
+
/**
|
|
89
|
+
* Generate GraphQL schemas from an array of parsed directives
|
|
90
|
+
*/
|
|
91
|
+
declare function generateDirectiveSchemas(nitro: {
|
|
92
|
+
graphql: {
|
|
93
|
+
buildDir: string;
|
|
94
|
+
};
|
|
95
|
+
}, directives: DirectiveFileRef[]): Promise<string | null>;
|
|
80
96
|
//#endregion
|
|
81
|
-
export { DirectiveParser, ParsedDirective, directiveParser, generateDirectiveSchema, generateDirectiveSchemas };
|
|
97
|
+
export { DirectiveFileRef, DirectiveParser, ParsedDirective, directiveParser, generateDirectiveSchema, generateDirectiveSchemas };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
//#region src/utils/directive-parser.ts
|
|
1
|
+
//#region src/core/utils/directive-parser.ts
|
|
2
2
|
/**
|
|
3
3
|
* Clean AST-based directive parser using oxc-parser
|
|
4
4
|
*/
|
|
@@ -180,47 +180,36 @@ function generateDirectiveSchema(directive) {
|
|
|
180
180
|
return `directive @${directive.name}${args} on ${locations}`;
|
|
181
181
|
}
|
|
182
182
|
/**
|
|
183
|
-
*
|
|
184
|
-
* @returns The path to the generated _directives.graphql file, or null if no directives
|
|
183
|
+
* Get the file path from a directive reference
|
|
185
184
|
*/
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
const { existsSync, readFileSync, writeFileSync, mkdirSync } = await import("node:fs");
|
|
189
|
-
const { readFile } = await import("node:fs/promises");
|
|
190
|
-
const { resolve, dirname } = await import("pathe");
|
|
191
|
-
const directiveSchemas = [];
|
|
192
|
-
const seenDirectives = /* @__PURE__ */ new Set();
|
|
193
|
-
const parser = new DirectiveParser();
|
|
194
|
-
for (const dir of directives) for (const _imp of dir.imports) {
|
|
195
|
-
const fileContent = await readFile(dir.specifier, "utf-8");
|
|
196
|
-
const directiveDefs = await parser.parseDirectives(fileContent, dir.specifier);
|
|
197
|
-
for (const def of directiveDefs) {
|
|
198
|
-
if (seenDirectives.has(def.name)) continue;
|
|
199
|
-
seenDirectives.add(def.name);
|
|
200
|
-
const schema = generateDirectiveSchema(def);
|
|
201
|
-
directiveSchemas.push(schema);
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
if (directiveSchemas.length > 0) {
|
|
205
|
-
const directivesPath = resolve(nitro.graphql.buildDir, "_directives.graphql");
|
|
206
|
-
const content = `# WARNING: This file is auto-generated by nitro-graphql
|
|
207
|
-
# Do not modify this file directly. It will be overwritten.
|
|
208
|
-
# To define custom directives, create .directive.ts files using defineDirective()
|
|
209
|
-
|
|
210
|
-
${directiveSchemas.join("\n\n")}`;
|
|
211
|
-
const targetDir = dirname(directivesPath);
|
|
212
|
-
if (!existsSync(targetDir)) mkdirSync(targetDir, { recursive: true });
|
|
213
|
-
let shouldWrite = true;
|
|
214
|
-
if (existsSync(directivesPath)) shouldWrite = readFileSync(directivesPath, "utf-8") !== content;
|
|
215
|
-
if (shouldWrite) writeFileSync(directivesPath, content, "utf-8");
|
|
216
|
-
return directivesPath;
|
|
217
|
-
}
|
|
218
|
-
return null;
|
|
185
|
+
function getFilePath(ref) {
|
|
186
|
+
return "fullPath" in ref ? ref.fullPath : ref.specifier;
|
|
219
187
|
}
|
|
220
188
|
/**
|
|
221
189
|
* Singleton instance for reuse
|
|
222
190
|
*/
|
|
223
191
|
const directiveParser = new DirectiveParser();
|
|
192
|
+
/**
|
|
193
|
+
* Generate GraphQL schemas from an array of parsed directives
|
|
194
|
+
*/
|
|
195
|
+
async function generateDirectiveSchemas(nitro, directives) {
|
|
196
|
+
if (directives.length === 0) return null;
|
|
197
|
+
const fs = await import("node:fs");
|
|
198
|
+
const path = await import("pathe");
|
|
199
|
+
const allParsedDirectives = [];
|
|
200
|
+
for (const directive of directives) try {
|
|
201
|
+
const filePath = getFilePath(directive);
|
|
202
|
+
const content = fs.readFileSync(filePath, "utf-8");
|
|
203
|
+
const parsed = await directiveParser.parseDirectives(content, filePath);
|
|
204
|
+
allParsedDirectives.push(...parsed);
|
|
205
|
+
} catch {}
|
|
206
|
+
if (allParsedDirectives.length === 0) return null;
|
|
207
|
+
const schemaContent = allParsedDirectives.map((d) => generateDirectiveSchema(d)).join("\n\n");
|
|
208
|
+
const directivesPath = path.join(nitro.graphql.buildDir, "_directives.graphql");
|
|
209
|
+
fs.mkdirSync(path.dirname(directivesPath), { recursive: true });
|
|
210
|
+
fs.writeFileSync(directivesPath, schemaContent, "utf-8");
|
|
211
|
+
return directivesPath;
|
|
212
|
+
}
|
|
224
213
|
|
|
225
214
|
//#endregion
|
|
226
215
|
export { DirectiveParser, directiveParser, generateDirectiveSchema, generateDirectiveSchemas };
|
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
//#region src/utils/errors.d.ts
|
|
1
|
+
//#region src/core/utils/errors.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Error handling utilities for GraphQL
|
|
4
|
+
* Framework-agnostic error masking and handling
|
|
5
|
+
*/
|
|
2
6
|
interface MaskErrorOptions {
|
|
3
7
|
/**
|
|
4
8
|
* Default HTTP status code for validation errors (ZodError)
|
|
@@ -20,7 +24,7 @@ interface MaskErrorOptions {
|
|
|
20
24
|
* @example Basic usage
|
|
21
25
|
* ```ts
|
|
22
26
|
* import { defineGraphQLConfig } from 'nitro-graphql/define'
|
|
23
|
-
* import { createDefaultMaskError } from 'nitro-graphql/utils'
|
|
27
|
+
* import { createDefaultMaskError } from 'nitro-graphql/core/utils'
|
|
24
28
|
*
|
|
25
29
|
* export default defineGraphQLConfig({
|
|
26
30
|
* maskedErrors: {
|
|
@@ -32,7 +36,7 @@ interface MaskErrorOptions {
|
|
|
32
36
|
* @example Custom status codes
|
|
33
37
|
* ```ts
|
|
34
38
|
* import { defineGraphQLConfig } from 'nitro-graphql/define'
|
|
35
|
-
* import { createDefaultMaskError } from 'nitro-graphql/utils'
|
|
39
|
+
* import { createDefaultMaskError } from 'nitro-graphql/core/utils'
|
|
36
40
|
*
|
|
37
41
|
* export default defineGraphQLConfig({
|
|
38
42
|
* maskedErrors: {
|
|
@@ -47,7 +51,7 @@ interface MaskErrorOptions {
|
|
|
47
51
|
* @example Custom error handling with fallback to default
|
|
48
52
|
* ```ts
|
|
49
53
|
* import { defineGraphQLConfig } from 'nitro-graphql/define'
|
|
50
|
-
* import { createDefaultMaskError } from 'nitro-graphql/utils'
|
|
54
|
+
* import { createDefaultMaskError } from 'nitro-graphql/core/utils'
|
|
51
55
|
*
|
|
52
56
|
* const defaultMaskError = createDefaultMaskError()
|
|
53
57
|
*
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { GraphQLError } from "graphql";
|
|
2
2
|
|
|
3
|
-
//#region src/utils/errors.ts
|
|
3
|
+
//#region src/core/utils/errors.ts
|
|
4
|
+
/**
|
|
5
|
+
* Error handling utilities for GraphQL
|
|
6
|
+
* Framework-agnostic error masking and handling
|
|
7
|
+
*/
|
|
4
8
|
/**
|
|
5
9
|
* Default error masking function for GraphQL Yoga
|
|
6
10
|
* Handles common error types like ZodError and HTTPError
|
|
@@ -10,7 +14,7 @@ import { GraphQLError } from "graphql";
|
|
|
10
14
|
* @example Basic usage
|
|
11
15
|
* ```ts
|
|
12
16
|
* import { defineGraphQLConfig } from 'nitro-graphql/define'
|
|
13
|
-
* import { createDefaultMaskError } from 'nitro-graphql/utils'
|
|
17
|
+
* import { createDefaultMaskError } from 'nitro-graphql/core/utils'
|
|
14
18
|
*
|
|
15
19
|
* export default defineGraphQLConfig({
|
|
16
20
|
* maskedErrors: {
|
|
@@ -22,7 +26,7 @@ import { GraphQLError } from "graphql";
|
|
|
22
26
|
* @example Custom status codes
|
|
23
27
|
* ```ts
|
|
24
28
|
* import { defineGraphQLConfig } from 'nitro-graphql/define'
|
|
25
|
-
* import { createDefaultMaskError } from 'nitro-graphql/utils'
|
|
29
|
+
* import { createDefaultMaskError } from 'nitro-graphql/core/utils'
|
|
26
30
|
*
|
|
27
31
|
* export default defineGraphQLConfig({
|
|
28
32
|
* maskedErrors: {
|
|
@@ -37,7 +41,7 @@ import { GraphQLError } from "graphql";
|
|
|
37
41
|
* @example Custom error handling with fallback to default
|
|
38
42
|
* ```ts
|
|
39
43
|
* import { defineGraphQLConfig } from 'nitro-graphql/define'
|
|
40
|
-
* import { createDefaultMaskError } from 'nitro-graphql/utils'
|
|
44
|
+
* import { createDefaultMaskError } from 'nitro-graphql/core/utils'
|
|
41
45
|
*
|
|
42
46
|
* const defaultMaskError = createDefaultMaskError()
|
|
43
47
|
*
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
//#region src/core/utils/file-io.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Unified file I/O utilities
|
|
4
|
+
* Centralizes file writing patterns used across the codebase
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Write file with automatic directory creation
|
|
8
|
+
*/
|
|
9
|
+
declare function writeFile(path: string, content: string): void;
|
|
10
|
+
/**
|
|
11
|
+
* Write file only if content changed (for dev mode optimization)
|
|
12
|
+
* Returns true if file was written, false if unchanged
|
|
13
|
+
*/
|
|
14
|
+
declare function writeFileIfChanged(path: string, content: string): boolean;
|
|
15
|
+
/**
|
|
16
|
+
* Ensure directory exists
|
|
17
|
+
*/
|
|
18
|
+
declare function ensureDir(path: string): void;
|
|
19
|
+
/**
|
|
20
|
+
* Read file safely, returns undefined if file doesn't exist
|
|
21
|
+
*/
|
|
22
|
+
declare function readFileSafe(path: string): string | undefined;
|
|
23
|
+
//#endregion
|
|
24
|
+
export { ensureDir, readFileSafe, writeFile, writeFileIfChanged };
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { dirname } from "pathe";
|
|
2
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
3
|
+
|
|
4
|
+
//#region src/core/utils/file-io.ts
|
|
5
|
+
/**
|
|
6
|
+
* Unified file I/O utilities
|
|
7
|
+
* Centralizes file writing patterns used across the codebase
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Write file with automatic directory creation
|
|
11
|
+
*/
|
|
12
|
+
function writeFile(path, content) {
|
|
13
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
14
|
+
writeFileSync(path, content, "utf-8");
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Write file only if content changed (for dev mode optimization)
|
|
18
|
+
* Returns true if file was written, false if unchanged
|
|
19
|
+
*/
|
|
20
|
+
function writeFileIfChanged(path, content) {
|
|
21
|
+
try {
|
|
22
|
+
if (existsSync(path)) {
|
|
23
|
+
if (readFileSync(path, "utf-8") === content) return false;
|
|
24
|
+
}
|
|
25
|
+
} catch {}
|
|
26
|
+
writeFile(path, content);
|
|
27
|
+
return true;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Ensure directory exists
|
|
31
|
+
*/
|
|
32
|
+
function ensureDir(path) {
|
|
33
|
+
mkdirSync(path, { recursive: true });
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Read file safely, returns undefined if file doesn't exist
|
|
37
|
+
*/
|
|
38
|
+
function readFileSafe(path) {
|
|
39
|
+
try {
|
|
40
|
+
return readFileSync(path, "utf-8");
|
|
41
|
+
} catch {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
//#endregion
|
|
47
|
+
export { ensureDir, readFileSafe, writeFile, writeFileIfChanged };
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { DirectiveFileRef, DirectiveParser, ParsedDirective, directiveParser, generateDirectiveSchema, generateDirectiveSchemas } from "./directive-parser.mjs";
|
|
2
|
+
import { MaskErrorOptions, createDefaultMaskError } from "./errors.mjs";
|
|
3
|
+
import { ensureDir, readFileSafe, writeFile, writeFileIfChanged } from "./file-io.mjs";
|
|
4
|
+
import { getImportId, relativeWithDot } from "./imports.mjs";
|
|
5
|
+
import { createLogger, createSilentLogger, defaultLogger } from "./logger.mjs";
|
|
6
|
+
import { OfetchTemplateOptions, generateOfetchTemplate } from "./ofetch-templates.mjs";
|
|
7
|
+
export { DirectiveFileRef, DirectiveParser, MaskErrorOptions, OfetchTemplateOptions, ParsedDirective, createDefaultMaskError, createLogger, createSilentLogger, defaultLogger, directiveParser, ensureDir, generateDirectiveSchema, generateDirectiveSchemas, generateOfetchTemplate, getImportId, readFileSafe, relativeWithDot, writeFile, writeFileIfChanged };
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ensureDir, readFileSafe, writeFile, writeFileIfChanged } from "./file-io.mjs";
|
|
2
|
+
import { createLogger, createSilentLogger, defaultLogger } from "./logger.mjs";
|
|
3
|
+
import { DirectiveParser, directiveParser, generateDirectiveSchema, generateDirectiveSchemas } from "./directive-parser.mjs";
|
|
4
|
+
import { createDefaultMaskError } from "./errors.mjs";
|
|
5
|
+
import { getImportId, relativeWithDot } from "./imports.mjs";
|
|
6
|
+
import { generateOfetchTemplate } from "./ofetch-templates.mjs";
|
|
7
|
+
|
|
8
|
+
export { DirectiveParser, createDefaultMaskError, createLogger, createSilentLogger, defaultLogger, directiveParser, ensureDir, generateDirectiveSchema, generateDirectiveSchemas, generateOfetchTemplate, getImportId, readFileSafe, relativeWithDot, writeFile, writeFileIfChanged };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { CoreLogger } from "../types/config.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/core/utils/logger.d.ts
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Create a logger instance with the nitro-graphql tag
|
|
7
|
+
*/
|
|
8
|
+
declare function createLogger(tag?: string): CoreLogger;
|
|
9
|
+
/**
|
|
10
|
+
* Default logger instance
|
|
11
|
+
*/
|
|
12
|
+
declare const defaultLogger: CoreLogger;
|
|
13
|
+
/**
|
|
14
|
+
* Create a silent logger (no output)
|
|
15
|
+
* Useful for testing or when logging should be suppressed
|
|
16
|
+
*/
|
|
17
|
+
declare function createSilentLogger(): CoreLogger;
|
|
18
|
+
//#endregion
|
|
19
|
+
export { createLogger, createSilentLogger, defaultLogger };
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { LOG_TAG } from "../constants.mjs";
|
|
2
|
+
import { consola as consola$1 } from "consola";
|
|
3
|
+
|
|
4
|
+
//#region src/core/utils/logger.ts
|
|
5
|
+
/**
|
|
6
|
+
* Create a logger instance with the nitro-graphql tag
|
|
7
|
+
*/
|
|
8
|
+
function createLogger(tag = LOG_TAG) {
|
|
9
|
+
const logger = consola$1.withTag(tag);
|
|
10
|
+
return {
|
|
11
|
+
info: (message, ...args) => logger.info(message, ...args),
|
|
12
|
+
warn: (message, ...args) => logger.warn(message, ...args),
|
|
13
|
+
error: (message, ...args) => logger.error(message, ...args),
|
|
14
|
+
success: (message, ...args) => logger.success(message, ...args),
|
|
15
|
+
debug: (message, ...args) => logger.debug(message, ...args)
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Default logger instance
|
|
20
|
+
*/
|
|
21
|
+
const defaultLogger = createLogger();
|
|
22
|
+
/**
|
|
23
|
+
* Create a silent logger (no output)
|
|
24
|
+
* Useful for testing or when logging should be suppressed
|
|
25
|
+
*/
|
|
26
|
+
function createSilentLogger() {
|
|
27
|
+
const noop = () => {};
|
|
28
|
+
return {
|
|
29
|
+
info: noop,
|
|
30
|
+
warn: noop,
|
|
31
|
+
error: noop,
|
|
32
|
+
success: noop,
|
|
33
|
+
debug: noop
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
//#endregion
|
|
38
|
+
export { createLogger, createSilentLogger, defaultLogger };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
//#region src/core/validation/external-services.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* External services validation utilities
|
|
4
|
+
* Framework-agnostic validation helpers
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Validate external GraphQL service configuration
|
|
8
|
+
*/
|
|
9
|
+
declare function validateExternalServices(services: unknown[]): string[];
|
|
10
|
+
//#endregion
|
|
11
|
+
export { validateExternalServices };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
//#region src/
|
|
1
|
+
//#region src/core/validation/external-services.ts
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
3
|
+
* External services validation utilities
|
|
4
|
+
* Framework-agnostic validation helpers
|
|
5
5
|
*/
|
|
6
6
|
/**
|
|
7
7
|
* Validate external GraphQL service configuration
|
package/dist/define.d.mts
CHANGED
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
import { StandardSchemaV1 } from "./types
|
|
2
|
-
import "./types/index.mjs";
|
|
3
|
-
import { DefineDirectiveConfig, DefineServerConfig, DirectiveDefinition, Flatten } from "./types/define.mjs";
|
|
1
|
+
import { DefineDirectiveConfig, DefineServerConfig, DirectiveDefinition, Flatten, StandardSchemaV1 } from "./nitro/types.mjs";
|
|
4
2
|
import { NPMConfig, Resolvers, ResolversTypes } from "#graphql/server";
|
|
5
3
|
|
|
6
4
|
//#region src/define.d.ts
|
package/dist/index.d.mts
CHANGED
|
@@ -1,43 +1,6 @@
|
|
|
1
|
-
import { NitroGraphQLOptions } from "./types
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* Vite plugin to load GraphQL files as strings AND auto-register Nitro module
|
|
9
|
-
* This prevents Vite from trying to parse .graphql/.gql files as JavaScript
|
|
10
|
-
* and automatically sets up the nitro-graphql module via the nitro: hook
|
|
11
|
-
*
|
|
12
|
-
* @example - Vite usage
|
|
13
|
-
* ```ts
|
|
14
|
-
* import { defineConfig } from 'vite'
|
|
15
|
-
* import { nitro } from 'nitro/vite'
|
|
16
|
-
* import graphql from 'nitro-graphql'
|
|
17
|
-
*
|
|
18
|
-
* export default defineConfig({
|
|
19
|
-
* plugins: [
|
|
20
|
-
* graphql({ framework: 'graphql-yoga' }), // Auto-registers Nitro module
|
|
21
|
-
* nitro()
|
|
22
|
-
* ]
|
|
23
|
-
* })
|
|
24
|
-
* ```
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
* @example - Nitro direct usage
|
|
28
|
-
* ```ts
|
|
29
|
-
*
|
|
30
|
-
* import graphql from 'nitro-graphql'
|
|
31
|
-
*
|
|
32
|
-
* export default defineConfig({
|
|
33
|
-
* modules: [
|
|
34
|
-
* graphql({ framework: 'graphql-yoga' }) // Auto-registers Nitro module
|
|
35
|
-
* ]
|
|
36
|
-
* })
|
|
37
|
-
* ```
|
|
38
|
-
*/
|
|
39
|
-
declare function graphqlModule(options?: NitroGraphQLOptions): Plugin & {
|
|
40
|
-
nitro?: NitroModule;
|
|
41
|
-
};
|
|
42
|
-
//#endregion
|
|
43
|
-
export { graphqlModule as default };
|
|
1
|
+
import { ExternalGraphQLService, NitroGraphQLOptions, SecurityConfig } from "./nitro/types.mjs";
|
|
2
|
+
import { NitroAdapter } from "./nitro/adapter.mjs";
|
|
3
|
+
import { resolveSecurityConfig } from "./nitro/setup/logging.mjs";
|
|
4
|
+
import { setupNitroGraphQL } from "./nitro/setup.mjs";
|
|
5
|
+
import graphqlModule from "./nitro/index.mjs";
|
|
6
|
+
export { type ExternalGraphQLService, NitroAdapter, type NitroGraphQLOptions, type SecurityConfig, graphqlModule as default, resolveSecurityConfig, setupNitroGraphQL };
|
package/dist/index.mjs
CHANGED
|
@@ -1,63 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
1
|
+
import { NitroAdapter } from "./nitro/adapter.mjs";
|
|
2
|
+
import { resolveSecurityConfig } from "./nitro/setup/logging.mjs";
|
|
3
|
+
import { setupNitroGraphQL } from "./nitro/setup.mjs";
|
|
4
|
+
import nitro_default from "./nitro/index.mjs";
|
|
4
5
|
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Vite plugin to load GraphQL files as strings AND auto-register Nitro module
|
|
8
|
-
* This prevents Vite from trying to parse .graphql/.gql files as JavaScript
|
|
9
|
-
* and automatically sets up the nitro-graphql module via the nitro: hook
|
|
10
|
-
*
|
|
11
|
-
* @example - Vite usage
|
|
12
|
-
* ```ts
|
|
13
|
-
* import { defineConfig } from 'vite'
|
|
14
|
-
* import { nitro } from 'nitro/vite'
|
|
15
|
-
* import graphql from 'nitro-graphql'
|
|
16
|
-
*
|
|
17
|
-
* export default defineConfig({
|
|
18
|
-
* plugins: [
|
|
19
|
-
* graphql({ framework: 'graphql-yoga' }), // Auto-registers Nitro module
|
|
20
|
-
* nitro()
|
|
21
|
-
* ]
|
|
22
|
-
* })
|
|
23
|
-
* ```
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
* @example - Nitro direct usage
|
|
27
|
-
* ```ts
|
|
28
|
-
*
|
|
29
|
-
* import graphql from 'nitro-graphql'
|
|
30
|
-
*
|
|
31
|
-
* export default defineConfig({
|
|
32
|
-
* modules: [
|
|
33
|
-
* graphql({ framework: 'graphql-yoga' }) // Auto-registers Nitro module
|
|
34
|
-
* ]
|
|
35
|
-
* })
|
|
36
|
-
* ```
|
|
37
|
-
*/
|
|
38
|
-
function graphqlModule(options) {
|
|
39
|
-
return {
|
|
40
|
-
name: "nitro-graphql",
|
|
41
|
-
enforce: "pre",
|
|
42
|
-
async load(id) {
|
|
43
|
-
if (!/\.(?:graphql|gql)$/i.test(id)) return null;
|
|
44
|
-
try {
|
|
45
|
-
const content = await readFile(id, "utf-8");
|
|
46
|
-
return `export default ${JSON.stringify(content)}`;
|
|
47
|
-
} catch (error) {
|
|
48
|
-
if (error && typeof error === "object" && "code" in error && error.code === "ENOENT") return null;
|
|
49
|
-
throw error;
|
|
50
|
-
}
|
|
51
|
-
},
|
|
52
|
-
nitro: { async setup(nitro) {
|
|
53
|
-
if (options) nitro.options.graphql = defu(nitro.options.graphql || {}, options);
|
|
54
|
-
nitro.options.graphql = nitro.options.graphql || {};
|
|
55
|
-
nitro.options.graphql._vitePlugin = true;
|
|
56
|
-
await setupNitroGraphQL(nitro);
|
|
57
|
-
} }
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
var src_default = graphqlModule;
|
|
61
|
-
|
|
62
|
-
//#endregion
|
|
63
|
-
export { src_default as default };
|
|
6
|
+
export { NitroAdapter, nitro_default as default, resolveSecurityConfig, setupNitroGraphQL };
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { CoreConfig, CoreContext, CoreLogger } from "../core/types/config.mjs";
|
|
2
|
+
import { ScanContext } from "../core/types/scanning.mjs";
|
|
3
|
+
import "../core/types/index.mjs";
|
|
4
|
+
import { FrameworkAdapter, ScanAdapter } from "../core/types/adapter.mjs";
|
|
5
|
+
import { Nitro } from "nitro/types";
|
|
6
|
+
|
|
7
|
+
//#region src/nitro/adapter.d.ts
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Create a CoreLogger from Nitro's logger
|
|
11
|
+
*/
|
|
12
|
+
declare function createLoggerFromNitro(nitro: Nitro): CoreLogger;
|
|
13
|
+
/**
|
|
14
|
+
* Create a ScanContext from Nitro instance
|
|
15
|
+
*/
|
|
16
|
+
declare function createScanContextFromNitro(nitro: Nitro): ScanContext;
|
|
17
|
+
/**
|
|
18
|
+
* Create a CoreConfig from Nitro instance
|
|
19
|
+
*/
|
|
20
|
+
declare function createCoreConfigFromNitro(nitro: Nitro): CoreConfig;
|
|
21
|
+
/**
|
|
22
|
+
* Create a CoreContext from Nitro instance
|
|
23
|
+
*/
|
|
24
|
+
declare function createCoreContextFromNitro(nitro: Nitro): CoreContext;
|
|
25
|
+
/**
|
|
26
|
+
* Nitro framework adapter implementation
|
|
27
|
+
*/
|
|
28
|
+
declare const NitroAdapter: FrameworkAdapter<Nitro> & ScanAdapter<Nitro>;
|
|
29
|
+
//#endregion
|
|
30
|
+
export { NitroAdapter, NitroAdapter as default, createCoreConfigFromNitro, createCoreContextFromNitro, createLoggerFromNitro, createScanContextFromNitro };
|