UNPKG

@nyteshade/lattice-legacy

Version:

OO Underpinnings for ease of GraphQL Implementation

52 lines (45 loc) • 1.49 kB
/** @namespace decorators */ // @flow import { GQLBase } from '../GQLBase' /** * A decorator that does three things. First it defines the * module() static method that is required when using adjacent * schema files. Secondly, it defines a SCHEMA getter that * returns `GQLBase.ADJACENT_FILE`. Finally it sets a static * getter with the `Symbol`, `@adjacentSchema` so that other * can determine whether or not the decorator was used. * * @function 🏷⠀AdjacentSchema * @memberof! decorators * @since 2.1.0 * * @param {mixed} object the object on which to apply the decorator * @param {String} property the name of the object or property to * which the decorator is being applied. * @param {Object} descriptor a standard Object.defineProperty style * descriptor object. */ export default function AdjacentSchema(classModule: Object) { return function(target: GQLBase) { // Attempt to remove the SCHEMA and module properties or functions from // the class being decorated. This is not guaranteed to work but should // increase compatibilty and success rates. // @ComputedType delete target.SCHEMA; // @ComputedType delete target.module; // @ComputedType return Object.defineProperties(target, { module: { get: () => classModule }, SCHEMA: { get: () => GQLBase.ADJACENT_FILE }, [Symbol.for('@adjacentSchema')]: { get: () => true } }); } } export { AdjacentSchema };