UNPKG

@powership/server

Version:
1 lines 4.68 kB
{"version":3,"file":"errorHandler.mjs","names":["ulid","GraphQLObjectType","GraphQLSchema","isHttpError","Processed","Symbol","defaultHandler","err","errId","message","console","error","stack","setDefaultHandler","handlerFn","maskErrors","thing","fn","maskSchema","maskType","maskField","field","resolveFn","resolve","args","out","call","Promise","e","_resolveFn","type","getFields","fields","fieldName","Object","hasOwnProperty","schema","types","getTypeMap","typeName"],"sources":["../../src/graphql/errorHandler.ts"],"sourcesContent":["import { AnyFunction, ulid } from '@powership/utils';\nimport { GraphQLObjectType, GraphQLSchema } from 'graphql';\n\nimport { isHttpError } from '../BaseRequestHandler';\n\n// Mark field/type/schema\nexport const Processed = Symbol();\n\n// Modifies errors before sending to the user\nexport let defaultHandler = function (err: any) {\n if (isHttpError(err)) {\n return err;\n }\n const errId = `gql#${ulid()}`;\n err.message = `${err.message}: ${errId}`;\n console.error((err && err.stack) || err);\n err.message = `Internal Error: ${errId}`;\n return err;\n};\n\n// Changes the default error handler function\nexport function setDefaultHandler(handlerFn: any) {\n defaultHandler = handlerFn;\n}\n\n// Masks graphql schemas, types or individual fields\nexport function maskErrors(thing: any, fn = defaultHandler) {\n if (thing instanceof GraphQLSchema) {\n maskSchema(thing, fn);\n } else if (thing instanceof GraphQLObjectType) {\n maskType(thing, fn);\n } else {\n maskField(thing, fn);\n }\n}\n\nfunction maskField(field: any, fn: AnyFunction) {\n const resolveFn = field.resolve;\n if (field[Processed] || !resolveFn) {\n return;\n }\n\n field[Processed] = true;\n field.resolve = async function (...args: any) {\n try {\n const out = resolveFn.call(this, ...args);\n return await Promise.resolve(out);\n } catch (e) {\n throw fn(e, args);\n }\n };\n\n // save the original resolve function\n field.resolve._resolveFn = resolveFn;\n}\n\nfunction maskType(type: any, fn: AnyFunction) {\n if (type[Processed] || !type.getFields) {\n return;\n }\n\n const fields = type.getFields();\n for (const fieldName in fields) {\n if (!Object.hasOwnProperty.call(fields, fieldName)) {\n continue;\n }\n\n maskField(fields[fieldName], fn);\n }\n}\n\nfunction maskSchema(schema: any, fn: AnyFunction) {\n const types = schema.getTypeMap();\n for (const typeName in types) {\n if (!Object.hasOwnProperty.call(types, typeName)) {\n continue;\n }\n\n maskType(types[typeName], fn);\n }\n}\n"],"mappings":"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","ignoreList":[]}