@mercuriusjs/gateway
Version:
A plugin for mercurius federation
54 lines (46 loc) • 1.3 kB
JavaScript
const { lru } = require('tiny-lru')
const { MER_ERR_INVALID_OPTS } = require('./errors')
function hasDirective (directiveName, node) {
if (!node.directives || node.directives.length < 1) {
return false
}
for (let i = 0; i < node.directives.length; i++) {
if (node.directives[i].name.value === directiveName) {
return true
}
}
}
function hasExtensionDirective (node) {
if (!node.directives || node.directives.length < 1) {
return false
}
for (let i = 0; i < node.directives.length; i++) {
const directive = node.directives[i].name.value
if (directive === 'extends' || directive === 'requires') {
return true
}
}
}
function buildCache (opts) {
if (Object.prototype.hasOwnProperty.call(opts, 'cache')) {
const isBoolean = typeof opts.cache === 'boolean'
const isNumber = typeof opts.cache === 'number'
if (isBoolean && opts.cache === false) {
// no cache
return null
} else if (isNumber) {
// cache size as specified
return lru(opts.cache)
} else if (!isBoolean && !isNumber) {
throw new MER_ERR_INVALID_OPTS('Cache type is not supported')
}
}
// default cache, 1024 entries
return lru(1024)
}
module.exports = {
hasDirective,
hasExtensionDirective,
buildCache
}