@stonecrop/nuxt-grafserv 0.8.7 → 0.8.8

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/module.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@stonecrop/nuxt-grafserv",
3
3
  "configKey": "grafserv",
4
- "version": "0.8.7",
4
+ "version": "0.8.8",
5
5
  "builder": {
6
6
  "@nuxt/module-builder": "1.0.2",
7
7
  "unbuild": "unknown"
@@ -3,10 +3,17 @@ import type { ModuleOptions } from '../types.js';
3
3
  /**
4
4
  * Get or create the grafserv instance
5
5
  * Exported for use by separate handler files
6
+ *
7
+ * For PostGraphile mode: uses pgl.createServ(grafserv) to preserve the full
8
+ * execution context (withPgClient, pgSettings, plugin middleware, etc.).
9
+ * For schema mode: builds a schema from files/function and wraps with grafserv.
6
10
  */
7
11
  export declare function getGrafservInstance(options: ModuleOptions): Promise<ReturnType<typeof grafserv>>;
8
12
  /**
9
13
  * Clear the cached instances (useful for development hot reload)
14
+ *
15
+ * For PostGraphile mode, only the grafserv reference is cleared — PostGraphile's
16
+ * pgl instance manages its own schema lifecycle and watch mode.
10
17
  */
11
18
  export declare function clearGrafservCache(): Promise<void>;
12
19
  /**
@@ -13,82 +13,81 @@ async function loadTypeDefsFromFiles(schemaPath) {
13
13
  });
14
14
  return sources.map((source) => source.document).filter(Boolean);
15
15
  }
16
- async function getSchema(options) {
16
+ async function getSchemaForSchemaMode(options) {
17
17
  if (cachedSchema) {
18
18
  return cachedSchema;
19
19
  }
20
20
  let schema;
21
+ if (typeof options.schema === "function") {
22
+ console.debug("[@stonecrop/nuxt-grafserv] Using schema provider function");
23
+ schema = await options.schema();
24
+ } else {
25
+ console.debug("[@stonecrop/nuxt-grafserv] Loading schema from file(s)");
26
+ const typeDefDocs = await loadTypeDefsFromFiles(options.schema);
27
+ const objects = {};
28
+ if (options.resolversPath) {
29
+ try {
30
+ const resolverModule = await import("#internal/grafserv/resolvers");
31
+ const resolvers = resolverModule.default || resolverModule;
32
+ console.debug("[@stonecrop/nuxt-grafserv] Resolvers loaded:", Object.keys(resolvers));
33
+ for (const typeName of Object.keys(resolvers)) {
34
+ const typeResolvers = resolvers[typeName];
35
+ if (typeResolvers && typeof typeResolvers === "object" && "plans" in typeResolvers) {
36
+ objects[typeName] = typeResolvers;
37
+ } else {
38
+ objects[typeName] = { plans: typeResolvers };
39
+ }
40
+ }
41
+ } catch (e) {
42
+ console.error("[@stonecrop/nuxt-grafserv] Error loading resolvers:", e);
43
+ throw e;
44
+ }
45
+ } else {
46
+ console.debug("[@stonecrop/nuxt-grafserv] No resolvers specified");
47
+ }
48
+ try {
49
+ schema = makeGrafastSchema({
50
+ typeDefs: typeDefDocs,
51
+ objects
52
+ });
53
+ console.debug("[@stonecrop/nuxt-grafserv] Grafast schema created successfully");
54
+ } catch (error) {
55
+ console.error("[@stonecrop/nuxt-grafserv] Error creating Grafast schema:", error);
56
+ throw error;
57
+ }
58
+ }
59
+ cachedSchema = schema;
60
+ return schema;
61
+ }
62
+ export async function getGrafservInstance(options) {
63
+ if (grafservInstance) {
64
+ console.log("[@stonecrop/nuxt-grafserv] Returning cached grafserv instance");
65
+ return grafservInstance;
66
+ }
21
67
  if (options.type === "postgraphile") {
22
- console.debug("[@stonecrop/nuxt-grafserv] Getting schema from PostGraphile instance");
68
+ console.debug("[@stonecrop/nuxt-grafserv] Creating grafserv via pgl.createServ()");
23
69
  try {
24
70
  const { pgl } = await import("#internal/grafserv/pgl");
25
- console.debug("[@stonecrop/nuxt-grafserv] Calling pgl.getSchema()");
26
- schema = await pgl.getSchema();
27
- console.debug("[@stonecrop/nuxt-grafserv] PostGraphile schema retrieved successfully");
71
+ grafservInstance = pgl.createServ(grafserv);
72
+ console.log("[@stonecrop/nuxt-grafserv] PostGraphile grafserv instance created via pgl.createServ()");
28
73
  } catch (error) {
29
74
  if (error instanceof Error && "code" in error && error.code === "MODULE_NOT_FOUND") {
30
75
  throw new Error(
31
76
  '[@stonecrop/nuxt-grafserv] PostGraphile preset provided but "postgraphile" package not found. Install it with: npm install postgraphile'
32
77
  );
33
78
  }
34
- console.error("[@stonecrop/nuxt-grafserv] Error getting PostGraphile schema:", error);
79
+ console.error("[@stonecrop/nuxt-grafserv] Error creating PostGraphile grafserv instance:", error);
35
80
  throw error;
36
81
  }
37
82
  } else if (options.type === "schema") {
38
- if (typeof options.schema === "function") {
39
- console.debug("[@stonecrop/nuxt-grafserv] Using schema provider function");
40
- schema = await options.schema();
41
- } else {
42
- console.debug("[@stonecrop/nuxt-grafserv] Loading schema from file(s)");
43
- const typeDefDocs = await loadTypeDefsFromFiles(options.schema);
44
- const objects = {};
45
- if (options.resolversPath) {
46
- try {
47
- const resolverModule = await import("#internal/grafserv/resolvers");
48
- const resolvers = resolverModule.default || resolverModule;
49
- console.debug("[@stonecrop/nuxt-grafserv] Resolvers loaded:", Object.keys(resolvers));
50
- for (const typeName of Object.keys(resolvers)) {
51
- const typeResolvers = resolvers[typeName];
52
- if (typeResolvers && typeof typeResolvers === "object" && "plans" in typeResolvers) {
53
- objects[typeName] = typeResolvers;
54
- } else {
55
- objects[typeName] = { plans: typeResolvers };
56
- }
57
- }
58
- } catch (e) {
59
- console.error("[@stonecrop/nuxt-grafserv] Error loading resolvers:", e);
60
- throw e;
61
- }
62
- } else {
63
- console.debug("[@stonecrop/nuxt-grafserv] No resolvers specified");
64
- }
65
- try {
66
- schema = makeGrafastSchema({
67
- typeDefs: typeDefDocs,
68
- objects
69
- });
70
- console.debug("[@stonecrop/nuxt-grafserv] Grafast schema created successfully");
71
- } catch (error) {
72
- console.error("[@stonecrop/nuxt-grafserv] Error creating Grafast schema:", error);
73
- throw error;
74
- }
75
- }
83
+ const schema = await getSchemaForSchemaMode(options);
84
+ grafservInstance = grafserv({ schema });
85
+ console.log("[@stonecrop/nuxt-grafserv] Schema-mode grafserv instance created");
76
86
  } else {
77
87
  throw new Error(
78
88
  `[@stonecrop/nuxt-grafserv] Invalid configuration type: ${options.type}`
79
89
  );
80
90
  }
81
- cachedSchema = schema;
82
- return schema;
83
- }
84
- export async function getGrafservInstance(options) {
85
- if (grafservInstance) {
86
- console.log("[@stonecrop/nuxt-grafserv] Returning cached grafserv instance");
87
- return grafservInstance;
88
- }
89
- const schema = await getSchema(options);
90
- grafservInstance = grafserv({ schema });
91
- console.log("[@stonecrop/nuxt-grafserv] Grafserv instance created");
92
91
  return grafservInstance;
93
92
  }
94
93
  export async function clearGrafservCache() {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stonecrop/nuxt-grafserv",
3
- "version": "0.8.7",
3
+ "version": "0.8.8",
4
4
  "description": "Pluggable Grafserv GraphQL server as Nuxt Module",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -43,7 +43,7 @@
43
43
  "grafast": "^1.0.0-rc.7",
44
44
  "grafserv": "^1.0.0-rc.6",
45
45
  "graphql": "^16.12.0",
46
- "@stonecrop/graphql-middleware": "0.8.7"
46
+ "@stonecrop/graphql-middleware": "0.8.8"
47
47
  },
48
48
  "devDependencies": {
49
49
  "@eslint/js": "^9.39.2",