studiocms
Version:
Astro Native CMS for AstroDB. Built from the ground up by the Astro community.
64 lines (63 loc) • 1.95 kB
JavaScript
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
};