nitro-graphql 0.0.1 → 0.0.2
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 +14 -14
- package/dist/client-watcher-DpYM5JpN.js +101 -0
- package/dist/client-watcher-DpYM5JpN.js.map +1 -0
- package/dist/client-watcher.d.ts +1 -1
- package/dist/client-watcher.d.ts.map +1 -1
- package/dist/client-watcher.js +4 -91
- package/dist/{codegen-Dbw6gEZt.js → codegen-JCUglvgC.js} +1 -1
- package/dist/{codegen-Dbw6gEZt.js.map → codegen-JCUglvgC.js.map} +1 -1
- package/dist/codegen.d.ts +16 -2
- package/dist/codegen.d.ts.map +1 -0
- package/dist/codegen.js +1 -1
- package/dist/context.d.ts +13 -2
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +0 -1
- package/dist/index.d.ts +1 -5
- package/dist/index.js +158 -323
- package/dist/index.js.map +1 -1
- package/dist/prerender-BWFqvlWv.js +280 -0
- package/dist/prerender-BWFqvlWv.js.map +1 -0
- package/dist/{scanner-BdcKEPQk.js → scanner-DA9Zg-ri.js} +4 -4
- package/dist/scanner-DA9Zg-ri.js.map +1 -0
- package/dist/{types-D_NqyCcy.d.ts → types-BLYuSc3f.d.ts} +3 -2
- package/dist/{types-D_NqyCcy.d.ts.map → types-BLYuSc3f.d.ts.map} +1 -1
- package/dist/utils-C7-cM2zI.js +24 -0
- package/dist/utils-C7-cM2zI.js.map +1 -0
- package/dist/utils.d.ts +16 -3
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +2 -2
- package/package.json +4 -4
- package/dist/client-watcher.js.map +0 -1
- package/dist/codegen-DWJuLowd.d.ts +0 -16
- package/dist/codegen-DWJuLowd.d.ts.map +0 -1
- package/dist/context-BgqNJFCT.d.ts +0 -13
- package/dist/context-BgqNJFCT.d.ts.map +0 -1
- package/dist/context-CZdhkJYD.js +0 -0
- package/dist/scanner-BdcKEPQk.js.map +0 -1
- package/dist/utils-87_22aIA.js +0 -41
- package/dist/utils-87_22aIA.js.map +0 -1
- package/dist/utils-BuYDOLIi.d.ts +0 -22
- package/dist/utils-BuYDOLIi.d.ts.map +0 -1
- package/dist/watcher.d.ts +0 -9
- package/dist/watcher.d.ts.map +0 -1
- package/dist/watcher.js +0 -96
- package/dist/watcher.js.map +0 -1
package/README.md
CHANGED
|
@@ -111,9 +111,9 @@ extend type Mutation {
|
|
|
111
111
|
#### Domain-based Resolver Files
|
|
112
112
|
```ts
|
|
113
113
|
// server/graphql/users/user-queries.ts
|
|
114
|
-
import {
|
|
114
|
+
import { defineResolver } from 'nitro-graphql'
|
|
115
115
|
|
|
116
|
-
export default
|
|
116
|
+
export default defineResolver({
|
|
117
117
|
Query: {
|
|
118
118
|
users: async (_, __, { storage }) => {
|
|
119
119
|
return await storage.getItem('users') || []
|
|
@@ -128,9 +128,9 @@ export default createResolver({
|
|
|
128
128
|
|
|
129
129
|
```ts
|
|
130
130
|
// server/graphql/users/create-user.ts
|
|
131
|
-
import {
|
|
131
|
+
import { defineResolver } from 'nitro-graphql'
|
|
132
132
|
|
|
133
|
-
export default
|
|
133
|
+
export default defineResolver({
|
|
134
134
|
Mutation: {
|
|
135
135
|
createUser: async (_, { input }, { storage }) => {
|
|
136
136
|
const users = await storage.getItem('users') || []
|
|
@@ -153,9 +153,9 @@ The module provides utilities for better developer experience:
|
|
|
153
153
|
|
|
154
154
|
```ts
|
|
155
155
|
// server/graphql/hello.ts
|
|
156
|
-
import {
|
|
156
|
+
import { defineResolver } from 'nitro-graphql'
|
|
157
157
|
|
|
158
|
-
export default
|
|
158
|
+
export default defineResolver({
|
|
159
159
|
Query: {
|
|
160
160
|
hello: () => 'Hello World!',
|
|
161
161
|
greeting: (_, { name }) => `Hello ${name}!`
|
|
@@ -175,9 +175,9 @@ These types are automatically available in your resolvers:
|
|
|
175
175
|
```ts
|
|
176
176
|
import type { QueryResolvers } from '#build/graphql-types.generated'
|
|
177
177
|
// server/graphql/users/user-queries.ts
|
|
178
|
-
import {
|
|
178
|
+
import { defineResolver } from 'nitro-graphql'
|
|
179
179
|
|
|
180
|
-
export default
|
|
180
|
+
export default defineResolver({
|
|
181
181
|
Query: {
|
|
182
182
|
users: async (_, __, { storage }): Promise<User[]> => {
|
|
183
183
|
return await storage.getItem('users') || []
|
|
@@ -222,9 +222,9 @@ The GraphQL context includes:
|
|
|
222
222
|
|
|
223
223
|
```ts
|
|
224
224
|
// Example resolver with full context usage
|
|
225
|
-
import {
|
|
225
|
+
import { defineResolver } from 'nitro-graphql'
|
|
226
226
|
|
|
227
|
-
export default
|
|
227
|
+
export default defineResolver({
|
|
228
228
|
Query: {
|
|
229
229
|
currentUser: async (_, __, { event, request, storage }) => {
|
|
230
230
|
const token = getCookie(event, 'auth-token')
|
|
@@ -380,9 +380,9 @@ export default defineNitroConfig({
|
|
|
380
380
|
import { GraphQLScalarType } from 'graphql'
|
|
381
381
|
import { Kind } from 'graphql/language'
|
|
382
382
|
// server/graphql/scalars/DateTime.ts
|
|
383
|
-
import {
|
|
383
|
+
import { defineResolver } from 'nitro-graphql'
|
|
384
384
|
|
|
385
|
-
export default
|
|
385
|
+
export default defineResolver({
|
|
386
386
|
DateTime: new GraphQLScalarType({
|
|
387
387
|
name: 'DateTime',
|
|
388
388
|
serialize: (value: Date) => value.toISOString(),
|
|
@@ -401,9 +401,9 @@ export default createResolver({
|
|
|
401
401
|
|
|
402
402
|
```ts
|
|
403
403
|
// server/graphql/users/user-queries.ts
|
|
404
|
-
import {
|
|
404
|
+
import { defineResolver } from 'nitro-graphql'
|
|
405
405
|
|
|
406
|
-
export default
|
|
406
|
+
export default defineResolver({
|
|
407
407
|
Query: {
|
|
408
408
|
user: async (_, { id }, { storage }) => {
|
|
409
409
|
try {
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { scanGraphQLFiles } from "./scanner-DA9Zg-ri.js";
|
|
2
|
+
import { debounce } from "./utils-C7-cM2zI.js";
|
|
3
|
+
import { mkdir, writeFile } from "node:fs/promises";
|
|
4
|
+
import { mergeTypeDefs } from "@graphql-tools/merge";
|
|
5
|
+
import { makeExecutableSchema } from "@graphql-tools/schema";
|
|
6
|
+
import { consola } from "consola";
|
|
7
|
+
import { join } from "pathe";
|
|
8
|
+
|
|
9
|
+
//#region src/client-watcher.ts
|
|
10
|
+
const logger = consola.withTag("graphql");
|
|
11
|
+
async function regenerateClientTypes(nitro, options) {
|
|
12
|
+
try {
|
|
13
|
+
if (!options.client?.enabled) return;
|
|
14
|
+
const scanResult = await scanGraphQLFiles(nitro);
|
|
15
|
+
if (scanResult.typeDefs.length === 0) {
|
|
16
|
+
logger.warn("⚠️ No server schema found for client type generation");
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
const mergedTypeDefs = mergeTypeDefs(scanResult.typeDefs);
|
|
20
|
+
const schema = makeExecutableSchema({
|
|
21
|
+
typeDefs: mergedTypeDefs,
|
|
22
|
+
resolvers: {}
|
|
23
|
+
});
|
|
24
|
+
const getClientPatterns = () => {
|
|
25
|
+
if (options.client?.watchPatterns) return options.client.watchPatterns;
|
|
26
|
+
const basePatterns = [
|
|
27
|
+
join(nitro.options.srcDir, "**/*.graphql"),
|
|
28
|
+
join(nitro.options.srcDir, "**/*.gql"),
|
|
29
|
+
`!${join(nitro.options.srcDir, "graphql/**/*")}`
|
|
30
|
+
];
|
|
31
|
+
if (nitro.options.framework?.name === "nuxt") if (options.client?.nuxtPatterns) basePatterns.unshift(...options.client.nuxtPatterns);
|
|
32
|
+
else basePatterns.unshift(join(nitro.options.srcDir, "app/graphql/**/*.graphql"), join(nitro.options.srcDir, "app/graphql/**/*.gql"));
|
|
33
|
+
return basePatterns;
|
|
34
|
+
};
|
|
35
|
+
const clientPatterns = getClientPatterns();
|
|
36
|
+
const { generateClientTypes } = await import("./client-codegen-DM2n5Gt2.js");
|
|
37
|
+
const generatedTypes = await generateClientTypes(schema, clientPatterns, options.client.config, options.client.outputPath);
|
|
38
|
+
if (generatedTypes) {
|
|
39
|
+
const outputPath = options.client.outputPath || join(nitro.options.buildDir, "types", "graphql-client.generated.ts");
|
|
40
|
+
const typesDir = join(nitro.options.buildDir, "types");
|
|
41
|
+
await mkdir(typesDir, { recursive: true });
|
|
42
|
+
await writeFile(outputPath, generatedTypes);
|
|
43
|
+
logger.success("✨ Client types updated");
|
|
44
|
+
}
|
|
45
|
+
} catch (error) {
|
|
46
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
47
|
+
logger.error("❌ Client type generation failed:", errorMessage);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
async function setupClientWatcher(nitro, options) {
|
|
51
|
+
if (!options.client?.enabled) {
|
|
52
|
+
logger.info("🚫 Client type generation disabled");
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
const getClientPatterns = () => {
|
|
56
|
+
if (options.client?.watchPatterns) return options.client.watchPatterns;
|
|
57
|
+
const basePatterns = [join(nitro.options.srcDir, "**/*.graphql"), join(nitro.options.srcDir, "**/*.gql")];
|
|
58
|
+
if (nitro.options.framework?.name === "nuxt") if (options.client?.nuxtPatterns) basePatterns.unshift(...options.client.nuxtPatterns);
|
|
59
|
+
else basePatterns.unshift(join(nitro.options.srcDir, "app/graphql/**/*.graphql"), join(nitro.options.srcDir, "app/graphql/**/*.gql"));
|
|
60
|
+
return basePatterns;
|
|
61
|
+
};
|
|
62
|
+
const clientPatterns = getClientPatterns();
|
|
63
|
+
const generateClientTypesDebounced = debounce(async () => {
|
|
64
|
+
await regenerateClientTypes(nitro, options);
|
|
65
|
+
}, 300);
|
|
66
|
+
const { watch } = await import("chokidar");
|
|
67
|
+
const watcher = watch(clientPatterns, {
|
|
68
|
+
persistent: true,
|
|
69
|
+
ignoreInitial: true,
|
|
70
|
+
ignored: [/(^|[/\\])\.\.\./, join(nitro.options.srcDir, "graphql/**/*")],
|
|
71
|
+
followSymlinks: false,
|
|
72
|
+
usePolling: true,
|
|
73
|
+
interval: 500,
|
|
74
|
+
binaryInterval: 500
|
|
75
|
+
});
|
|
76
|
+
watcher.on("add", (path) => {
|
|
77
|
+
logger.info(`📁 Client file added: ${path}`);
|
|
78
|
+
generateClientTypesDebounced();
|
|
79
|
+
});
|
|
80
|
+
watcher.on("change", (path) => {
|
|
81
|
+
logger.info(`📝 Client file changed: ${path}`);
|
|
82
|
+
generateClientTypesDebounced();
|
|
83
|
+
});
|
|
84
|
+
watcher.on("unlink", (path) => {
|
|
85
|
+
logger.info(`🗑️ Client file removed: ${path}`);
|
|
86
|
+
generateClientTypesDebounced();
|
|
87
|
+
});
|
|
88
|
+
watcher.on("error", (error) => {
|
|
89
|
+
logger.error("❌ Client watcher error:", error);
|
|
90
|
+
});
|
|
91
|
+
nitro.hooks.hook("close", () => {
|
|
92
|
+
logger.info("🔒 Closing client watcher");
|
|
93
|
+
watcher.close();
|
|
94
|
+
});
|
|
95
|
+
await regenerateClientTypes(nitro, options);
|
|
96
|
+
logger.success("✅ Client watcher ready");
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
//#endregion
|
|
100
|
+
export { setupClientWatcher };
|
|
101
|
+
//# sourceMappingURL=client-watcher-DpYM5JpN.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-watcher-DpYM5JpN.js","names":["nitro: Nitro","options: NitroGraphQLOptions"],"sources":["../src/client-watcher.ts"],"sourcesContent":["import type { Nitro } from 'nitropack/types'\nimport type { NitroGraphQLOptions } from './types'\nimport { mkdir, writeFile } from 'node:fs/promises'\nimport { mergeTypeDefs } from '@graphql-tools/merge'\nimport { makeExecutableSchema } from '@graphql-tools/schema'\nimport { consola } from 'consola'\nimport { join } from 'pathe'\nimport { scanGraphQLFiles } from './scanner'\nimport { debounce } from './utils'\n\nconst logger = consola.withTag('graphql')\n\nasync function regenerateClientTypes(nitro: Nitro, options: NitroGraphQLOptions) {\n try {\n if (!options.client?.enabled)\n return\n\n // Regenerating client types silently\n\n // Get the server schema\n const scanResult = await scanGraphQLFiles(nitro)\n if (scanResult.typeDefs.length === 0) {\n logger.warn('⚠️ No server schema found for client type generation')\n return\n }\n\n const mergedTypeDefs = mergeTypeDefs(scanResult.typeDefs)\n const schema = makeExecutableSchema({\n typeDefs: mergedTypeDefs,\n resolvers: {},\n })\n\n // Simple client patterns\n const getClientPatterns = () => {\n if (options.client?.watchPatterns) {\n return options.client.watchPatterns\n }\n\n const basePatterns = [\n join(nitro.options.srcDir, '**/*.graphql'),\n join(nitro.options.srcDir, '**/*.gql'),\n `!${join(nitro.options.srcDir, 'graphql/**/*')}`, // Exclude server files\n ]\n\n // Add Nuxt-specific patterns\n if (nitro.options.framework?.name === 'nuxt') {\n if (options.client?.nuxtPatterns) {\n basePatterns.unshift(...options.client.nuxtPatterns)\n }\n else {\n basePatterns.unshift(\n join(nitro.options.srcDir, 'app/graphql/**/*.graphql'),\n join(nitro.options.srcDir, 'app/graphql/**/*.gql'),\n )\n }\n }\n\n return basePatterns\n }\n\n const clientPatterns = getClientPatterns()\n\n // Generate client types using dynamic import\n const { generateClientTypes } = await import('./client-codegen')\n const generatedTypes = await generateClientTypes(\n schema,\n clientPatterns,\n options.client.config,\n options.client.outputPath,\n )\n\n if (generatedTypes) {\n const outputPath = options.client.outputPath\n || join(nitro.options.buildDir, 'types', 'graphql-client.generated.ts')\n\n const typesDir = join(nitro.options.buildDir, 'types')\n await mkdir(typesDir, { recursive: true })\n await writeFile(outputPath, generatedTypes)\n\n logger.success('✨ Client types updated')\n }\n }\n catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error)\n logger.error('❌ Client type generation failed:', errorMessage)\n }\n}\n\nexport async function setupClientWatcher(nitro: Nitro, options: NitroGraphQLOptions) {\n if (!options.client?.enabled) {\n logger.info('🚫 Client type generation disabled')\n return\n }\n\n // Simple client patterns\n const getClientPatterns = () => {\n if (options.client?.watchPatterns) {\n return options.client.watchPatterns\n }\n\n const basePatterns = [\n join(nitro.options.srcDir, '**/*.graphql'),\n join(nitro.options.srcDir, '**/*.gql'),\n ]\n\n // Add Nuxt-specific patterns\n if (nitro.options.framework?.name === 'nuxt') {\n if (options.client?.nuxtPatterns) {\n basePatterns.unshift(...options.client.nuxtPatterns)\n }\n else {\n basePatterns.unshift(\n join(nitro.options.srcDir, 'app/graphql/**/*.graphql'),\n join(nitro.options.srcDir, 'app/graphql/**/*.gql'),\n )\n }\n }\n\n return basePatterns\n }\n\n const clientPatterns = getClientPatterns()\n\n // Create debounced function\n const generateClientTypesDebounced = debounce(async () => {\n await regenerateClientTypes(nitro, options)\n }, 300)\n\n // Use chokidar directly\n const { watch } = await import('chokidar')\n\n const watcher = watch(clientPatterns, {\n persistent: true,\n ignoreInitial: true,\n ignored: [\n /(^|[/\\\\])\\.\\.\\./, // ignore dotfiles\n join(nitro.options.srcDir, 'graphql/**/*'), // Exclude server files\n ],\n followSymlinks: false,\n usePolling: true,\n interval: 500,\n binaryInterval: 500,\n })\n\n // Simple event handlers\n watcher.on('add', (path) => {\n logger.info(`📁 Client file added: ${path}`)\n generateClientTypesDebounced()\n })\n\n watcher.on('change', (path) => {\n logger.info(`📝 Client file changed: ${path}`)\n generateClientTypesDebounced()\n })\n\n watcher.on('unlink', (path) => {\n logger.info(`🗑️ Client file removed: ${path}`)\n generateClientTypesDebounced()\n })\n\n watcher.on('error', (error) => {\n logger.error('❌ Client watcher error:', error)\n })\n\n // Cleanup\n nitro.hooks.hook('close', () => {\n logger.info('🔒 Closing client watcher')\n watcher.close()\n })\n\n // Generate initial types\n await regenerateClientTypes(nitro, options)\n\n logger.success('✅ Client watcher ready')\n}\n"],"mappings":"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"}
|
package/dist/client-watcher.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client-watcher.d.ts","names":[],"sources":["../src/client-watcher.ts"],"sourcesContent":[],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"client-watcher.d.ts","names":[],"sources":["../src/client-watcher.ts"],"sourcesContent":[],"mappings":";;;;iBAwFsB,kBAAA,QAA0B,gBAAgB,sBAAmB"}
|
package/dist/client-watcher.js
CHANGED
|
@@ -1,92 +1,5 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
4
|
-
import { mergeTypeDefs } from "@graphql-tools/merge";
|
|
5
|
-
import { makeExecutableSchema } from "@graphql-tools/schema";
|
|
6
|
-
import { consola } from "consola";
|
|
7
|
-
import { join } from "pathe";
|
|
1
|
+
import "./scanner-DA9Zg-ri.js";
|
|
2
|
+
import "./utils-C7-cM2zI.js";
|
|
3
|
+
import { setupClientWatcher } from "./client-watcher-DpYM5JpN.js";
|
|
8
4
|
|
|
9
|
-
|
|
10
|
-
const logger = consola.withTag("graphql");
|
|
11
|
-
async function regenerateClientTypes(nitro, options) {
|
|
12
|
-
try {
|
|
13
|
-
if (!options.client?.enabled) return;
|
|
14
|
-
const scanResult = await scanGraphQLFiles(nitro);
|
|
15
|
-
if (scanResult.typeDefs.length === 0) {
|
|
16
|
-
logger.warn("⚠️ No server schema found for client type generation");
|
|
17
|
-
return;
|
|
18
|
-
}
|
|
19
|
-
const mergedTypeDefs = mergeTypeDefs(scanResult.typeDefs);
|
|
20
|
-
const schema = makeExecutableSchema({
|
|
21
|
-
typeDefs: mergedTypeDefs,
|
|
22
|
-
resolvers: {}
|
|
23
|
-
});
|
|
24
|
-
const clientPatterns = options.client.watchPatterns || [
|
|
25
|
-
join(nitro.options.srcDir, "**/*.graphql"),
|
|
26
|
-
join(nitro.options.srcDir, "**/*.gql"),
|
|
27
|
-
`!${join(nitro.options.srcDir, "graphql/**/*")}`
|
|
28
|
-
];
|
|
29
|
-
const { generateClientTypes } = await import("./client-codegen-DM2n5Gt2.js");
|
|
30
|
-
const generatedTypes = await generateClientTypes(schema, clientPatterns, options.client.config, options.client.outputPath);
|
|
31
|
-
if (generatedTypes) {
|
|
32
|
-
const outputPath = options.client.outputPath || join(nitro.options.buildDir, "types", "graphql-client.generated.ts");
|
|
33
|
-
const typesDir = join(nitro.options.buildDir, "types");
|
|
34
|
-
await mkdir(typesDir, { recursive: true });
|
|
35
|
-
await writeFile(outputPath, generatedTypes);
|
|
36
|
-
logger.success("✨ Client types updated");
|
|
37
|
-
}
|
|
38
|
-
} catch (error) {
|
|
39
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
40
|
-
logger.error("❌ Client type generation failed:", errorMessage);
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
async function setupClientWatcher(nitro, options) {
|
|
44
|
-
if (!options.client?.enabled) {
|
|
45
|
-
logger.info("🚫 Client type generation disabled");
|
|
46
|
-
return;
|
|
47
|
-
}
|
|
48
|
-
const clientPatterns = options.client.watchPatterns || [join(nitro.options.srcDir, "**/*.graphql"), join(nitro.options.srcDir, "**/*.gql")];
|
|
49
|
-
const generateClientTypesDebounced = debounce(async () => {
|
|
50
|
-
await regenerateClientTypes(nitro, options);
|
|
51
|
-
}, 300);
|
|
52
|
-
const { watch } = await import("chokidar");
|
|
53
|
-
const { globby } = await import("globby");
|
|
54
|
-
const existingClientFiles = await globby(clientPatterns, {
|
|
55
|
-
absolute: true,
|
|
56
|
-
ignore: [join(nitro.options.srcDir, "graphql/**/*")]
|
|
57
|
-
});
|
|
58
|
-
const watchPatterns = existingClientFiles.length > 0 ? existingClientFiles : clientPatterns;
|
|
59
|
-
const watcher = watch(watchPatterns, {
|
|
60
|
-
persistent: true,
|
|
61
|
-
ignoreInitial: true,
|
|
62
|
-
ignored: /(^|[/\\])\../,
|
|
63
|
-
followSymlinks: false,
|
|
64
|
-
depth: 10,
|
|
65
|
-
usePolling: true,
|
|
66
|
-
interval: 1e3,
|
|
67
|
-
binaryInterval: 1e3
|
|
68
|
-
});
|
|
69
|
-
watcher.on("change", (_path) => {
|
|
70
|
-
generateClientTypesDebounced();
|
|
71
|
-
});
|
|
72
|
-
watcher.on("add", (_path) => {
|
|
73
|
-
generateClientTypesDebounced();
|
|
74
|
-
});
|
|
75
|
-
watcher.on("unlink", (_path) => {
|
|
76
|
-
generateClientTypesDebounced();
|
|
77
|
-
});
|
|
78
|
-
watcher.on("error", (error) => {
|
|
79
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
80
|
-
logger.error("❌ Client watcher error:", errorMessage);
|
|
81
|
-
});
|
|
82
|
-
nitro.hooks.hook("close", () => {
|
|
83
|
-
logger.info("🔒 Closing client watcher");
|
|
84
|
-
watcher.close();
|
|
85
|
-
});
|
|
86
|
-
await generateClientTypesDebounced();
|
|
87
|
-
logger.success("✅ Client watcher ready");
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
//#endregion
|
|
91
|
-
export { setupClientWatcher };
|
|
92
|
-
//# sourceMappingURL=client-watcher.js.map
|
|
5
|
+
export { setupClientWatcher };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codegen-
|
|
1
|
+
{"version":3,"file":"codegen-JCUglvgC.js","names":["_schema: any","_documents: any","_config: any","_info: any","schema: GraphQLSchema","config: CodegenServerConfig","outputPath?: string","defaultConfig: CodegenServerConfig","e: any"],"sources":["../src/codegen.ts"],"sourcesContent":["import type { GraphQLSchema } from 'graphql'\nimport { codegen } from '@graphql-codegen/core'\nimport * as typescriptPlugin from '@graphql-codegen/typescript'\nimport * as typescriptResolversPlugin from '@graphql-codegen/typescript-resolvers'\nimport { printSchemaWithDirectives } from '@graphql-tools/utils'\nimport { defu } from 'defu'\nimport { parse } from 'graphql'\nimport {\n CurrencyResolver,\n DateTimeResolver,\n JSONResolver,\n NonEmptyStringResolver,\n UUIDResolver,\n} from 'graphql-scalars'\n\nexport interface CodegenServerConfig {\n contextType?: string\n scalars?: Record<string, any>\n defaultMapper?: string\n mapperTypeSuffix?: string\n [key: string]: any\n}\n\nfunction pluginContent(_schema: any, _documents: any, _config: any, _info: any) {\n return {\n prepend: [\n '// THIS FILE IS GENERATED, DO NOT EDIT!',\n '/* eslint-disable eslint-comments/no-unlimited-disable */',\n '/* tslint:disable */',\n '/* eslint-disable */',\n '/* prettier-ignore */',\n ],\n content: '',\n }\n}\n\nexport async function generateTypes(\n schema: GraphQLSchema,\n config: CodegenServerConfig = {},\n outputPath?: string,\n) {\n const defaultConfig: CodegenServerConfig = {\n scalars: {\n Boolean: {\n input: 'boolean',\n output: 'boolean',\n },\n DateTime: DateTimeResolver.extensions.codegenScalarType as any,\n DateTimeISO: DateTimeResolver.extensions.codegenScalarType as any,\n UUID: UUIDResolver.extensions.codegenScalarType as any,\n JSON: JSONResolver.extensions.codegenScalarType as any,\n JSONObject: JSONResolver.extensions.codegenScalarType as any,\n NonEmptyString: NonEmptyStringResolver.extensions.codegenScalarType as any,\n Currency: CurrencyResolver.extensions.codegenScalarType as any,\n File: {\n input: 'File',\n output: 'File',\n },\n Cursor: {\n input: 'number',\n output: 'number',\n },\n },\n defaultScalarType: 'unknown',\n defaultMapper: `ResolverReturnType<{T}>`,\n contextType: './context#GraphQLContext',\n maybeValue: 'T | null | undefined',\n inputMaybeValue: 'T | undefined',\n enumsAsTypes: true,\n useTypeImports: true,\n strictScalars: true,\n emitLegacyCommonJSImports: false,\n }\n\n const mergedConfig = defu(config, defaultConfig)\n\n const output = await codegen({\n filename: outputPath || 'types.generated.ts',\n schema: parse(printSchemaWithDirectives(schema)),\n documents: [],\n config: mergedConfig,\n plugins: [\n { imports: {} },\n { pluginContent: {} },\n { typescript: {} },\n { typescriptResolvers: {} },\n ],\n pluginMap: {\n pluginContent: {\n plugin: pluginContent,\n },\n imports: {\n plugin: () => ({\n prepend: [\n `type Primitive =\n | null\n | undefined\n | string\n | number\n | boolean\n | symbol\n | bigint;\n\ntype BuiltIns = Primitive | void | Date | RegExp;\n\ntype ResolverReturnType<T> = T extends BuiltIns\n ? T\n : T extends (...args: any[]) => unknown\n ? T | undefined\n : T extends object\n ? T extends Array<infer ItemType> // Test for arrays/tuples, per https://github.com/microsoft/TypeScript/issues/35156\n ? ItemType[] extends T // Test for arrays (non-tuples) specifically\n ? Array<ResolverReturnType<ItemType>>\n : ResolverReturnTypeObject<T> // Tuples behave properly\n : ResolverReturnTypeObject<T>\n : unknown;\n\ntype ResolverReturnTypeObject<T extends object> = {\n [K in keyof T]: ResolverReturnType<T[K]>\n};`,\n '',\n ],\n content: '',\n }),\n },\n typescript: typescriptPlugin,\n typescriptResolvers: typescriptResolversPlugin,\n },\n }).catch((e: any) => {\n console.warn('[nitro-graphql] Code generation error:', e)\n return ''\n })\n\n return output\n}\n"],"mappings":";;;;;;;;;AAuBA,SAAS,cAAcA,SAAcC,YAAiBC,SAAcC,OAAY;AAC9E,QAAO;EACL,SAAS;GACP;GACA;GACA;GACA;GACA;EACD;EACD,SAAS;CACV;AACF;AAED,eAAsB,cACpBC,QACAC,SAA8B,CAAE,GAChCC,YACA;CACA,MAAMC,gBAAqC;EACzC,SAAS;GACP,SAAS;IACP,OAAO;IACP,QAAQ;GACT;GACD,UAAU,iBAAiB,WAAW;GACtC,aAAa,iBAAiB,WAAW;GACzC,MAAM,aAAa,WAAW;GAC9B,MAAM,aAAa,WAAW;GAC9B,YAAY,aAAa,WAAW;GACpC,gBAAgB,uBAAuB,WAAW;GAClD,UAAU,iBAAiB,WAAW;GACtC,MAAM;IACJ,OAAO;IACP,QAAQ;GACT;GACD,QAAQ;IACN,OAAO;IACP,QAAQ;GACT;EACF;EACD,mBAAmB;EACnB,eAAe,CAAC,uBAAuB,CAAC;EACxC,aAAa;EACb,YAAY;EACZ,iBAAiB;EACjB,cAAc;EACd,gBAAgB;EAChB,eAAe;EACf,2BAA2B;CAC5B;CAED,MAAM,eAAe,KAAK,QAAQ,cAAc;CAEhD,MAAM,SAAS,MAAM,QAAQ;EAC3B,UAAU,cAAc;EACxB,QAAQ,MAAM,0BAA0B,OAAO,CAAC;EAChD,WAAW,CAAE;EACb,QAAQ;EACR,SAAS;GACP,EAAE,SAAS,CAAE,EAAE;GACf,EAAE,eAAe,CAAE,EAAE;GACrB,EAAE,YAAY,CAAE,EAAE;GAClB,EAAE,qBAAqB,CAAE,EAAE;EAC5B;EACD,WAAW;GACT,eAAe,EACb,QAAQ,cACT;GACD,SAAS,EACP,QAAQ,OAAO;IACb,SAAS,CACP,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;EAyBX,CAAC,EACS,EACD;IACD,SAAS;GACV,GACF;GACD,YAAY;GACZ,qBAAqB;EACtB;CACF,EAAC,CAAC,MAAM,CAACC,MAAW;AACnB,UAAQ,KAAK,0CAA0C,EAAE;AACzD,SAAO;CACR,EAAC;AAEF,QAAO;AACR"}
|
package/dist/codegen.d.ts
CHANGED
|
@@ -1,2 +1,16 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import { GraphQLSchema } from "graphql";
|
|
2
|
+
|
|
3
|
+
//#region src/codegen.d.ts
|
|
4
|
+
interface CodegenServerConfig {
|
|
5
|
+
contextType?: string;
|
|
6
|
+
scalars?: Record<string, any>;
|
|
7
|
+
defaultMapper?: string;
|
|
8
|
+
mapperTypeSuffix?: string;
|
|
9
|
+
[key: string]: any;
|
|
10
|
+
}
|
|
11
|
+
declare function generateTypes(schema: GraphQLSchema, config?: CodegenServerConfig, outputPath?: string): Promise<string>;
|
|
12
|
+
//# sourceMappingURL=codegen.d.ts.map
|
|
13
|
+
|
|
14
|
+
//#endregion
|
|
15
|
+
export { CodegenServerConfig, generateTypes };
|
|
16
|
+
//# sourceMappingURL=codegen.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codegen.d.ts","names":[],"sources":["../src/codegen.ts"],"sourcesContent":[],"mappings":";;;UAeiB,mBAAA;;EAAA,OAAA,CAAA,EAEL,MAFK,CAAA,MAAmB,EAAA,GAAA,CAAA;EAqBd,aAAA,CAAA,EAAa,MAAA;EAAA,gBAAA,CAAA,EAAA,MAAA;EAAA,CAAA,GACzB,EAAA,MAAA,CAAA,EAAA,GAAA;;AAEW,iBAHC,aAAA,CAGD,MAAA,EAFX,aAEW,EAAA,MAAA,CAAA,EADX,mBACW,EAAA,UAAA,CAAA,EAAA,MAAA,CAAA,EAAA,OAAA,CAAA,MAAA,CAAA;AAAA"}
|
package/dist/codegen.js
CHANGED
package/dist/context.d.ts
CHANGED
|
@@ -1,2 +1,13 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import { YogaInitialContext } from "graphql-yoga";
|
|
2
|
+
import { H3Event } from "h3";
|
|
3
|
+
|
|
4
|
+
//#region src/context.d.ts
|
|
5
|
+
interface GraphQLContext extends YogaInitialContext {
|
|
6
|
+
event: H3Event;
|
|
7
|
+
storage: any;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=context.d.ts.map
|
|
10
|
+
|
|
11
|
+
//#endregion
|
|
12
|
+
export { GraphQLContext };
|
|
13
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","names":[],"sources":["../src/context.ts"],"sourcesContent":[],"mappings":";;;;UAGiB,cAAA,SAAuB;SAC/B;EADQ,OAAA,EAAA,GAAA"}
|
package/dist/context.js
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import "./context-CZdhkJYD.js";
|
package/dist/index.d.ts
CHANGED
|
@@ -1,11 +1,7 @@
|
|
|
1
|
-
import { CodegenClientConfig, GraphQLSchemaConfig, NitroGraphQLOptions, Resolvers } from "./types-D_NqyCcy.js";
|
|
2
|
-
import { CodegenServerConfig, generateTypes } from "./codegen-DWJuLowd.js";
|
|
3
|
-
import { GraphQLContext } from "./context-BgqNJFCT.js";
|
|
4
|
-
import { createResolver, defineGraphQLResolver, defineYogaConfig } from "./utils-BuYDOLIi.js";
|
|
5
1
|
import * as nitropack0 from "nitropack";
|
|
6
2
|
|
|
7
3
|
//#region src/index.d.ts
|
|
8
4
|
declare const _default: nitropack0.NitroModule;
|
|
9
5
|
//#endregion
|
|
10
|
-
export {
|
|
6
|
+
export { _default as default };
|
|
11
7
|
//# sourceMappingURL=index.d.ts.map
|