Security News
The Push to Ban Ransom Payments Is Gaining Momentum
Ransomware costs victims an estimated $30 billion per year and has gotten so out of control that global support for banning payments is gaining momentum.
Readme
Platform agnostic configuration management library, with environmental variables and validation, like convict but simpler, cross env and using zod schemas.
Install package:
# npm
npm install figue
# yarn
yarn install figue
# pnpm
pnpm install figue
Import:
// ESM
import { defineConfig, z } from "figue";
// CommonJS
const { defineConfig, z } = require("figue");
import { defineConfig, z } from "figue";
const { config } = defineConfig(
{
env: {
doc: "Application current environment",
default: "development",
schema: z.enum(["development", "production", "test"]),
env: "NODE_ENV",
},
port: {
doc: "Application port to listen",
schema: z.coerce.number().int().positive(),
default: 3000,
env: "PORT",
},
db: {
host: {
doc: "Database server url",
schema: z.string().url(),
default: "localhost",
env: "APP_DB_HOST",
},
username: {
doc: "Database server username",
schema: z.string(),
default: "pg",
env: "APP_DB_USERNAME",
},
password: {
doc: "Database server password",
schema: z.string(),
default: "",
env: "APP_DB_PASSWORD",
},
},
},
{
envSource: process.env,
}
);
console.log(config);
// {
// env: "development",
// port: 3000,
// db: {
// url: "https://localhost",
// username: "pg",
// password: "",
// },
// }
Use the envSource
key of the second argument of defineConfig
to specify the source of the environment variables:
const { config } = defineConfig(
{
/* ... */
},
{
envSource: process.env,
}
);
In some case you don't have access to a process.env
variable, like with vite
, just simply load what stores your env variables :
const { config } = defineConfig(
{
/* ... */
},
{
envSource: import.meta.env,
}
);
You can even specify you custom environment storage as long as it's a simple flat object map, for example:
const { config } = defineConfig(
{
env: {
doc: "Application current environment",
default: "development",
schema: z.enum(["development", "production", "test"]),
env: "NODE_ENV",
},
/* ... */
},
{
envSource: {
NODE_ENV: "development",
PORT: "3000",
APP_DB_HOST: "localhost",
APP_DB_USERNAME: "pg",
APP_DB_PASSWORD: "",
},
}
);
If, for some reason, you have multiple sources of environment variables, you can use the envSources
key of the second argument of defineConfig
to specify an array of sources:
const { config } = defineConfig(
{
/* ... */
},
{
envSource: [import.meta.env, myEnvs],
}
);
Convict is meant to be used in node based environnement, it needs to have access to global variables that may may not be present in some environnement (like process
, global
), and it also imports fs
.
Figue is the french for fig -> con-fig.
pnpm install
pnpm dev
Coded with ❤️ by Corentin Thomasset.
This project is under the MIT license.
FAQs
Platform agnostic configuration management library, with environmental variables and validation, like convict but cross-env and zod schemas
We found that figue demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Ransomware costs victims an estimated $30 billion per year and has gotten so out of control that global support for banning payments is gaining momentum.
Application Security
New SEC disclosure rules aim to enforce timely cyber incident reporting, but fear of job loss and inadequate resources lead to significant underreporting.
Security News
The Python Software Foundation has secured a 5-year sponsorship from Fastly that supports PSF's activities and events, most notably the security and reliability of the Python Package Index (PyPI).