UNPKG

apollo-log

Version:

A logging plugin for Apollo GraphQL Server

95 lines 4.13 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.ApolloLogPlugin = void 0; const chalk_1 = __importDefault(require("chalk")); const fast_safe_stringify_1 = __importDefault(require("fast-safe-stringify")); const loglevelnext_1 = __importDefault(require("loglevelnext")); const nanoid_1 = require("nanoid"); const defaults = { events: { didEncounterErrors: true, didResolveOperation: false, executionDidStart: false, parsingDidStart: false, responseForOperation: false, validationDidStart: false, willSendResponse: true }, mutate: (data) => data, prefix: 'apollo', timestamp: false }; const nanoid = nanoid_1.customAlphabet('1234567890abcdef', 6); const ignoredOps = ['IntrospectionQuery']; const getLog = (options) => { const template = `${options.timestamp ? '[{{time}}] ' : ''}{{level}} `; const prefix = { level: ({ level }) => chalk_1.default[level === 'info' ? 'blue' : 'red'](chalk_1.default `{inverse ${options.prefix}}`), template, time: () => new Date().toTimeString().split(' ')[0] }; const log = loglevelnext_1.default.create({ level: 'info', name: 'apollo-log', prefix }); return (id, data) => { var _a; const mutated = (_a = options.mutate) === null || _a === void 0 ? void 0 : _a.call(options, data); log[data.errors ? 'error' : 'info'](chalk_1.default `{dim ${id}}`, fast_safe_stringify_1.default(mutated)); }; }; const ApolloLogPlugin = (opts) => { const options = Object.assign({}, defaults, opts); const log = getLog(options); return { requestDidStart(context) { var _a; const operationId = nanoid(); const ignore = ignoredOps.includes(context.operationName || ''); if (!ignore) { const query = (_a = context.request.query) === null || _a === void 0 ? void 0 : _a.replace(/\n/g, ''); const variables = Object.keys(context.request.variables || {}); log(operationId, { event: 'request', operationName: context.operationName, query, variables, context }); } const { events } = options; const handlers = { didEncounterErrors({ errors }) { events.didEncounterErrors && log(operationId, { event: 'errors', errors, context }); }, didResolveOperation({ metrics, operationName }) { events.didResolveOperation && log(operationId, { event: 'didResolveOperation', metrics, operationName, context }); }, executionDidStart({ metrics }) { events.executionDidStart && log(operationId, { event: 'executionDidStart', metrics, context }); }, parsingDidStart({ metrics }) { events.parsingDidStart && log(operationId, { event: 'parsingDidStart', metrics, context }); }, responseForOperation({ metrics, operationName }) { events.responseForOperation && log(operationId, { event: 'responseForOperation', metrics, operationName, context }); return null; }, validationDidStart({ metrics }) { events.validationDidStart && log(operationId, { event: '', metrics, context }); }, willSendResponse({ metrics }) { options.events.willSendResponse && log(operationId, { event: 'response', metrics, context }); } }; return handlers; } }; }; exports.ApolloLogPlugin = ApolloLogPlugin; //# sourceMappingURL=index.js.map