Files
WRNexusJS/packages/email-renderer/src/brand.ts
T
Clintchiz 371c23db46
Quality / quality (ubuntu-latest) (push) Failing after 10m1s
Quality / quality (windows-latest) (push) Canceled after 0s
fix(email-renderer): validate brand settings and apply them to AMP
2026-09-05 12:47:43 +05:30

43 lines
1.2 KiB
TypeScript

import { string, type ValueSchema } from "@wrnexus/blocks";
// Brand fields are semantic values, never arbitrary CSS declarations.
export function brandValue(
defaultValue: string,
accepts: (value: string) => boolean,
): ValueSchema<string> {
const base = string({ default: defaultValue, max: 160 });
return {
...base,
parse(value, path = "value") {
const result = base.parse(value, path);
if (!result.ok) return result;
return accepts(result.value)
? result
: {
ok: false,
errors: [
{
code: "email.brand",
message: "Unsupported brand style value.",
severity: "error",
path,
},
],
};
},
};
}
export const brandColor = (fallback: string) =>
brandValue(fallback, (value) =>
/^(#[0-9a-f]{3}|#[0-9a-f]{6}|#[0-9a-f]{8}|transparent)$/i.test(value),
);
export const brandFont = brandValue(
"Arial, sans-serif",
(value) => /^[a-z0-9 ,'"-]+$/i.test(value) && /[a-z]/i.test(value),
);
export const brandWidth = brandValue(
"600",
(value) => /^\d{2,4}$/.test(value) && Number(value) >= 240 && Number(value) <= 1200,
);