@nestjs/graphql
Version:
Nest - modern, fast, powerful node.js web framework (@graphql)
46 lines (45 loc) • 1.67 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Directive = Directive;
const graphql_1 = require("graphql");
const directive_parsing_error_1 = require("../schema-builder/errors/directive-parsing.error");
const lazy_metadata_storage_1 = require("../schema-builder/storages/lazy-metadata.storage");
const type_metadata_storage_1 = require("../schema-builder/storages/type-metadata.storage");
/**
* Adds one or more directives to a field, type, or handler. Passing an array
* attaches every directive in a single decorator call, equivalent to stacking
* multiple `@Directive(...)` decorators.
*
* @publicApi
*/
function Directive(sdl) {
const sdls = Array.isArray(sdl) ? sdl : [sdl];
sdls.forEach(validateDirective);
return (target, key) => {
lazy_metadata_storage_1.LazyMetadataStorage.store(() => {
sdls.forEach((singleSdl) => {
if (key) {
type_metadata_storage_1.TypeMetadataStorage.addDirectivePropertyMetadata({
target: target.constructor,
fieldName: key,
sdl: singleSdl,
});
}
else {
type_metadata_storage_1.TypeMetadataStorage.addDirectiveMetadata({
target: target,
sdl: singleSdl,
});
}
});
});
};
}
function validateDirective(sdl) {
try {
(0, graphql_1.parse)(`type String ${sdl}`);
}
catch (err) {
throw new directive_parsing_error_1.DirectiveParsingError(sdl);
}
}