UNPKG

@paroicms/server

Version:
130 lines 5.35 kB
import { siteReadyGuard } from "../../graphql/graphql.types.js"; import { createNoRenderingContext } from "../../liquidjs-tools/liquidjs-rendering/rendering-context.js"; import { executeRenderingHook } from "../../plugin-services/rendering-hook.js"; import { authGuard } from "../auth/auth.helper.js"; import { getTypeNameOf } from "../node/node.queries.js"; import { getFieldValuesOfLNode, getFieldValuesOfOneList } from "./load-fields-of.queries.js"; import { getFieldTypesByNames, loadFieldValues } from "./load-fields.queries.js"; import { parseFieldValues, saveFieldValues } from "./save-fields.queries.js"; export const fieldResolvers = { Mutation: { setFieldValues: async (_parent, { nodeId, language, values }, { siteContext, httpContext }) => { authGuard(httpContext); siteReadyGuard(siteContext); const typeName = await getTypeNameOf(siteContext, nodeId); await saveFieldValues(siteContext, { typeName, nodeId, language: language ?? undefined, values: parseFieldValues(values), }); return true; }, setSiteFieldValues: async (_parent, { language, values }, { siteContext, httpContext }) => { authGuard(httpContext); siteReadyGuard(siteContext); await saveFieldValues(siteContext, { typeName: "_site", nodeId: siteContext.homeRoutingCluster.siteNodeId, language: language ?? undefined, values: parseFieldValues(values), }); return true; }, }, Query: { fieldValues: async (_parent, { lNodeId, fieldNames, preprocess }, { siteContext, httpContext }) => { authGuard(httpContext); siteReadyGuard(siteContext); const fieldValues = await getFieldValuesOfLNode(siteContext, { lNodeId, fieldNames: fieldNames ?? undefined, preprocess: preprocess ?? false, publishedOnly: false, }); return JSON.stringify(fieldValues); }, fieldValuesOfList: async (_parent, { parentLNodeId, listName, fieldNames, preprocess }, { siteContext, httpContext }) => { authGuard(httpContext); siteReadyGuard(siteContext); const map = await getFieldValuesOfOneList(siteContext, { parentLNodeId, listName: listName ?? undefined, fieldNames: fieldNames ?? undefined, preprocess: preprocess ?? false, publishedOnly: false, }); return Array.from(map.entries()).map(([lNodeId, fieldValues]) => ({ lNodeId, fieldValues: JSON.stringify(fieldValues), })); }, siteFieldValues: async (_parent, { language, fieldNames, preprocess }, { siteContext, httpContext }) => { authGuard(httpContext); siteReadyGuard(siteContext); return await resolveFieldValues(siteContext, { typeName: "_site", nodeId: siteContext.homeRoutingCluster.siteNodeId, fieldNames: fieldNames ?? undefined, language: language ?? undefined, preprocess: preprocess ?? false, }); }, }, }; export const extendLNodeWrapWithFieldValuesResolvers = { LNodeWrap: { fieldValues: async ({ nodeId, language }, { preprocess, fieldNames }, { siteContext }) => { siteReadyGuard(siteContext); const typeName = await getTypeNameOf(siteContext, nodeId); return await resolveFieldValues(siteContext, { typeName, nodeId, language, fieldNames: fieldNames ?? undefined, preprocess: preprocess ?? false, }); }, }, }; export const extendPartWithFieldValuesResolver = { Part: { fieldValues: async ({ nodeId, language }, { preprocess, fieldNames }, { siteContext }) => { siteReadyGuard(siteContext); const typeName = await getTypeNameOf(siteContext, nodeId); return await resolveFieldValues(siteContext, { typeName, nodeId, language, fieldNames: fieldNames ?? undefined, preprocess: preprocess ?? false, }); }, }, }; async function resolveFieldValues(siteContext, options) { const { typeName, nodeId, language, fieldNames, preprocess } = options; const fieldTypes = getFieldTypesByNames(siteContext, { typeName, fieldNames, }); const values = await loadFieldValues(siteContext, { nodeId, language, fieldTypes, publishedOnly: false, }); if (!preprocess) return JSON.stringify(values); const renderingContext = createNoRenderingContext(siteContext); const preprocessed = await executeRenderingHook(renderingContext, "fieldPreprocessor", { fieldTypes, values, options: { absoluteUrls: true, }, }); await renderingContext.close(); return JSON.stringify(preprocessed); } //# sourceMappingURL=fields.resolver.js.map