UNPKG

studiocms

Version:

Astro Native CMS for AstroDB. Built from the ground up by the Astro community.

64 lines (63 loc) 1.95 kB
import { jsonParse } from "@withstudiocms/internal_helpers/utils"; import { Effect } from "../../../effect.js"; import { SDKCoreError, StudioCMS_SDK_Error } from "../errors.js"; class SDKCore_Parsers extends Effect.Service()( "studiocms/sdk/SDKCore_Parsers", { effect: Effect.gen(function* () { const parseIdNumberArray = (ids) => Effect.try({ try: () => { if (!Array.isArray(ids) || !ids.every((n) => typeof n === "number")) throw new Error("Expected an array of numbers"); return ids; }, catch: (error) => new SDKCoreError({ type: "UNKNOWN", cause: new StudioCMS_SDK_Error(`parseIdNumberArray Error: ${error}`) }) }); const parseIdStringArray = (ids) => Effect.try({ try: () => { if (!Array.isArray(ids) || !ids.every((n) => typeof n === "string")) throw new Error("Expected an array of strings"); return ids; }, catch: (error) => new SDKCoreError({ type: "UNKNOWN", cause: new StudioCMS_SDK_Error(`parseIdStringArray Error: ${error}`) }) }); const fixDiff = (items) => Effect.try({ try: () => { if (Array.isArray(items)) { const toReturn = []; for (const { pageMetaData, ...rest } of items) { toReturn.push({ ...rest, pageMetaData: jsonParse(pageMetaData) }); } return toReturn; } return { ...items, pageMetaData: jsonParse(items.pageMetaData) }; }, catch: (error) => new SDKCoreError({ type: "UNKNOWN", cause: new StudioCMS_SDK_Error(`fixDiff Error: ${error}`) }) }); return { parseIdNumberArray, parseIdStringArray, fixDiff }; }) } ) { } export { SDKCore_Parsers };