No Proscribed Meaning

    @imqueue/type-graphql-dependency
    TypeScript icon, indicating that this package has built-in type declarations

    1.1.6 • Public • Published

    @imqueue/type-graphql-dependency

    Build Status License

    Adoption of @imqueue/graphql-dependency for use with type-graphql.

    Install

    npm i --save @imqueue/type-graphql-dependency

    Usage

    This module allows describing cross-service dependencies and fetch user requested data in an optimal manner in a schemas defined using type-graphql library.

    Example:

    import {
        Dependency,
        DependencyFor,
        schemaHooks,
    } from '@imqueue/type-graphql-dependency';
    import {  Ctx, Info } from 'type-graphql';
    import { fieldsMap } from 'graphql-fields-list';
    
    @DependencyFor<Partial<Consumer>>({
       // this defines dependency relations for Consumer object.
       // refers to: @imqueue/graphql-dependency:Dependency.require()
       require: [
           [() => ApiKey, [
               { as: 'apiKeys', filter: { 'consumerId': 'id' } }],
           ],
       ],
       // this defines initializer for Consumer, all dependencies will wait
       // for initializer to finish before load
       // refers to: @imqueue/graphql-dependency:Dependency.defineInitializer()
       async init(
           context: Context,
           result: Partial<Consumer>,
           fields?: FieldsInput,
       ): Promise<DataInitializerResult> {
           // ... do initializer stuff here ...
           return result;
       },
       // this defines loader for Consumer entity, which should be used by
       // other entities, which depend on Consumer
       // refers to: @imqueue/graphql-dependency:Dependency.defineLoader()
       async load(
           context: Context,
           filter: ConsumerListInput,
           fields?: FieldsInput,
       ): Promise<Partial<Consumer>[]> {
           const { data } = await context.consumer.listConsumer(filter, fields);
           return toConsumers(data);
       },
    })
    @ObjectType()
    export class Consumer {
        // ... Consumer fields definitions goes here ...
    }
    
    // now within a resolver:
    async function consumerResolver(
        @Ctx() context: Context,
        @Info() info: GraphQLResolveInfo,
    ) {
        // load consumer data from some service or database
        const data = await loadConsumers(/* ... */);
        // fill dependent data into loaded data
        await Dependency(Consumer).load(data, context, fieldsMap(info));
        return data;
    }
    
    // Now where schema is created using type-graphql:
    const schema = await buildSchema({
        // your schema options due to type-graphql docs
    });
    // and
    (schemaHooks || []).forEach(handle => handle && handle(schema));
    // so now all deps initialized within schema

    License

    ISC

    Install

    npm i @imqueue/type-graphql-dependency

    DownloadsWeekly Downloads

    7

    Version

    1.1.6

    License

    ISC

    Unpacked Size

    24.2 kB

    Total Files

    10

    Last publish

    Collaborators

    • serhiy.greench
    • mikhus