chore(next-utils): introduce withMintelRefinements and publish v1.7.14
Some checks failed
Monorepo Pipeline / ⚡ Prioritize Release (push) Successful in 1s
Monorepo Pipeline / 🧹 Lint (push) Has started running
Monorepo Pipeline / 🏗️ Build (push) Has been cancelled
Monorepo Pipeline / 🚀 Release (push) Has been cancelled
Monorepo Pipeline / 🐳 Build Directus (Base) (push) Has been cancelled
Monorepo Pipeline / 🐳 Build Gatekeeper (Product) (push) Has been cancelled
Monorepo Pipeline / 🧪 Test (push) Has been cancelled
Monorepo Pipeline / 🐳 Build Build-Base (push) Has been cancelled
Monorepo Pipeline / 🐳 Build Production Runtime (push) Has been cancelled

This commit is contained in:
2026-02-11 01:31:16 +01:00
parent 3b9f10ec98
commit 28517a3558
2 changed files with 33 additions and 5 deletions

View File

@@ -1,6 +1,6 @@
{ {
"name": "@mintel/next-utils", "name": "@mintel/next-utils",
"version": "1.7.13", "version": "1.7.14",
"publishConfig": { "publishConfig": {
"access": "public", "access": "public",
"registry": "https://npm.infra.mintel.me" "registry": "https://npm.infra.mintel.me"

View File

@@ -50,17 +50,45 @@ export const mintelEnvSchema = {
INTERNAL_DIRECTUS_URL: z.string().url().optional(), INTERNAL_DIRECTUS_URL: z.string().url().optional(),
}; };
/**
* Standard Mintel refinements for environment variables.
* Enforces mandatory requirements for non-development environments.
*/
export const withMintelRefinements = <T extends z.ZodTypeAny>(schema: T) => {
return schema.superRefine((data: any, ctx) => {
const target = data.TARGET || data.NEXT_PUBLIC_TARGET || "development";
// Strict validation for non-development environments
if (target !== "development") {
if (!data.MAIL_HOST) {
ctx.addIssue({
code: z.ZodIssueCode.custom,
message: "MAIL_HOST is required in non-development environments",
path: ["MAIL_HOST"],
});
}
}
});
};
export type MintelEnv<T extends z.ZodRawShape = Record<string, never>> = export type MintelEnv<T extends z.ZodRawShape = Record<string, never>> =
z.infer<z.ZodObject<typeof mintelEnvSchema & T>>; z.infer<
ReturnType<
typeof withMintelRefinements<z.ZodObject<typeof mintelEnvSchema & T>>
>
>;
export function validateMintelEnv< export function validateMintelEnv<
T extends z.ZodRawShape = Record<string, never>, T extends z.ZodRawShape = Record<string, never>,
>(schemaExtension: T = {} as T): MintelEnv<T> { >(schemaExtension: T = {} as T): MintelEnv<T> {
const fullSchema = z.object(mintelEnvSchema).extend(schemaExtension); const fullSchema = withMintelRefinements(
z.object(mintelEnvSchema).extend(schemaExtension),
);
const isBuildTime = const isBuildTime =
process.env.NEXT_PHASE === "phase-production-build" || process.env.NEXT_PHASE === "phase-production-build" ||
process.env.SKIP_ENV_VALIDATION === "true"; process.env.SKIP_ENV_VALIDATION === "true" ||
process.env.SKIP_RUNTIME_ENV_VALIDATION === "true";
const result = fullSchema.safeParse(process.env); const result = fullSchema.safeParse(process.env);
@@ -80,5 +108,5 @@ export function validateMintelEnv<
throw new Error("Invalid environment variables"); throw new Error("Invalid environment variables");
} }
return result.data; return result.data as MintelEnv<T>;
} }