@forinda/kickjs-graphql 0.6.0 → 1.1.1

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/index.d.ts CHANGED
@@ -9,6 +9,11 @@ interface GraphQLAdapterOptions {
9
9
  resolvers: any[];
10
10
  /** Custom GraphQL schema string (merged with auto-generated schema) */
11
11
  typeDefs?: string;
12
+ /**
13
+ * The graphql module — pass `import * as graphql from 'graphql'` or `require('graphql')`.
14
+ * Required because the adapter can't resolve the graphql package from its own node_modules.
15
+ */
16
+ graphql: any;
12
17
  }
13
18
  /**
14
19
  * GraphQL adapter for KickJS.
package/dist/index.js CHANGED
@@ -1,14 +1,9 @@
1
1
  var __defProp = Object.defineProperty;
2
2
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
- var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
4
- get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
5
- }) : x)(function(x) {
6
- if (typeof require !== "undefined") return require.apply(this, arguments);
7
- throw Error('Dynamic require of "' + x + '" is not supported');
8
- });
9
3
 
10
4
  // src/graphql.adapter.ts
11
5
  import { Logger } from "@forinda/kickjs-core";
6
+ import express from "express";
12
7
 
13
8
  // src/decorators.ts
14
9
  import "reflect-metadata";
@@ -98,61 +93,62 @@ var GraphQLAdapter = class {
98
93
  for (const ResolverClass of this.options.resolvers) {
99
94
  container.register(ResolverClass, ResolverClass);
100
95
  }
101
- try {
102
- const graphql = __require("graphql");
103
- const { schema, rootValue } = this.buildSchema(graphql, container);
104
- app.post(this.options.path, async (req, res) => {
105
- const { query, variables, operationName } = req.body ?? {};
106
- if (!query) {
107
- res.status(400).json({
108
- errors: [
109
- {
110
- message: "Query is required"
111
- }
112
- ]
113
- });
114
- return;
115
- }
116
- try {
117
- const result = await graphql.graphql({
118
- schema,
119
- source: query,
120
- rootValue,
121
- variableValues: variables,
122
- operationName,
123
- contextValue: {
124
- req,
125
- res,
126
- container
96
+ const graphqlLib = this.options.graphql;
97
+ if (!graphqlLib?.buildSchema) {
98
+ log.warn('graphql module not provided. Pass { graphql: require("graphql") } to GraphQLAdapter.');
99
+ return;
100
+ }
101
+ const { schema, rootValue } = this.buildSchema(graphqlLib, container);
102
+ log.info(`GraphQL endpoint: ${this.options.path}`);
103
+ if (this.options.playground) {
104
+ log.info(`GraphQL Playground: ${this.options.path} (GET)`);
105
+ }
106
+ const jsonParser = express.json();
107
+ app.post(this.options.path, jsonParser, async (req, res) => {
108
+ const { query, variables, operationName } = req.body ?? {};
109
+ if (!query) {
110
+ res.status(400).json({
111
+ errors: [
112
+ {
113
+ message: "Query is required"
114
+ }
115
+ ]
116
+ });
117
+ return;
118
+ }
119
+ try {
120
+ const result = await graphqlLib.graphql({
121
+ schema,
122
+ source: query,
123
+ rootValue,
124
+ variableValues: variables,
125
+ operationName,
126
+ contextValue: {
127
+ req,
128
+ res,
129
+ container
130
+ }
131
+ });
132
+ res.json(result);
133
+ } catch (err) {
134
+ res.status(500).json({
135
+ errors: [
136
+ {
137
+ message: err.message
127
138
  }
128
- });
129
- res.json(result);
130
- } catch (err) {
131
- res.status(500).json({
132
- errors: [
133
- {
134
- message: err.message
135
- }
136
- ]
137
- });
138
- }
139
- });
140
- app.get(this.options.path, (req, res) => {
141
- if (this.options.playground) {
142
- res.type("html").send(this.renderPlayground());
143
- } else {
144
- res.status(404).json({
145
- message: "GraphQL Playground disabled"
146
- });
147
- }
148
- });
149
- log.info(`GraphQL endpoint: ${this.options.path}`);
139
+ ]
140
+ });
141
+ }
142
+ });
143
+ app.get(this.options.path, (_req, res) => {
150
144
  if (this.options.playground) {
151
- log.info(`GraphQL Playground: ${this.options.path} (GET)`);
145
+ res.type("html").send(this.renderPlayground());
146
+ } else {
147
+ res.status(404).json({
148
+ message: "GraphQL Playground disabled"
149
+ });
152
150
  }
153
- } catch {
154
- log.warn("graphql package not found. Install it: pnpm add graphql");
155
- }
151
+ });
156
152
  }
157
153
  buildSchema(graphql, container) {
158
154
  const queryFields = [];
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/graphql.adapter.ts","../src/decorators.ts"],"sourcesContent":["import { Logger, type AppAdapter, type Container } from '@forinda/kickjs-core'\nimport type { Request, Response } from 'express'\nimport {\n RESOLVER_META,\n QUERY_META,\n MUTATION_META,\n ARG_META,\n type ResolverMeta,\n type FieldMeta,\n type ArgMeta,\n} from './decorators'\n\nconst log = Logger.for('GraphQLAdapter')\n\nexport interface GraphQLAdapterOptions {\n /** URL path for the GraphQL endpoint (default: '/graphql') */\n path?: string\n /** Enable GraphQL Playground/GraphiQL UI (default: true in dev) */\n playground?: boolean\n /** Resolver classes decorated with @Resolver */\n resolvers: any[]\n /** Custom GraphQL schema string (merged with auto-generated schema) */\n typeDefs?: string\n}\n\n/**\n * GraphQL adapter for KickJS.\n *\n * Scans `@Resolver` classes for `@Query` and `@Mutation` methods,\n * builds a GraphQL schema, and mounts a `/graphql` endpoint.\n *\n * @example\n * ```ts\n * import { GraphQLAdapter } from '@forinda/kickjs-graphql'\n *\n * bootstrap({\n * modules,\n * adapters: [\n * new GraphQLAdapter({\n * resolvers: [UserResolver, PostResolver],\n * }),\n * ],\n * })\n * ```\n */\nexport class GraphQLAdapter implements AppAdapter {\n name = 'GraphQLAdapter'\n private options: GraphQLAdapterOptions\n private container: Container | null = null\n\n constructor(options: GraphQLAdapterOptions) {\n this.options = {\n path: options.path ?? '/graphql',\n playground: options.playground ?? process.env.NODE_ENV !== 'production',\n ...options,\n }\n }\n\n beforeMount(app: any, container: Container): void {\n this.container = container\n\n // Register resolver classes in DI\n for (const ResolverClass of this.options.resolvers) {\n container.register(ResolverClass, ResolverClass)\n }\n\n try {\n const graphql = require('graphql')\n\n // Build schema from decorators\n const { schema, rootValue } = this.buildSchema(graphql, container)\n\n // Mount GraphQL endpoint\n app.post(this.options.path, async (req: Request, res: Response) => {\n const { query, variables, operationName } = req.body ?? {}\n if (!query) {\n res.status(400).json({ errors: [{ message: 'Query is required' }] })\n return\n }\n\n try {\n const result = await graphql.graphql({\n schema,\n source: query,\n rootValue,\n variableValues: variables,\n operationName,\n contextValue: { req, res, container },\n })\n res.json(result)\n } catch (err: any) {\n res.status(500).json({ errors: [{ message: err.message }] })\n }\n })\n\n // GET for playground/introspection\n app.get(this.options.path, (req: Request, res: Response) => {\n if (this.options.playground) {\n res.type('html').send(this.renderPlayground())\n } else {\n res.status(404).json({ message: 'GraphQL Playground disabled' })\n }\n })\n\n log.info(`GraphQL endpoint: ${this.options.path}`)\n if (this.options.playground) {\n log.info(`GraphQL Playground: ${this.options.path} (GET)`)\n }\n } catch {\n log.warn('graphql package not found. Install it: pnpm add graphql')\n }\n }\n\n private buildSchema(graphql: any, container: Container) {\n const queryFields: string[] = []\n const mutationFields: string[] = []\n const rootValue: Record<string, any> = {}\n\n for (const ResolverClass of this.options.resolvers) {\n const meta: ResolverMeta = Reflect.getMetadata(RESOLVER_META, ResolverClass)\n if (!meta) continue\n\n const queries: FieldMeta[] = Reflect.getMetadata(QUERY_META, ResolverClass) ?? []\n const mutations: FieldMeta[] = Reflect.getMetadata(MUTATION_META, ResolverClass) ?? []\n\n for (const q of queries) {\n const args = this.buildArgString(ResolverClass, q.handlerName)\n const returnType = q.returnType ?? 'String'\n queryFields.push(` ${q.name}${args}: ${returnType}`)\n\n rootValue[q.name] = async (argsObj: any, context: any) => {\n const instance = container.resolve(ResolverClass)\n const argMeta: ArgMeta[] =\n Reflect.getMetadata(ARG_META, ResolverClass, q.handlerName) ?? []\n const params = argMeta\n .sort((a, b) => a.paramIndex - b.paramIndex)\n .map((a) => argsObj[a.name])\n\n if (params.length === 0) {\n return instance[q.handlerName](argsObj, context)\n }\n return instance[q.handlerName](...params, context)\n }\n }\n\n for (const m of mutations) {\n const args = this.buildArgString(ResolverClass, m.handlerName)\n const returnType = m.returnType ?? 'String'\n mutationFields.push(` ${m.name}${args}: ${returnType}`)\n\n rootValue[m.name] = async (argsObj: any, context: any) => {\n const instance = container.resolve(ResolverClass)\n const argMeta: ArgMeta[] =\n Reflect.getMetadata(ARG_META, ResolverClass, m.handlerName) ?? []\n const params = argMeta\n .sort((a, b) => a.paramIndex - b.paramIndex)\n .map((a) => argsObj[a.name])\n\n if (params.length === 0) {\n return instance[m.handlerName](argsObj, context)\n }\n return instance[m.handlerName](...params, context)\n }\n }\n }\n\n let typeDefs = ''\n if (queryFields.length > 0) {\n typeDefs += `type Query {\\n${queryFields.join('\\n')}\\n}\\n\\n`\n }\n if (mutationFields.length > 0) {\n typeDefs += `type Mutation {\\n${mutationFields.join('\\n')}\\n}\\n\\n`\n }\n\n // Merge custom typeDefs\n if (this.options.typeDefs) {\n typeDefs = this.options.typeDefs + '\\n\\n' + typeDefs\n }\n\n if (!typeDefs.trim()) {\n typeDefs = 'type Query { _empty: String }'\n }\n\n const schema = graphql.buildSchema(typeDefs)\n return { schema, rootValue }\n }\n\n private buildArgString(ResolverClass: any, handlerName: string): string {\n const argMeta: ArgMeta[] = Reflect.getMetadata(ARG_META, ResolverClass, handlerName) ?? []\n if (argMeta.length === 0) return ''\n\n const args = argMeta\n .sort((a, b) => a.paramIndex - b.paramIndex)\n .map((a) => `${a.name}: ${a.type ?? 'String'}`)\n .join(', ')\n\n return `(${args})`\n }\n\n private renderPlayground(): string {\n return `<!DOCTYPE html>\n<html>\n<head>\n <title>GraphQL Playground</title>\n <link rel=\"stylesheet\" href=\"https://unpkg.com/graphiql@3/graphiql.min.css\" />\n</head>\n<body style=\"margin:0;height:100vh;\">\n <div id=\"graphiql\" style=\"height:100vh;\"></div>\n <script crossorigin src=\"https://unpkg.com/react@18/umd/react.production.min.js\"></script>\n <script crossorigin src=\"https://unpkg.com/react-dom@18/umd/react-dom.production.min.js\"></script>\n <script crossorigin src=\"https://unpkg.com/graphiql@3/graphiql.min.js\"></script>\n <script>\n const fetcher = GraphiQL.createFetcher({ url: window.location.href });\n ReactDOM.createRoot(document.getElementById('graphiql')).render(\n React.createElement(GraphiQL, { fetcher })\n );\n </script>\n</body>\n</html>`\n }\n}\n","import 'reflect-metadata'\n\nconst RESOLVER_META = Symbol('gql:resolver')\nconst QUERY_META = Symbol('gql:query')\nconst MUTATION_META = Symbol('gql:mutation')\nconst SUBSCRIPTION_META = Symbol('gql:subscription')\nconst FIELD_META = Symbol('gql:field')\nconst ARG_META = Symbol('gql:arg')\n\nexport interface ResolverMeta {\n typeName?: string\n}\n\nexport interface FieldMeta {\n name: string\n handlerName: string\n returnType?: string\n description?: string\n}\n\nexport interface ArgMeta {\n paramIndex: number\n name: string\n type?: string\n}\n\n/**\n * Mark a class as a GraphQL resolver.\n * Optionally bind to a specific type (e.g., `@Resolver('User')`).\n */\nexport function Resolver(typeName?: string): ClassDecorator {\n return (target: any) => {\n Reflect.defineMetadata(\n RESOLVER_META,\n { typeName: typeName ?? target.name.replace('Resolver', '') },\n target,\n )\n }\n}\n\n/** Define a Query field */\nexport function Query(\n name?: string,\n options?: { description?: string; returnType?: string },\n): MethodDecorator {\n return (target, propertyKey) => {\n const existing: FieldMeta[] = Reflect.getMetadata(QUERY_META, target.constructor) ?? []\n existing.push({\n name: name ?? (propertyKey as string),\n handlerName: propertyKey as string,\n returnType: options?.returnType,\n description: options?.description,\n })\n Reflect.defineMetadata(QUERY_META, existing, target.constructor)\n }\n}\n\n/** Define a Mutation field */\nexport function Mutation(\n name?: string,\n options?: { description?: string; returnType?: string },\n): MethodDecorator {\n return (target, propertyKey) => {\n const existing: FieldMeta[] = Reflect.getMetadata(MUTATION_META, target.constructor) ?? []\n existing.push({\n name: name ?? (propertyKey as string),\n handlerName: propertyKey as string,\n returnType: options?.returnType,\n description: options?.description,\n })\n Reflect.defineMetadata(MUTATION_META, existing, target.constructor)\n }\n}\n\n/** Define a Subscription field */\nexport function Subscription(name?: string, options?: { description?: string }): MethodDecorator {\n return (target, propertyKey) => {\n const existing: FieldMeta[] = Reflect.getMetadata(SUBSCRIPTION_META, target.constructor) ?? []\n existing.push({\n name: name ?? (propertyKey as string),\n handlerName: propertyKey as string,\n description: options?.description,\n })\n Reflect.defineMetadata(SUBSCRIPTION_META, existing, target.constructor)\n }\n}\n\n/** Mark a method parameter as a GraphQL argument */\nexport function Arg(name: string, type?: string): ParameterDecorator {\n return (target, propertyKey, paramIndex) => {\n const key = propertyKey as string\n const existing: ArgMeta[] = Reflect.getMetadata(ARG_META, target.constructor, key) ?? []\n existing.push({ paramIndex, name, type })\n Reflect.defineMetadata(ARG_META, existing, target.constructor, key)\n }\n}\n\n// Re-export metadata keys for the adapter\nexport { RESOLVER_META, QUERY_META, MUTATION_META, SUBSCRIPTION_META, FIELD_META, ARG_META }\n"],"mappings":"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","names":["Logger","RESOLVER_META","Symbol","QUERY_META","MUTATION_META","SUBSCRIPTION_META","ARG_META","Symbol","Resolver","typeName","target","Reflect","defineMetadata","RESOLVER_META","name","replace","Query","options","propertyKey","existing","getMetadata","QUERY_META","push","handlerName","returnType","description","Mutation","MUTATION_META","Subscription","SUBSCRIPTION_META","Arg","type","paramIndex","key","log","Logger","for","GraphQLAdapter","name","options","container","path","playground","process","env","NODE_ENV","beforeMount","app","ResolverClass","resolvers","register","graphql","require","schema","rootValue","buildSchema","post","req","res","query","variables","operationName","body","status","json","errors","message","result","source","variableValues","contextValue","err","get","type","send","renderPlayground","info","warn","queryFields","mutationFields","meta","Reflect","getMetadata","RESOLVER_META","queries","QUERY_META","mutations","MUTATION_META","q","args","buildArgString","handlerName","returnType","push","argsObj","context","instance","resolve","argMeta","ARG_META","params","sort","a","b","paramIndex","map","length","m","typeDefs","join","trim"]}
1
+ {"version":3,"sources":["../src/graphql.adapter.ts","../src/decorators.ts"],"sourcesContent":["import { Logger, type AppAdapter, type Container } from '@forinda/kickjs-core'\nimport type { Request, Response } from 'express'\nimport express from 'express'\nimport {\n RESOLVER_META,\n QUERY_META,\n MUTATION_META,\n ARG_META,\n type ResolverMeta,\n type FieldMeta,\n type ArgMeta,\n} from './decorators'\n\nconst log = Logger.for('GraphQLAdapter')\n\nexport interface GraphQLAdapterOptions {\n /** URL path for the GraphQL endpoint (default: '/graphql') */\n path?: string\n /** Enable GraphQL Playground/GraphiQL UI (default: true in dev) */\n playground?: boolean\n /** Resolver classes decorated with @Resolver */\n resolvers: any[]\n /** Custom GraphQL schema string (merged with auto-generated schema) */\n typeDefs?: string\n /**\n * The graphql module — pass `import * as graphql from 'graphql'` or `require('graphql')`.\n * Required because the adapter can't resolve the graphql package from its own node_modules.\n */\n graphql: any\n}\n\n/**\n * GraphQL adapter for KickJS.\n *\n * Scans `@Resolver` classes for `@Query` and `@Mutation` methods,\n * builds a GraphQL schema, and mounts a `/graphql` endpoint.\n *\n * @example\n * ```ts\n * import { GraphQLAdapter } from '@forinda/kickjs-graphql'\n *\n * bootstrap({\n * modules,\n * adapters: [\n * new GraphQLAdapter({\n * resolvers: [UserResolver, PostResolver],\n * }),\n * ],\n * })\n * ```\n */\nexport class GraphQLAdapter implements AppAdapter {\n name = 'GraphQLAdapter'\n private options: GraphQLAdapterOptions\n private container: Container | null = null\n\n constructor(options: GraphQLAdapterOptions) {\n this.options = {\n path: options.path ?? '/graphql',\n playground: options.playground ?? process.env.NODE_ENV !== 'production',\n ...options,\n }\n }\n\n beforeMount(app: any, container: Container): void {\n this.container = container\n\n // Register resolver classes in DI\n for (const ResolverClass of this.options.resolvers) {\n container.register(ResolverClass, ResolverClass)\n }\n\n const graphqlLib = this.options.graphql\n if (!graphqlLib?.buildSchema) {\n log.warn(\n 'graphql module not provided. Pass { graphql: require(\"graphql\") } to GraphQLAdapter.',\n )\n return\n }\n\n const { schema, rootValue } = this.buildSchema(graphqlLib, container)\n log.info(`GraphQL endpoint: ${this.options.path}`)\n if (this.options.playground) {\n log.info(`GraphQL Playground: ${this.options.path} (GET)`)\n }\n\n const jsonParser = express.json()\n\n app.post(this.options.path, jsonParser, async (req: Request, res: Response) => {\n const { query, variables, operationName } = req.body ?? {}\n if (!query) {\n res.status(400).json({ errors: [{ message: 'Query is required' }] })\n return\n }\n\n try {\n const result = await graphqlLib.graphql({\n schema,\n source: query,\n rootValue,\n variableValues: variables,\n operationName,\n contextValue: { req, res, container },\n })\n res.json(result)\n } catch (err: any) {\n res.status(500).json({ errors: [{ message: err.message }] })\n }\n })\n\n // GET for playground/introspection\n app.get(this.options.path, (_req: Request, res: Response) => {\n if (this.options.playground) {\n res.type('html').send(this.renderPlayground())\n } else {\n res.status(404).json({ message: 'GraphQL Playground disabled' })\n }\n })\n }\n\n private buildSchema(graphql: any, container: Container) {\n const queryFields: string[] = []\n const mutationFields: string[] = []\n const rootValue: Record<string, any> = {}\n\n for (const ResolverClass of this.options.resolvers) {\n const meta: ResolverMeta = Reflect.getMetadata(RESOLVER_META, ResolverClass)\n if (!meta) continue\n\n const queries: FieldMeta[] = Reflect.getMetadata(QUERY_META, ResolverClass) ?? []\n const mutations: FieldMeta[] = Reflect.getMetadata(MUTATION_META, ResolverClass) ?? []\n\n for (const q of queries) {\n const args = this.buildArgString(ResolverClass, q.handlerName)\n const returnType = q.returnType ?? 'String'\n queryFields.push(` ${q.name}${args}: ${returnType}`)\n\n rootValue[q.name] = async (argsObj: any, context: any) => {\n const instance = container.resolve(ResolverClass)\n const argMeta: ArgMeta[] =\n Reflect.getMetadata(ARG_META, ResolverClass, q.handlerName) ?? []\n const params = argMeta\n .sort((a, b) => a.paramIndex - b.paramIndex)\n .map((a) => argsObj[a.name])\n\n if (params.length === 0) {\n return instance[q.handlerName](argsObj, context)\n }\n return instance[q.handlerName](...params, context)\n }\n }\n\n for (const m of mutations) {\n const args = this.buildArgString(ResolverClass, m.handlerName)\n const returnType = m.returnType ?? 'String'\n mutationFields.push(` ${m.name}${args}: ${returnType}`)\n\n rootValue[m.name] = async (argsObj: any, context: any) => {\n const instance = container.resolve(ResolverClass)\n const argMeta: ArgMeta[] =\n Reflect.getMetadata(ARG_META, ResolverClass, m.handlerName) ?? []\n const params = argMeta\n .sort((a, b) => a.paramIndex - b.paramIndex)\n .map((a) => argsObj[a.name])\n\n if (params.length === 0) {\n return instance[m.handlerName](argsObj, context)\n }\n return instance[m.handlerName](...params, context)\n }\n }\n }\n\n let typeDefs = ''\n if (queryFields.length > 0) {\n typeDefs += `type Query {\\n${queryFields.join('\\n')}\\n}\\n\\n`\n }\n if (mutationFields.length > 0) {\n typeDefs += `type Mutation {\\n${mutationFields.join('\\n')}\\n}\\n\\n`\n }\n\n // Merge custom typeDefs\n if (this.options.typeDefs) {\n typeDefs = this.options.typeDefs + '\\n\\n' + typeDefs\n }\n\n if (!typeDefs.trim()) {\n typeDefs = 'type Query { _empty: String }'\n }\n\n const schema = graphql.buildSchema(typeDefs)\n return { schema, rootValue }\n }\n\n private buildArgString(ResolverClass: any, handlerName: string): string {\n const argMeta: ArgMeta[] = Reflect.getMetadata(ARG_META, ResolverClass, handlerName) ?? []\n if (argMeta.length === 0) return ''\n\n const args = argMeta\n .sort((a, b) => a.paramIndex - b.paramIndex)\n .map((a) => `${a.name}: ${a.type ?? 'String'}`)\n .join(', ')\n\n return `(${args})`\n }\n\n private renderPlayground(): string {\n return `<!DOCTYPE html>\n<html>\n<head>\n <title>GraphQL Playground</title>\n <link rel=\"stylesheet\" href=\"https://unpkg.com/graphiql@3/graphiql.min.css\" />\n</head>\n<body style=\"margin:0;height:100vh;\">\n <div id=\"graphiql\" style=\"height:100vh;\"></div>\n <script crossorigin src=\"https://unpkg.com/react@18/umd/react.production.min.js\"></script>\n <script crossorigin src=\"https://unpkg.com/react-dom@18/umd/react-dom.production.min.js\"></script>\n <script crossorigin src=\"https://unpkg.com/graphiql@3/graphiql.min.js\"></script>\n <script>\n const fetcher = GraphiQL.createFetcher({ url: window.location.href });\n ReactDOM.createRoot(document.getElementById('graphiql')).render(\n React.createElement(GraphiQL, { fetcher })\n );\n </script>\n</body>\n</html>`\n }\n}\n","import 'reflect-metadata'\n\nconst RESOLVER_META = Symbol('gql:resolver')\nconst QUERY_META = Symbol('gql:query')\nconst MUTATION_META = Symbol('gql:mutation')\nconst SUBSCRIPTION_META = Symbol('gql:subscription')\nconst FIELD_META = Symbol('gql:field')\nconst ARG_META = Symbol('gql:arg')\n\nexport interface ResolverMeta {\n typeName?: string\n}\n\nexport interface FieldMeta {\n name: string\n handlerName: string\n returnType?: string\n description?: string\n}\n\nexport interface ArgMeta {\n paramIndex: number\n name: string\n type?: string\n}\n\n/**\n * Mark a class as a GraphQL resolver.\n * Optionally bind to a specific type (e.g., `@Resolver('User')`).\n */\nexport function Resolver(typeName?: string): ClassDecorator {\n return (target: any) => {\n Reflect.defineMetadata(\n RESOLVER_META,\n { typeName: typeName ?? target.name.replace('Resolver', '') },\n target,\n )\n }\n}\n\n/** Define a Query field */\nexport function Query(\n name?: string,\n options?: { description?: string; returnType?: string },\n): MethodDecorator {\n return (target, propertyKey) => {\n const existing: FieldMeta[] = Reflect.getMetadata(QUERY_META, target.constructor) ?? []\n existing.push({\n name: name ?? (propertyKey as string),\n handlerName: propertyKey as string,\n returnType: options?.returnType,\n description: options?.description,\n })\n Reflect.defineMetadata(QUERY_META, existing, target.constructor)\n }\n}\n\n/** Define a Mutation field */\nexport function Mutation(\n name?: string,\n options?: { description?: string; returnType?: string },\n): MethodDecorator {\n return (target, propertyKey) => {\n const existing: FieldMeta[] = Reflect.getMetadata(MUTATION_META, target.constructor) ?? []\n existing.push({\n name: name ?? (propertyKey as string),\n handlerName: propertyKey as string,\n returnType: options?.returnType,\n description: options?.description,\n })\n Reflect.defineMetadata(MUTATION_META, existing, target.constructor)\n }\n}\n\n/** Define a Subscription field */\nexport function Subscription(name?: string, options?: { description?: string }): MethodDecorator {\n return (target, propertyKey) => {\n const existing: FieldMeta[] = Reflect.getMetadata(SUBSCRIPTION_META, target.constructor) ?? []\n existing.push({\n name: name ?? (propertyKey as string),\n handlerName: propertyKey as string,\n description: options?.description,\n })\n Reflect.defineMetadata(SUBSCRIPTION_META, existing, target.constructor)\n }\n}\n\n/** Mark a method parameter as a GraphQL argument */\nexport function Arg(name: string, type?: string): ParameterDecorator {\n return (target, propertyKey, paramIndex) => {\n const key = propertyKey as string\n const existing: ArgMeta[] = Reflect.getMetadata(ARG_META, target.constructor, key) ?? []\n existing.push({ paramIndex, name, type })\n Reflect.defineMetadata(ARG_META, existing, target.constructor, key)\n }\n}\n\n// Re-export metadata keys for the adapter\nexport { RESOLVER_META, QUERY_META, MUTATION_META, SUBSCRIPTION_META, FIELD_META, ARG_META }\n"],"mappings":"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","names":["Logger","express","RESOLVER_META","Symbol","QUERY_META","MUTATION_META","SUBSCRIPTION_META","ARG_META","Symbol","Resolver","typeName","target","Reflect","defineMetadata","RESOLVER_META","name","replace","Query","options","propertyKey","existing","getMetadata","QUERY_META","push","handlerName","returnType","description","Mutation","MUTATION_META","Subscription","SUBSCRIPTION_META","Arg","type","paramIndex","key","log","Logger","for","GraphQLAdapter","name","options","container","path","playground","process","env","NODE_ENV","beforeMount","app","ResolverClass","resolvers","register","graphqlLib","graphql","buildSchema","warn","schema","rootValue","info","jsonParser","express","json","post","req","res","query","variables","operationName","body","status","errors","message","result","source","variableValues","contextValue","err","get","_req","type","send","renderPlayground","queryFields","mutationFields","meta","Reflect","getMetadata","RESOLVER_META","queries","QUERY_META","mutations","MUTATION_META","q","args","buildArgString","handlerName","returnType","push","argsObj","context","instance","resolve","argMeta","ARG_META","params","sort","a","b","paramIndex","map","length","m","typeDefs","join","trim"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forinda/kickjs-graphql",
3
- "version": "0.6.0",
3
+ "version": "1.1.1",
4
4
  "description": "GraphQL module for KickJS with decorator-based resolvers, schema generation, and playground",
5
5
  "keywords": [
6
6
  "kickjs",
@@ -27,8 +27,8 @@
27
27
  ],
28
28
  "dependencies": {
29
29
  "reflect-metadata": "^0.2.2",
30
- "@forinda/kickjs-core": "0.7.0",
31
- "@forinda/kickjs-http": "0.7.0"
30
+ "@forinda/kickjs-core": "1.1.1",
31
+ "@forinda/kickjs-http": "1.1.1"
32
32
  },
33
33
  "peerDependencies": {
34
34
  "graphql": ">=16.0.0"