UNPKG

@nestjs/graphql

Version:

Nest - modern, fast, powerful node.js web framework (@graphql)

46 lines (45 loc) 1.67 kB
"use strict"; 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); } }