apollo-log
Version:
A logging plugin for Apollo GraphQL Server
95 lines • 4.13 kB
JavaScript
;
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