@paroicms/server
Version:
The ParoiCMS server
130 lines • 5.35 kB
JavaScript
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