Schema-driven configuration management for Node.js or the browser
npm install @bust/config --saveThe heart of @bust/config is a schema that you define for your application. With this in place, @bust/config can read relevant variables from the environment, coerce them to the correct type, validate them, and provide a consistent interface for accessing them.
Here's how you get started:
// config.ts
import { createConfig } from '@bust/config';
export const config = createConfig({
app: {
name: { default: 'My App', env: 'MY_APP_NAME', public: true },
secret: { default: '', env: 'MY_APP_SECRET' },
},
});Then simply import your config instance wherever you need it.
// elsewhere.ts
import { config } from './config.ts';
config.get('app.name');@bust/config works in both Node.js and the browser by leveraging import maps defined in its package.json file. Bundlers
that respect the browser condition (Vite, webpack, Rollup, etc.) automatically get a browser-safe build with no Node.js-only dependencies.
Within a Node.js context, environment variables are loaded from a .env file courtesy of the dotenv library.
The browser receives your public settings (marked public: true in your schema) via a global variable injected by your bundler. Here's how to set that up using vite:
// vite.config.ts
import { defineConfig } from 'vite';
import { getBrowserDefine } from '@bust/config';
import { config } from './config.ts'; // as shown above
export default defineConfig({
define: getBrowserDefine(config),
});Caution
Secrets should NEVER be included in your schema. Instead, assign safe default / placeholder values then include the actual values in your .env file or directly in the environment.
see here
NOTE: When in doubt, check usage in the tests
See LICENSE.md