nitro-graphql 2.0.0-beta.41 → 2.0.0-beta.43

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.
@@ -1,4 +1,4 @@
1
- import { writeFile } from "../utils/file-io.mjs";
1
+ import { writeFileIfChanged } from "../utils/file-io.mjs";
2
2
  import { resolve } from "pathe";
3
3
  import { printSchemaWithDirectives } from "@graphql-tools/utils";
4
4
  import { GraphQLFileLoader } from "@graphql-tools/graphql-file-loader";
@@ -116,7 +116,7 @@ async function downloadAndSaveSchema(service, buildDir) {
116
116
  ...Object.keys(headers).length > 0 && { headers }
117
117
  });
118
118
  else schema = loadSchemaSync(schemas, { loaders: [new GraphQLFileLoader()] });
119
- writeFile(schemaFilePath, printSchemaWithDirectives(schema));
119
+ writeFileIfChanged(schemaFilePath, printSchemaWithDirectives(schema));
120
120
  }
121
121
  return schemaFilePath;
122
122
  } catch {
@@ -13,7 +13,7 @@ import { DEFAULT_SERVER_CODEGEN_CONFIG, generateServerTypesCore, generateTypes }
13
13
  import { validateNoDuplicateTypes } from "./codegen/validation.mjs";
14
14
  import "./codegen/index.mjs";
15
15
  import { CreateCoreConfigOptions, createCoreConfig, createCoreContext, createScanContext, mergeGraphQLOptions } from "./config.mjs";
16
- import { PackageConfig, ResolvedExtend, ResolvedPackage, loadPackageConfig, resolvePackageFiles } from "./manifest.mjs";
16
+ import { PackageConfig, ResolvedExtend, ResolvedPackage, isLocalPath, loadPackageConfig, resolvePackageFiles } from "./manifest.mjs";
17
17
  import { ASTScanConfig, parseSingleFile, scanWithAST } from "./scanning/ast-scanner.mjs";
18
18
  import { deduplicateFiles, extractPaths, filterByExtension, scanDirectory } from "./scanning/common.mjs";
19
19
  import { scanDirectivesCore } from "./scanning/directives.mjs";
@@ -30,4 +30,4 @@ import { getImportId, relativeWithDot } from "./utils/imports.mjs";
30
30
  import { createLogger, createSilentLogger, defaultLogger } from "./utils/logger.mjs";
31
31
  import { OfetchTemplateOptions, generateOfetchTemplate } from "./utils/ofetch-templates.mjs";
32
32
  import { validateExternalServices } from "./validation/external-services.mjs";
33
- export { ASTScanConfig, BUILTIN_SCALARS, CHUNK_NAME_RESOLVERS, CHUNK_NAME_SCHEMAS, CHUNK_PATH_GRAPHQL, CHUNK_PATH_UNKNOWN, CODEGEN_EXTERNALS, ClientCodegenConfig, ClientCodegenInput, ClientCodegenResult, CoreClientUtilsConfig, CoreCodegenConfig, CoreConfig, CoreContext, CoreExternalService, CoreFederationConfig, CoreGraphQLOptions, CoreLogger, CorePathsConfig, CoreScaffoldConfig, CoreSdkConfig, CoreSecurityConfig, CoreTypesConfig, CreateCoreConfigOptions, CreateMergedSchemaOptions, DEFAULT_CLIENT_CODEGEN_CONFIG, DEFAULT_CLIENT_TYPES_PATH, DEFAULT_GRAPHQL_SCALARS, DEFAULT_SERVER_CODEGEN_CONFIG, DEFAULT_SERVER_TYPES_PATH, DEFINE_DIRECTIVE, DEFINE_FIELD, DEFINE_FUNCTIONS, DEFINE_GRAPHQL_CONFIG, DEFINE_MUTATION, DEFINE_QUERY, DEFINE_RESOLVER, DEFINE_SCHEMA, DEFINE_SUBSCRIPTION, DIRECTIVE_EXTENSIONS, DIRECTIVE_GLOB_PATTERN, DIR_APP_GRAPHQL, DIR_BUILD_NITRO, DIR_BUILD_NUXT, DIR_CLIENT_GRAPHQL, DIR_EXTERNAL, DIR_ROUTES_GRAPHQL, DIR_SERVER_GRAPHQL, DIR_SERVER_GRAPHQL_WIN, DefineDirectiveConfig, DefineFunction, DirectiveArgument, DirectiveDefinition, DirectiveFileRef, DirectiveParser, DirectiveWrapper, ENDPOINT_DEBUG, ENDPOINT_GRAPHQL, ENDPOINT_HEALTH, ExternalServiceCodegenConfig, FEDERATION_EXTERNALS, FILE_CLIENT_TYPES, FILE_CONFIG_TS, FILE_CONTEXT_DTS, FILE_CONTEXT_TS, FILE_DIRECTIVES_GRAPHQL, FILE_GRAPHQL_CONFIG, FILE_GRAPHQL_DTS, FILE_INDEX_TS, FILE_OFETCH_TS, FILE_SCHEMA_GRAPHQL, FILE_SCHEMA_TS, FILE_SDK_TS, FILE_SERVER_TYPES, FRAMEWORK_NITRO, FRAMEWORK_NUXT, FRAMEWORK_STANDALONE, Flatten, Framework, GENERATED_FILE_HEADER, GLOB_SCAN_PATTERN, GRAPHQL_EXTENSIONS, GRAPHQL_FRAMEWORK_APOLLO, GRAPHQL_FRAMEWORK_YOGA, GRAPHQL_GLOB_PATTERN, GRAPHQL_HTTP_METHODS, GraphQLArgumentType, GraphQLBaseType, GraphQLFramework, GraphQLLoadSchemaOptions, GraphQLScalarType, GraphQLTypeDefPointer, HTTP_STATUS_BAD_REQUEST, HTTP_STATUS_INTERNAL_ERROR, LOG_TAG, MaskErrorOptions, ModuleConfig, OfetchTemplateOptions, PATTERN_CLIENT_EXTERNAL_TYPES, PLACEHOLDER_BUILD_DIR, PLACEHOLDER_CLIENT_DIR, PLACEHOLDER_FRAMEWORK, PLACEHOLDER_ROOT_DIR, PLACEHOLDER_SERVER_DIR, PLACEHOLDER_SERVICE_NAME, PLACEHOLDER_TYPES_DIR, PackageConfig, ParsedDirective, RESOLVER_EXTENSIONS, RESOLVER_GLOB_PATTERN, RESOLVER_TYPE_DIRECTIVE, RESOLVER_TYPE_MUTATION, RESOLVER_TYPE_QUERY, RESOLVER_TYPE_RESOLVER, RESOLVER_TYPE_SUBSCRIPTION, RESOLVER_TYPE_TYPE, ResolvedExtend, ResolvedPackage, ResolverDefinition, ResolverImport, ResolverType, SERVICE_DEFAULT, ScalarType, ScanContext, ScanDocumentsOptions, ScanResult, ScannedFile, ScannedResolver, SchemaDefinition, SchemaLoadOptions, SdkCodegenConfig, ServerCodegenConfig, ServerCodegenInput, ServerCodegenResult, buildGraphQLSchema, createCoreConfig, createCoreContext, createDefaultMaskError, createLogger, createMergedSchema, createScanContext, createSilentLogger, deduplicateFiles, defaultLogger, directiveParser, downloadAndSaveSchema, ensureDir, extractPaths, filterByExtension, generateClientTypesCore, generateDirectiveSchema, generateDirectiveSchemas, generateExternalClientTypesCore, generateOfetchTemplate, generateResolverModule, generateRuntimeIndex, generateSchemaModule, generateServerTypesCore, generateTypes, getImportId, graphQLLoadSchemaSync, loadExternalSchema, loadFederationSupport, loadGraphQLDocuments, loadPackageConfig, mergeGraphQLOptions, parseResolverCall, parseSingleFile, pluginContent, readFileSafe, relativeWithDot, resetFederationCache, resolvePackageFiles, scanDirectivesCore, scanDirectory, scanDocumentsCore, scanGraphqlCore, scanResolversCore, scanSchemasCore, scanWithAST, validateExternalServices, validateNoDuplicateTypes, warnFederationUnavailable, writeFile, writeFileIfChanged };
33
+ export { ASTScanConfig, BUILTIN_SCALARS, CHUNK_NAME_RESOLVERS, CHUNK_NAME_SCHEMAS, CHUNK_PATH_GRAPHQL, CHUNK_PATH_UNKNOWN, CODEGEN_EXTERNALS, ClientCodegenConfig, ClientCodegenInput, ClientCodegenResult, CoreClientUtilsConfig, CoreCodegenConfig, CoreConfig, CoreContext, CoreExternalService, CoreFederationConfig, CoreGraphQLOptions, CoreLogger, CorePathsConfig, CoreScaffoldConfig, CoreSdkConfig, CoreSecurityConfig, CoreTypesConfig, CreateCoreConfigOptions, CreateMergedSchemaOptions, DEFAULT_CLIENT_CODEGEN_CONFIG, DEFAULT_CLIENT_TYPES_PATH, DEFAULT_GRAPHQL_SCALARS, DEFAULT_SERVER_CODEGEN_CONFIG, DEFAULT_SERVER_TYPES_PATH, DEFINE_DIRECTIVE, DEFINE_FIELD, DEFINE_FUNCTIONS, DEFINE_GRAPHQL_CONFIG, DEFINE_MUTATION, DEFINE_QUERY, DEFINE_RESOLVER, DEFINE_SCHEMA, DEFINE_SUBSCRIPTION, DIRECTIVE_EXTENSIONS, DIRECTIVE_GLOB_PATTERN, DIR_APP_GRAPHQL, DIR_BUILD_NITRO, DIR_BUILD_NUXT, DIR_CLIENT_GRAPHQL, DIR_EXTERNAL, DIR_ROUTES_GRAPHQL, DIR_SERVER_GRAPHQL, DIR_SERVER_GRAPHQL_WIN, DefineDirectiveConfig, DefineFunction, DirectiveArgument, DirectiveDefinition, DirectiveFileRef, DirectiveParser, DirectiveWrapper, ENDPOINT_DEBUG, ENDPOINT_GRAPHQL, ENDPOINT_HEALTH, ExternalServiceCodegenConfig, FEDERATION_EXTERNALS, FILE_CLIENT_TYPES, FILE_CONFIG_TS, FILE_CONTEXT_DTS, FILE_CONTEXT_TS, FILE_DIRECTIVES_GRAPHQL, FILE_GRAPHQL_CONFIG, FILE_GRAPHQL_DTS, FILE_INDEX_TS, FILE_OFETCH_TS, FILE_SCHEMA_GRAPHQL, FILE_SCHEMA_TS, FILE_SDK_TS, FILE_SERVER_TYPES, FRAMEWORK_NITRO, FRAMEWORK_NUXT, FRAMEWORK_STANDALONE, Flatten, Framework, GENERATED_FILE_HEADER, GLOB_SCAN_PATTERN, GRAPHQL_EXTENSIONS, GRAPHQL_FRAMEWORK_APOLLO, GRAPHQL_FRAMEWORK_YOGA, GRAPHQL_GLOB_PATTERN, GRAPHQL_HTTP_METHODS, GraphQLArgumentType, GraphQLBaseType, GraphQLFramework, GraphQLLoadSchemaOptions, GraphQLScalarType, GraphQLTypeDefPointer, HTTP_STATUS_BAD_REQUEST, HTTP_STATUS_INTERNAL_ERROR, LOG_TAG, MaskErrorOptions, ModuleConfig, OfetchTemplateOptions, PATTERN_CLIENT_EXTERNAL_TYPES, PLACEHOLDER_BUILD_DIR, PLACEHOLDER_CLIENT_DIR, PLACEHOLDER_FRAMEWORK, PLACEHOLDER_ROOT_DIR, PLACEHOLDER_SERVER_DIR, PLACEHOLDER_SERVICE_NAME, PLACEHOLDER_TYPES_DIR, PackageConfig, ParsedDirective, RESOLVER_EXTENSIONS, RESOLVER_GLOB_PATTERN, RESOLVER_TYPE_DIRECTIVE, RESOLVER_TYPE_MUTATION, RESOLVER_TYPE_QUERY, RESOLVER_TYPE_RESOLVER, RESOLVER_TYPE_SUBSCRIPTION, RESOLVER_TYPE_TYPE, ResolvedExtend, ResolvedPackage, ResolverDefinition, ResolverImport, ResolverType, SERVICE_DEFAULT, ScalarType, ScanContext, ScanDocumentsOptions, ScanResult, ScannedFile, ScannedResolver, SchemaDefinition, SchemaLoadOptions, SdkCodegenConfig, ServerCodegenConfig, ServerCodegenInput, ServerCodegenResult, buildGraphQLSchema, createCoreConfig, createCoreContext, createDefaultMaskError, createLogger, createMergedSchema, createScanContext, createSilentLogger, deduplicateFiles, defaultLogger, directiveParser, downloadAndSaveSchema, ensureDir, extractPaths, filterByExtension, generateClientTypesCore, generateDirectiveSchema, generateDirectiveSchemas, generateExternalClientTypesCore, generateOfetchTemplate, generateResolverModule, generateRuntimeIndex, generateSchemaModule, generateServerTypesCore, generateTypes, getImportId, graphQLLoadSchemaSync, isLocalPath, loadExternalSchema, loadFederationSupport, loadGraphQLDocuments, loadPackageConfig, mergeGraphQLOptions, parseResolverCall, parseSingleFile, pluginContent, readFileSafe, relativeWithDot, resetFederationCache, resolvePackageFiles, scanDirectivesCore, scanDirectory, scanDocumentsCore, scanGraphqlCore, scanResolversCore, scanSchemasCore, scanWithAST, validateExternalServices, validateNoDuplicateTypes, warnFederationUnavailable, writeFile, writeFileIfChanged };
@@ -9,7 +9,7 @@ import { DEFAULT_SERVER_CODEGEN_CONFIG, generateServerTypesCore, generateTypes }
9
9
  import { validateNoDuplicateTypes } from "./codegen/validation.mjs";
10
10
  import { createLogger, createSilentLogger, defaultLogger } from "./utils/logger.mjs";
11
11
  import { createCoreConfig, createCoreContext, createScanContext, mergeGraphQLOptions } from "./config.mjs";
12
- import { loadPackageConfig, resolvePackageFiles } from "./manifest.mjs";
12
+ import { isLocalPath, loadPackageConfig, resolvePackageFiles } from "./manifest.mjs";
13
13
  import { deduplicateFiles, extractPaths, filterByExtension, scanDirectory } from "./scanning/common.mjs";
14
14
  import { parseSingleFile, scanWithAST } from "./scanning/ast-scanner.mjs";
15
15
  import { scanDirectivesCore } from "./scanning/directives.mjs";
@@ -24,4 +24,4 @@ import { getImportId, relativeWithDot } from "./utils/imports.mjs";
24
24
  import { generateOfetchTemplate } from "./utils/ofetch-templates.mjs";
25
25
  import { validateExternalServices } from "./validation/external-services.mjs";
26
26
 
27
- export { BUILTIN_SCALARS, CHUNK_NAME_RESOLVERS, CHUNK_NAME_SCHEMAS, CHUNK_PATH_GRAPHQL, CHUNK_PATH_UNKNOWN, CODEGEN_EXTERNALS, DEFAULT_CLIENT_CODEGEN_CONFIG, DEFAULT_CLIENT_TYPES_PATH, DEFAULT_GRAPHQL_SCALARS, DEFAULT_SERVER_CODEGEN_CONFIG, DEFAULT_SERVER_TYPES_PATH, DEFINE_DIRECTIVE, DEFINE_FIELD, DEFINE_FUNCTIONS, DEFINE_GRAPHQL_CONFIG, DEFINE_MUTATION, DEFINE_QUERY, DEFINE_RESOLVER, DEFINE_SCHEMA, DEFINE_SUBSCRIPTION, DIRECTIVE_EXTENSIONS, DIRECTIVE_GLOB_PATTERN, DIR_APP_GRAPHQL, DIR_BUILD_NITRO, DIR_BUILD_NUXT, DIR_CLIENT_GRAPHQL, DIR_EXTERNAL, DIR_ROUTES_GRAPHQL, DIR_SERVER_GRAPHQL, DIR_SERVER_GRAPHQL_WIN, DirectiveParser, ENDPOINT_DEBUG, ENDPOINT_GRAPHQL, ENDPOINT_HEALTH, FEDERATION_EXTERNALS, FILE_CLIENT_TYPES, FILE_CONFIG_TS, FILE_CONTEXT_DTS, FILE_CONTEXT_TS, FILE_DIRECTIVES_GRAPHQL, FILE_GRAPHQL_CONFIG, FILE_GRAPHQL_DTS, FILE_INDEX_TS, FILE_OFETCH_TS, FILE_SCHEMA_GRAPHQL, FILE_SCHEMA_TS, FILE_SDK_TS, FILE_SERVER_TYPES, FRAMEWORK_NITRO, FRAMEWORK_NUXT, FRAMEWORK_STANDALONE, GENERATED_FILE_HEADER, GLOB_SCAN_PATTERN, GRAPHQL_EXTENSIONS, GRAPHQL_FRAMEWORK_APOLLO, GRAPHQL_FRAMEWORK_YOGA, GRAPHQL_GLOB_PATTERN, GRAPHQL_HTTP_METHODS, HTTP_STATUS_BAD_REQUEST, HTTP_STATUS_INTERNAL_ERROR, LOG_TAG, PATTERN_CLIENT_EXTERNAL_TYPES, PLACEHOLDER_BUILD_DIR, PLACEHOLDER_CLIENT_DIR, PLACEHOLDER_FRAMEWORK, PLACEHOLDER_ROOT_DIR, PLACEHOLDER_SERVER_DIR, PLACEHOLDER_SERVICE_NAME, PLACEHOLDER_TYPES_DIR, RESOLVER_EXTENSIONS, RESOLVER_GLOB_PATTERN, RESOLVER_TYPE_DIRECTIVE, RESOLVER_TYPE_MUTATION, RESOLVER_TYPE_QUERY, RESOLVER_TYPE_RESOLVER, RESOLVER_TYPE_SUBSCRIPTION, RESOLVER_TYPE_TYPE, SERVICE_DEFAULT, buildGraphQLSchema, createCoreConfig, createCoreContext, createDefaultMaskError, createLogger, createMergedSchema, createScanContext, createSilentLogger, deduplicateFiles, defaultLogger, directiveParser, downloadAndSaveSchema, ensureDir, extractPaths, filterByExtension, generateClientTypesCore, generateDirectiveSchema, generateDirectiveSchemas, generateExternalClientTypesCore, generateOfetchTemplate, generateResolverModule, generateRuntimeIndex, generateSchemaModule, generateServerTypesCore, generateTypes, getImportId, graphQLLoadSchemaSync, loadExternalSchema, loadFederationSupport, loadGraphQLDocuments, loadPackageConfig, mergeGraphQLOptions, parseResolverCall, parseSingleFile, pluginContent, readFileSafe, relativeWithDot, resetFederationCache, resolvePackageFiles, scanDirectivesCore, scanDirectory, scanDocumentsCore, scanGraphqlCore, scanResolversCore, scanSchemasCore, scanWithAST, validateExternalServices, validateNoDuplicateTypes, warnFederationUnavailable, writeFile, writeFileIfChanged };
27
+ export { BUILTIN_SCALARS, CHUNK_NAME_RESOLVERS, CHUNK_NAME_SCHEMAS, CHUNK_PATH_GRAPHQL, CHUNK_PATH_UNKNOWN, CODEGEN_EXTERNALS, DEFAULT_CLIENT_CODEGEN_CONFIG, DEFAULT_CLIENT_TYPES_PATH, DEFAULT_GRAPHQL_SCALARS, DEFAULT_SERVER_CODEGEN_CONFIG, DEFAULT_SERVER_TYPES_PATH, DEFINE_DIRECTIVE, DEFINE_FIELD, DEFINE_FUNCTIONS, DEFINE_GRAPHQL_CONFIG, DEFINE_MUTATION, DEFINE_QUERY, DEFINE_RESOLVER, DEFINE_SCHEMA, DEFINE_SUBSCRIPTION, DIRECTIVE_EXTENSIONS, DIRECTIVE_GLOB_PATTERN, DIR_APP_GRAPHQL, DIR_BUILD_NITRO, DIR_BUILD_NUXT, DIR_CLIENT_GRAPHQL, DIR_EXTERNAL, DIR_ROUTES_GRAPHQL, DIR_SERVER_GRAPHQL, DIR_SERVER_GRAPHQL_WIN, DirectiveParser, ENDPOINT_DEBUG, ENDPOINT_GRAPHQL, ENDPOINT_HEALTH, FEDERATION_EXTERNALS, FILE_CLIENT_TYPES, FILE_CONFIG_TS, FILE_CONTEXT_DTS, FILE_CONTEXT_TS, FILE_DIRECTIVES_GRAPHQL, FILE_GRAPHQL_CONFIG, FILE_GRAPHQL_DTS, FILE_INDEX_TS, FILE_OFETCH_TS, FILE_SCHEMA_GRAPHQL, FILE_SCHEMA_TS, FILE_SDK_TS, FILE_SERVER_TYPES, FRAMEWORK_NITRO, FRAMEWORK_NUXT, FRAMEWORK_STANDALONE, GENERATED_FILE_HEADER, GLOB_SCAN_PATTERN, GRAPHQL_EXTENSIONS, GRAPHQL_FRAMEWORK_APOLLO, GRAPHQL_FRAMEWORK_YOGA, GRAPHQL_GLOB_PATTERN, GRAPHQL_HTTP_METHODS, HTTP_STATUS_BAD_REQUEST, HTTP_STATUS_INTERNAL_ERROR, LOG_TAG, PATTERN_CLIENT_EXTERNAL_TYPES, PLACEHOLDER_BUILD_DIR, PLACEHOLDER_CLIENT_DIR, PLACEHOLDER_FRAMEWORK, PLACEHOLDER_ROOT_DIR, PLACEHOLDER_SERVER_DIR, PLACEHOLDER_SERVICE_NAME, PLACEHOLDER_TYPES_DIR, RESOLVER_EXTENSIONS, RESOLVER_GLOB_PATTERN, RESOLVER_TYPE_DIRECTIVE, RESOLVER_TYPE_MUTATION, RESOLVER_TYPE_QUERY, RESOLVER_TYPE_RESOLVER, RESOLVER_TYPE_SUBSCRIPTION, RESOLVER_TYPE_TYPE, SERVICE_DEFAULT, buildGraphQLSchema, createCoreConfig, createCoreContext, createDefaultMaskError, createLogger, createMergedSchema, createScanContext, createSilentLogger, deduplicateFiles, defaultLogger, directiveParser, downloadAndSaveSchema, ensureDir, extractPaths, filterByExtension, generateClientTypesCore, generateDirectiveSchema, generateDirectiveSchemas, generateExternalClientTypesCore, generateOfetchTemplate, generateResolverModule, generateRuntimeIndex, generateSchemaModule, generateServerTypesCore, generateTypes, getImportId, graphQLLoadSchemaSync, isLocalPath, loadExternalSchema, loadFederationSupport, loadGraphQLDocuments, loadPackageConfig, mergeGraphQLOptions, parseResolverCall, parseSingleFile, pluginContent, readFileSafe, relativeWithDot, resetFederationCache, resolvePackageFiles, scanDirectivesCore, scanDirectory, scanDocumentsCore, scanGraphqlCore, scanResolversCore, scanSchemasCore, scanWithAST, validateExternalServices, validateNoDuplicateTypes, warnFederationUnavailable, writeFile, writeFileIfChanged };
@@ -27,10 +27,14 @@ interface ResolvedExtend {
27
27
  serverDir: string;
28
28
  }
29
29
  /**
30
- * Load config from package
30
+ * Check if source is a local path (relative or absolute)
31
+ */
32
+ declare function isLocalPath(source: string): boolean;
33
+ /**
34
+ * Load config from package or local directory
31
35
  * Uses c12 for proper config loading with TypeScript support
32
36
  *
33
- * @param source - Package name or explicit path
37
+ * @param source - Package name or local path (./path, ../path, /absolute/path)
34
38
  * @param rootDir - Root directory for resolution
35
39
  * @returns Resolved package with config and base directory, or null if not found
36
40
  */
@@ -43,4 +47,4 @@ declare function loadPackageConfig(source: string, rootDir: string): Promise<Res
43
47
  */
44
48
  declare function resolvePackageFiles(pkg: ResolvedPackage): Promise<ResolvedExtend>;
45
49
  //#endregion
46
- export { PackageConfig, ResolvedExtend, ResolvedPackage, loadPackageConfig, resolvePackageFiles };
50
+ export { PackageConfig, ResolvedExtend, ResolvedPackage, isLocalPath, loadPackageConfig, resolvePackageFiles };
@@ -1,5 +1,5 @@
1
1
  import { DIRECTIVE_EXTENSIONS, GRAPHQL_EXTENSIONS, RESOLVER_EXTENSIONS } from "./constants.mjs";
2
- import { dirname, resolve } from "pathe";
2
+ import { dirname, isAbsolute, resolve } from "pathe";
3
3
  import { existsSync } from "node:fs";
4
4
  import { loadConfig } from "c12";
5
5
  import { resolvePath } from "mlly";
@@ -11,16 +11,26 @@ import { glob } from "tinyglobby";
11
11
  * Loads package configuration for extend functionality
12
12
  */
13
13
  /**
14
- * Load config from package
14
+ * Check if source is a local path (relative or absolute)
15
+ */
16
+ function isLocalPath(source) {
17
+ return source.startsWith(".") || isAbsolute(source);
18
+ }
19
+ /**
20
+ * Load config from package or local directory
15
21
  * Uses c12 for proper config loading with TypeScript support
16
22
  *
17
- * @param source - Package name or explicit path
23
+ * @param source - Package name or local path (./path, ../path, /absolute/path)
18
24
  * @param rootDir - Root directory for resolution
19
25
  * @returns Resolved package with config and base directory, or null if not found
20
26
  */
21
27
  async function loadPackageConfig(source, rootDir) {
22
28
  try {
23
- const pkgDir = dirname(await resolvePath(`${source}/package.json`, {
29
+ let pkgDir;
30
+ if (isLocalPath(source)) {
31
+ pkgDir = resolve(rootDir, source);
32
+ if (!existsSync(pkgDir)) return null;
33
+ } else pkgDir = dirname(await resolvePath(`${source}/package.json`, {
24
34
  url: rootDir,
25
35
  extensions: [".json"]
26
36
  }));
@@ -73,4 +83,4 @@ async function resolvePackageFiles(pkg) {
73
83
  }
74
84
 
75
85
  //#endregion
76
- export { loadPackageConfig, resolvePackageFiles };
86
+ export { isLocalPath, loadPackageConfig, resolvePackageFiles };
@@ -207,7 +207,7 @@ async function generateDirectiveSchemas(nitro, directives) {
207
207
  const schemaContent = allParsedDirectives.map((d) => generateDirectiveSchema(d)).join("\n\n");
208
208
  const directivesPath = path.join(nitro.graphql.buildDir, "_directives.graphql");
209
209
  fs.mkdirSync(path.dirname(directivesPath), { recursive: true });
210
- fs.writeFileSync(directivesPath, schemaContent, "utf-8");
210
+ if ((fs.existsSync(directivesPath) ? fs.readFileSync(directivesPath, "utf-8") : null) !== schemaContent) fs.writeFileSync(directivesPath, schemaContent, "utf-8");
211
211
  return directivesPath;
212
212
  }
213
213
 
@@ -1,6 +1,6 @@
1
- import * as nitro_deps_h35 from "nitro/deps/h3";
1
+ import * as nitro_deps_h30 from "nitro/deps/h3";
2
2
 
3
3
  //#region src/nitro/routes/apollo-server.d.ts
4
- declare const _default: nitro_deps_h35.EventHandlerWithFetch<nitro_deps_h35.EventHandlerRequest, Promise<any>>;
4
+ declare const _default: nitro_deps_h30.EventHandlerWithFetch<nitro_deps_h30.EventHandlerRequest, Promise<any>>;
5
5
  //#endregion
6
6
  export { _default as default };
@@ -1,4 +1,4 @@
1
- import * as nitro_deps_h30 from "nitro/deps/h3";
1
+ import * as nitro_deps_h31 from "nitro/deps/h3";
2
2
 
3
3
  //#region src/nitro/routes/debug.d.ts
4
4
 
@@ -10,7 +10,7 @@ import * as nitro_deps_h30 from "nitro/deps/h3";
10
10
  * - /_nitro/graphql/debug - HTML dashboard
11
11
  * - /_nitro/graphql/debug?format=json - JSON API
12
12
  */
13
- declare const _default: nitro_deps_h30.EventHandlerWithFetch<nitro_deps_h30.EventHandlerRequest, Promise<string | {
13
+ declare const _default: nitro_deps_h31.EventHandlerWithFetch<nitro_deps_h31.EventHandlerRequest, Promise<string | {
14
14
  timestamp: string;
15
15
  environment: {
16
16
  dev: any;
@@ -1,6 +1,6 @@
1
- import * as nitro_deps_h31 from "nitro/deps/h3";
1
+ import * as nitro_deps_h35 from "nitro/deps/h3";
2
2
 
3
3
  //#region src/nitro/routes/graphql-yoga.d.ts
4
- declare const _default: nitro_deps_h31.EventHandlerWithFetch<nitro_deps_h31.EventHandlerRequest, Promise<Response>>;
4
+ declare const _default: nitro_deps_h35.EventHandlerWithFetch<nitro_deps_h35.EventHandlerRequest, Promise<Response>>;
5
5
  //#endregion
6
6
  export { _default as default };
@@ -1,9 +1,10 @@
1
1
  import { LOG_TAG } from "../../core/constants.mjs";
2
- import { loadPackageConfig, resolvePackageFiles } from "../../core/manifest.mjs";
2
+ import { isLocalPath, loadPackageConfig, resolvePackageFiles } from "../../core/manifest.mjs";
3
3
  import { parseSingleFile } from "../../core/scanning/ast-scanner.mjs";
4
4
  import { parseResolverCall } from "../../core/scanning/resolvers.mjs";
5
5
  import consola from "consola";
6
6
  import { dirname, resolve } from "pathe";
7
+ import { existsSync } from "node:fs";
7
8
 
8
9
  //#region src/nitro/setup/extend-loader.ts
9
10
  const logger = consola.withTag(LOG_TAG);
@@ -20,6 +21,9 @@ async function resolveExtendDirs(nitro) {
20
21
  if (pkg) {
21
22
  const serverDir = resolve(pkg.baseDir, pkg.config.serverDir || "server/graphql");
22
23
  dirs.push(serverDir);
24
+ } else if (isLocalPath(source)) {
25
+ const localDir = resolve(nitro.options.rootDir, source, "graphql");
26
+ if (existsSync(localDir)) dirs.push(localDir);
23
27
  }
24
28
  } else if (source && typeof source === "object") {
25
29
  const obj = source;
@@ -8,6 +8,7 @@ import consola from "consola";
8
8
  import { join, resolve } from "pathe";
9
9
  import { existsSync, readFileSync, writeFileSync } from "node:fs";
10
10
  import { watch } from "chokidar";
11
+ import { debounce } from "perfect-debounce";
11
12
 
12
13
  //#region src/nitro/setup/file-watcher.ts
13
14
  const logger = consola.withTag(LOG_TAG);
@@ -33,12 +34,15 @@ function setupFileWatcher(nitro, watchDirs) {
33
34
  ignoreInitial: DEFAULT_WATCHER_IGNORE_INITIAL,
34
35
  ignored: nitro.options.ignore
35
36
  });
36
- watcher.on("all", async (_, path) => {
37
- if (path.includes("/sdk.ts") || path.includes("/sdk.js") || path.endsWith("/config.ts")) return;
38
- const isGraphQLFile = GRAPHQL_EXTENSIONS.some((ext) => path.endsWith(ext));
39
- const isResolverFile = RESOLVER_EXTENSIONS.some((ext) => path.endsWith(ext));
40
- const isDirectiveFile = DIRECTIVE_EXTENSIONS.some((ext) => path.endsWith(ext));
41
- if (isGraphQLFile || isResolverFile || isDirectiveFile) if (path.includes(nitro.graphql.serverDir) || path.includes(DIR_SERVER_GRAPHQL) || path.includes(DIR_SERVER_GRAPHQL_WIN) || isResolverFile || isDirectiveFile) {
37
+ const pending = {
38
+ server: false,
39
+ client: false,
40
+ graphql: false
41
+ };
42
+ async function processChanges() {
43
+ const changes = { ...pending };
44
+ pending.server = pending.client = pending.graphql = false;
45
+ if (changes.server) {
42
46
  const directivesResult = await NitroAdapter.scanDirectives(nitro);
43
47
  nitro.scanDirectives = directivesResult.items;
44
48
  if (!nitro.scanSchemas) nitro.scanSchemas = [];
@@ -51,12 +55,25 @@ function setupFileWatcher(nitro, watchDirs) {
51
55
  logger.success("Types regenerated");
52
56
  await generateServerTypes(nitro, { silent: true });
53
57
  await generateClientTypes(nitro, { silent: true });
54
- if (isGraphQLFile) triggerRolldownRebuild(nitro);
58
+ if (changes.graphql) triggerRolldownRebuild(nitro);
55
59
  await nitro.hooks.callHook("dev:reload");
56
- } else {
60
+ } else if (changes.client) {
57
61
  logger.success("Types regenerated");
58
62
  await generateClientTypes(nitro, { silent: true });
59
63
  }
64
+ }
65
+ const debouncedProcess = debounce(processChanges, 150);
66
+ watcher.on("all", (_, path) => {
67
+ if (path.includes("/sdk.ts") || path.includes("/sdk.js") || path.endsWith("/config.ts")) return;
68
+ const isGraphQL = GRAPHQL_EXTENSIONS.some((ext) => path.endsWith(ext));
69
+ const isResolver = RESOLVER_EXTENSIONS.some((ext) => path.endsWith(ext));
70
+ const isDirective = DIRECTIVE_EXTENSIONS.some((ext) => path.endsWith(ext));
71
+ if (!isGraphQL && !isResolver && !isDirective) return;
72
+ if (path.includes(nitro.graphql.serverDir) || path.includes(DIR_SERVER_GRAPHQL) || path.includes(DIR_SERVER_GRAPHQL_WIN) || isResolver || isDirective) {
73
+ pending.server = true;
74
+ if (isGraphQL) pending.graphql = true;
75
+ } else pending.client = true;
76
+ debouncedProcess();
60
77
  });
61
78
  return watcher;
62
79
  }
@@ -158,9 +158,14 @@ async function scanGraphQLFiles(nitro, serverEnabled) {
158
158
  */
159
159
  function setupDevHooks(nitro) {
160
160
  let hasShownInitialLogs = false;
161
+ let lastDevStart = 0;
162
+ const DEBOUNCE_MS = 500;
161
163
  nitro.hooks.hook("dev:start", async () => {
164
+ const now = Date.now();
165
+ if (now - lastDevStart < DEBOUNCE_MS) return;
166
+ lastDevStart = now;
162
167
  await scanAllGraphQLFiles(nitro);
163
- await resolveExtendConfig(nitro);
168
+ await resolveExtendConfig(nitro, { silent: true });
164
169
  if (nitro.options.dev && !hasShownInitialLogs) {
165
170
  hasShownInitialLogs = true;
166
171
  logResolverDiagnostics(nitro);
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "nitro-graphql",
3
3
  "type": "module",
4
- "version": "2.0.0-beta.41",
4
+ "version": "2.0.0-beta.43",
5
5
  "description": "GraphQL integration for Nitro",
6
6
  "license": "MIT",
7
7
  "repository": {
@@ -117,6 +117,7 @@
117
117
  "ohash": "^2.0.11",
118
118
  "oxc-parser": "^0.106.0",
119
119
  "pathe": "^2.0.3",
120
+ "perfect-debounce": "^2.0.0",
120
121
  "tinyglobby": "^0.2.15"
121
122
  },
122
123
  "devDependencies": {