UNPKG

studiocms

Version:

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

81 lines (80 loc) 2.81 kB
import { Effect, pipe, Schema } from "../../../effect.js"; var SelectPluginDataRespondOrFail = /* @__PURE__ */ ((SelectPluginDataRespondOrFail2) => { SelectPluginDataRespondOrFail2["ExistsNoFail"] = "existsNoFail"; SelectPluginDataRespondOrFail2["ExistsShouldFail"] = "existsShouldFail"; SelectPluginDataRespondOrFail2["NotExistsShouldFail"] = "notExistsShouldFail"; return SelectPluginDataRespondOrFail2; })(SelectPluginDataRespondOrFail || {}); const parsedDataResponse = (id, data) => Effect.succeed({ id, data }); function noUndefinedEntries(entries) { return entries.filter((entry) => entry !== void 0 && entry !== null); } const isJsonValid = (data) => (isValid) => { if (isValid) return data; throw new Error("Validation failed for plugin data"); }; const getValidatorFn = Effect.fn("studiocms/sdk/effect/pluginUtils/getValidatorFn")( function* (validator) { if ("jsonFn" in validator) { return (data) => Effect.try({ try: () => pipe(validator.jsonFn(data), isJsonValid(data)), catch: (error) => new Error(`JSON validation failed: ${error.message}`) }); } if ("effectSchema" in validator) { return (data) => Schema.decodeUnknown(validator.effectSchema)(data).pipe( Effect.mapError( (error) => new Error(`Schema validation failed: ${error.message}`) ) ); } if ("zodSchema" in validator) { return (data) => Effect.try({ try: () => { const result = validator.zodSchema.safeParse(data); if (result.success) { return result.data; } throw new Error(`Zod validation failed: ${result.error.message}`, { cause: result.error.cause }); }, catch: (error) => new Error(error.message, { cause: error.cause }) }); } return yield* Effect.fail( new Error( "Invalid validator options provided, expected one of: jsonFn, effectSchema, or zodSchema" ) ); } ); const parseData = Effect.fn("studiocms/sdk/effect/pluginUtils/parseData")(function* (rawData, validator) { let parsedInput; if (typeof rawData === "string") { parsedInput = yield* Effect.try({ try: () => JSON.parse(rawData), catch: (error) => new Error(`JSON parsing failed: ${error}`) }); } else if (rawData !== null && typeof rawData === "object") { parsedInput = rawData; } else { return yield* Effect.fail(new Error(`Invalid plugin data format: ${typeof rawData}`)); } if (!validator || validator === void 0) { return parsedInput; } const validatorFn = yield* getValidatorFn(validator); return yield* validatorFn(parsedInput); }); export { SelectPluginDataRespondOrFail, getValidatorFn, isJsonValid, noUndefinedEntries, parseData, parsedDataResponse };