"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.generateGraphQLDocuments = exports.buildSchema = void 0; const handlebars = require('handlebars/dist/handlebars'); const generator_1 = require("./generator"); const loading_1 = require("./generator/utils/loading"); const templates_1 = require("./generator/utils/templates"); var loading_2 = require("./generator/utils/loading"); Object.defineProperty(exports, "buildSchema", { enumerable: true, get: function () { return loading_2.buildSchema; } }); function generateGraphQLDocuments(schema, options) { const opts = Object.assign({ maxDepth: 2, useExternalFragmentForS3Object: true, typenameIntrospection: true }, options); const extendedSchema = (0, loading_1.buildSchema)(schema); const gqlOperations = (0, generator_1.default)(extendedSchema, opts.maxDepth, { useExternalFragmentForS3Object: opts.useExternalFragmentForS3Object, typenameIntrospection: opts.typenameIntrospection, }); registerPartials(); registerHelpers(); const allOperations = { queries: new Map(), mutations: new Map(), subscriptions: new Map(), fragments: new Map(), }; ['queries', 'mutations', 'subscriptions'].forEach(op => { const ops = gqlOperations[op]; if (ops.length) { const renderedOperations = renderOperations(gqlOperations[op], options.includeMetaData); allOperations[op] = renderedOperations; } }); if (gqlOperations.fragments.length) { const renderedFragments = renderFragments(gqlOperations.fragments, opts.useExternalFragmentForS3Object); allOperations['fragments'] = renderedFragments; } return allOperations; } exports.generateGraphQLDocuments = generateGraphQLDocuments; function renderOperations(operations, includeMetaData) { const renderedOperations = new Map(); if (operations === null || operations === void 0 ? void 0 : operations.length) { operations.forEach(op => { const name = op.fieldName || op.name; const gql = renderOperation(op); if (includeMetaData) { renderedOperations.set(name, { graphql: gql, operationName: op.name, operationType: op.type, fieldName: op.fieldName, }); } else { renderedOperations.set(name, gql); } }); } return renderedOperations; } function renderOperation(operation) { const templateStr = (0, templates_1.getOperationPartial)(); const template = handlebars.compile(templateStr, { noEscape: true, preventIndent: true, }); return template(operation); } function renderFragments(fragments, useExternalFragmentForS3Object) { const renderedFragments = new Map(); if (fragments === null || fragments === void 0 ? void 0 : fragments.length) { fragments.forEach(fragment => { const name = fragment.name; const gql = renderFragment(fragment, useExternalFragmentForS3Object); renderedFragments.set(name, gql); }); } return renderedFragments; } function renderFragment(fragment, useExternalFragmentForS3Object) { if (!useExternalFragmentForS3Object) { return; } const templateStr = (0, templates_1.getExternalFragmentPartial)(); const template = handlebars.compile(templateStr, { noEscape: true, preventIndent: true, }); return template(fragment); } function registerPartials() { const partials = (0, templates_1.getTemplatePartials)(); for (const [partialName, partialContent] of Object.entries(partials)) { handlebars.registerPartial(partialName, partialContent); } } function registerHelpers() { const formatNameHelper = generator_1.lowerCaseFirstLetter; handlebars.registerHelper('formatName', formatNameHelper); } //# sourceMappingURL=index.js.map