Home Reference Source Repository

src/query/directivesToGraphQL.js

/**
 * Copyright (c) 2013-present, Facebook, Inc.
 * All rights reserved.
 *
 * This source code is licensed under the BSD-style license found in the
 * LICENSE file in the root directory of this source tree. An additional grant
 * of patent rights can be found in the PATENTS file in the same directory.
 *
 * @providesModule directivesToGraphQL
 * @flow
 */

'use strict';

import type {ConcreteDirective} from 'ConcreteQuery';
import type {Directive} from 'RelayInternalTypes';
const QueryBuilder = require('QueryBuilder');

/**
 * @internal
 *
 * Convert plain object `{name, arguments}` directives to GraphQL directive
 * nodes.
 */
function directivesToGraphQL(
  directives: Array<Directive>
): Array<ConcreteDirective> {
  return directives.map(({name: directiveName, args}) => {
    const concreteArguments = args.map(({name: argName, value}) => {
      let concreteArgument = null;
      if (Array.isArray(value)) {
        concreteArgument = value.map(QueryBuilder.createCallValue);
      } else if (value != null)  {
        concreteArgument = QueryBuilder.createCallValue(value);
      }
      return QueryBuilder.createDirectiveArgument(argName, concreteArgument);
    });
    return QueryBuilder.createDirective(directiveName, concreteArguments);
  });
}

module.exports = directivesToGraphQL;