UNPKG

@omnigraph/odata

Version:
42 lines (41 loc) 2.22 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createEntitySetByIdentifierResolver = createEntitySetByIdentifierResolver; const tslib_1 = require("tslib"); const graphql_parse_resolve_info_1 = require("graphql-parse-resolve-info"); const url_join_1 = tslib_1.__importDefault(require("url-join")); const utils_1 = require("@graphql-tools/utils"); const fetch_1 = require("@whatwg-node/fetch"); const addIdentifierToUrl_js_1 = require("../utils/addIdentifierToUrl.js"); const getUrlString_js_1 = require("../utils/getUrlString.js"); const handleResponseText_js_1 = require("../utils/handleResponseText.js"); const prepareSearchParams_js_1 = require("../utils/prepareSearchParams.js"); function createEntitySetByIdentifierResolver({ endpoint, entitySetName, identifierFieldName, identifierFieldTypeRef, dataloaderFactory, expandNavProps, headersFactory, }) { return function entitySetByIdentifierResolver(root, args, context, info) { const url = new URL(endpoint); url.href = (0, url_join_1.default)(url.href, '/' + entitySetName); (0, addIdentifierToUrl_js_1.addIdentifierToUrl)(url, identifierFieldName, identifierFieldTypeRef, args); const parsedInfoFragment = (0, graphql_parse_resolve_info_1.parseResolveInfo)(info); const searchParams = (0, prepareSearchParams_js_1.prepareSearchParams)({ fragment: parsedInfoFragment, schema: info.schema, expandNavProps, }); searchParams?.forEach((value, key) => { url.searchParams.set(key, value); }); const urlString = (0, getUrlString_js_1.getUrlString)(url); const method = 'GET'; const request = new fetch_1.Request(urlString, { method, headers: headersFactory({ root, args, context, info, env: process.env, }, method), }); return (0, utils_1.mapMaybePromise)(dataloaderFactory(context).load(request), response => (0, utils_1.mapMaybePromise)(response.text(), responseText => (0, handleResponseText_js_1.handleResponseText)(responseText, urlString, info))); }; }