Client Configuration
options.validate
Section titled “options.validate”The ConfigBuilder constructor requires a validate function. This function receives two arguments: the final merged configuration and a Zod mini instance (v4). It must return the validated configuration.
// src/config/client.ts
import { ConfigBuilder, ObjectSource } from "@layerfig/config/client";
// config will be type `z.output<typeof schema>` (the actual object type)
export const config = new ConfigBuilder({
validate: (finalConfig, z) => {
const schema = z.object({
appVersion: z.string(),
});
return schema.parse(finalConfig);
},
runtimeEnv: import.meta.env,
})
.addSource(
new ObjectSource({
appVersion: "$PUBLIC_APP_VERSION",
})
)
.build();You can also use other validation libraries. Return the result of the schema validation from the validate function, and the config object will be typed accordingly:
// src/config/client.ts
import { ConfigBuilder, ObjectSource } from "@layerfig/config/client";
import * as v from "valibot";
const configSchema = v.object({
appVersion: v.string(),
});
export const config = new ConfigBuilder({
validate: (finalConfig) => v.parse(configSchema, finalConfig),
runtimeEnv: import.meta.env,
})
.addSource(
new ObjectSource({
appVersion: "$PUBLIC_APP_VERSION",
})
)
.build();options.slotPrefix
Section titled “options.slotPrefix”Default:
"$"
A string that identifies placeholders to be replaced with environment variables.
By default, Layerfig looks for placeholders prefixed with $. You can customize this prefix to avoid conflicts or to match a team’s convention.
For example, to use a double underscore (__) as the prefix:
// src/config/client.ts
import { ConfigBuilder, ObjectSource } from "@layerfig/config/client";
export const config = new ConfigBuilder({
validate: (finalConfig, z) => {
const schema = z.object({
appVersion: z.string(),
});
return schema.parse(finalConfig);
},
runtimeEnv: import.meta.env,
slotPrefix: "__",
})
.addSource(
new ObjectSource({
appVersion: "__PUBLIC_APP_VERSION",
})
)
.build();Layerfig will now look for placeholders like __PUBLIC_APP_VERSION in your configuration files.
Assuming the PUBLIC_APP_VERSION environment variable is set, the resolved configuration will be:
config.appVersion; // 1f550b7