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