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
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:
@@ -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"
|
||||||
|
|||||||
@@ -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>;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user