@graphql-mesh/plugin-hive
Version:
116 lines (115 loc) • 4.9 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = useMeshHive;
const yoga_1 = require("@graphql-hive/yoga");
const cross_helpers_1 = require("@graphql-mesh/cross-helpers");
const string_interpolation_1 = require("@graphql-mesh/string-interpolation");
function useMeshHive(pluginOptions) {
const enabled = pluginOptions != null && 'enabled' in pluginOptions
? typeof pluginOptions.enabled === 'string'
? // eslint-disable-next-line no-new-func
new Function(`return ${pluginOptions.enabled}`)()
: pluginOptions.enabled
: true;
if (!enabled) {
pluginOptions.logger?.warn('Plugin is disabled');
return {};
}
const token = string_interpolation_1.stringInterpolator.parse(pluginOptions.token, {
env: cross_helpers_1.process.env,
});
if (token) {
pluginOptions.logger?.info('Reporting enabled');
}
const persistedDocuments = pluginOptions.experimental__persistedDocuments;
if (persistedDocuments) {
pluginOptions.logger?.info('Persisted documents enabled');
}
let usage = true;
if (pluginOptions.usage) {
usage = {
max: pluginOptions.usage.max,
ttl: pluginOptions.usage.ttl,
exclude: pluginOptions.usage.exclude,
sampleRate: pluginOptions.usage.sampleRate,
processVariables: pluginOptions.usage.processVariables,
};
if (pluginOptions.usage?.clientInfo) {
if (typeof pluginOptions.usage.clientInfo === 'function') {
usage.clientInfo = pluginOptions.usage.clientInfo;
}
else {
usage.clientInfo = function (context) {
return {
name: string_interpolation_1.stringInterpolator.parse(pluginOptions.usage.clientInfo.name, {
context,
env: cross_helpers_1.process.env,
}),
version: string_interpolation_1.stringInterpolator.parse(pluginOptions.usage.clientInfo.version, {
context,
env: cross_helpers_1.process.env,
}),
};
};
}
}
}
let reporting;
if (pluginOptions.reporting) {
reporting = {
author: string_interpolation_1.stringInterpolator.parse(pluginOptions.reporting.author, { env: cross_helpers_1.process.env }),
commit: string_interpolation_1.stringInterpolator.parse(pluginOptions.reporting.commit, { env: cross_helpers_1.process.env }),
serviceName: string_interpolation_1.stringInterpolator.parse(pluginOptions.reporting.serviceName, {
env: cross_helpers_1.process.env,
}),
serviceUrl: string_interpolation_1.stringInterpolator.parse(pluginOptions.reporting.serviceUrl, {
env: cross_helpers_1.process.env,
}),
};
}
let agent = {
name: 'graphql-mesh',
logger: pluginOptions.logger,
};
if (pluginOptions.agent) {
agent = {
name: pluginOptions.agent.name || 'graphql-mesh',
timeout: pluginOptions.agent.timeout,
maxRetries: pluginOptions.agent.maxRetries,
minTimeout: pluginOptions.agent.minTimeout,
sendInterval: pluginOptions.agent.sendInterval,
maxSize: pluginOptions.agent.maxSize,
logger: pluginOptions.agent?.logger || pluginOptions.logger,
};
}
let selfHosting;
if (pluginOptions.selfHosting) {
selfHosting = {
graphqlEndpoint: string_interpolation_1.stringInterpolator.parse(pluginOptions.selfHosting.graphqlEndpoint, {
env: cross_helpers_1.process.env,
}),
usageEndpoint: string_interpolation_1.stringInterpolator.parse(pluginOptions.selfHosting.usageEndpoint, {
env: cross_helpers_1.process.env,
}),
applicationUrl: string_interpolation_1.stringInterpolator.parse(pluginOptions.selfHosting.applicationUrl, {
env: cross_helpers_1.process.env,
}),
};
}
const yogaPluginOpts = {
enabled:
// eslint-disable-next-line no-unneeded-ternary -- for brevity
persistedDocuments && !token
? false // disable usage reporting if just persisted documents are configured
: true,
debug: ['1', 't', 'true', 'y', 'yes'].includes(cross_helpers_1.process.env.DEBUG),
token,
agent,
usage,
reporting,
selfHosting,
experimental__persistedDocuments: persistedDocuments,
};
// @ts-expect-error - Typings are incorrect
return (0, yoga_1.useHive)(yogaPluginOpts);
}
;