@o/env 0.0.0-bootstrap.0 → 0.16.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -0
- package/dist/index.d.ts +57 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +282 -0
- package/dist/index.js.map +1 -0
- package/package.json +32 -2
package/README.md
ADDED
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
export declare function ensureEnv(name: string, defaultValue?: string): string;
|
|
2
|
+
/** marker for env vars that must be provided at runtime */
|
|
3
|
+
export declare const expected: unique symbol;
|
|
4
|
+
export type Expected = typeof expected;
|
|
5
|
+
type EnvValue = string | Expected;
|
|
6
|
+
type EnvConfig<TPorts extends Record<string, number>, TBase extends Record<string, EnvValue>, TDev extends Record<string, EnvValue>, TProd extends Record<string, EnvValue>> = {
|
|
7
|
+
/** base port numbers (before PORT_OFFSET) */
|
|
8
|
+
ports: TPorts;
|
|
9
|
+
/** env vars shared across all modes */
|
|
10
|
+
base: TBase;
|
|
11
|
+
/** dev-mode env vars — function form receives computed ports + helpers */
|
|
12
|
+
development: ((ctx: {
|
|
13
|
+
ports: Resolved<TPorts>;
|
|
14
|
+
portOffset: number;
|
|
15
|
+
/** build a postgres connection string using ports.postgres */
|
|
16
|
+
pgUrl: (opts?: {
|
|
17
|
+
database?: string;
|
|
18
|
+
user?: string;
|
|
19
|
+
password?: string;
|
|
20
|
+
}) => string;
|
|
21
|
+
}) => TDev) | TDev;
|
|
22
|
+
/** production env vars */
|
|
23
|
+
production: TProd;
|
|
24
|
+
/** env var → package name, for version resolution by env-update */
|
|
25
|
+
deps?: Record<string, string>;
|
|
26
|
+
/** in dev mode, refresh values sourced from managed .env.development without clobbering explicit overrides */
|
|
27
|
+
freshDev?: boolean;
|
|
28
|
+
};
|
|
29
|
+
type Resolved<T extends Record<string, number>> = {
|
|
30
|
+
[K in keyof T]: number;
|
|
31
|
+
};
|
|
32
|
+
type AllKeys<TBase, TDev, TProd> = (keyof TBase & string) | (keyof TDev & string) | (keyof TProd & string) | 'NODE_ENV';
|
|
33
|
+
type EnvMap<TBase, TDev, TProd> = {
|
|
34
|
+
[K in AllKeys<TBase, TDev, TProd>]: string;
|
|
35
|
+
};
|
|
36
|
+
type EnvResult<TPorts extends Record<string, number>, TBase extends Record<string, EnvValue>, TDev extends Record<string, EnvValue>, TProd extends Record<string, EnvValue>> = {
|
|
37
|
+
env: EnvMap<TBase, TDev, TProd>;
|
|
38
|
+
/** server-only env — throws if accessed on client (typeof window !== 'undefined') */
|
|
39
|
+
server: EnvMap<TBase, TDev, TProd>;
|
|
40
|
+
ports: Resolved<TPorts>;
|
|
41
|
+
portOffset: number;
|
|
42
|
+
/** raw config for tooling (env-update, generate) */
|
|
43
|
+
config: EnvConfig<TPorts, TBase, TDev, TProd>;
|
|
44
|
+
/** base + production merged — the full var registry for CI/docker sync */
|
|
45
|
+
production: Record<string, string | Expected>;
|
|
46
|
+
/** resolved package versions from deps config (e.g. { ZERO_VERSION: '1.2.0' }) */
|
|
47
|
+
versions: Record<string, string>;
|
|
48
|
+
/** set env vars into process.env (skip keys already set) */
|
|
49
|
+
apply: () => void;
|
|
50
|
+
/** write .env.development from current env (no-op if PORT_OFFSET is set) */
|
|
51
|
+
writeDotEnv: () => void;
|
|
52
|
+
/** import.meta.main handler: writes .env.development then runs argv command */
|
|
53
|
+
run: () => Promise<void>;
|
|
54
|
+
};
|
|
55
|
+
export declare function createEnv<TPorts extends Record<string, number>, TBase extends Record<string, EnvValue>, TDev extends Record<string, EnvValue>, TProd extends Record<string, EnvValue>>(config: EnvConfig<TPorts, TBase, TDev, TProd>): EnvResult<TPorts, TBase, TDev, TProd>;
|
|
56
|
+
export {};
|
|
57
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
function getFs() {
|
|
2
|
+
const getBuiltinModule = process.getBuiltinModule;
|
|
3
|
+
if (typeof getBuiltinModule !== 'function') {
|
|
4
|
+
return null;
|
|
5
|
+
}
|
|
6
|
+
return getBuiltinModule('node:fs') ?? null;
|
|
7
|
+
}
|
|
8
|
+
// --- ensureEnv (inlined from @o/helpers, zero deps) ---
|
|
9
|
+
export function ensureEnv(name, defaultValue) {
|
|
10
|
+
if (typeof process.env[name] === 'string') {
|
|
11
|
+
return process.env[name] || defaultValue || '';
|
|
12
|
+
}
|
|
13
|
+
if (defaultValue !== undefined) {
|
|
14
|
+
return defaultValue;
|
|
15
|
+
}
|
|
16
|
+
if (process.env.ALLOW_MISSING_ENV) {
|
|
17
|
+
return '';
|
|
18
|
+
}
|
|
19
|
+
if (process.env.NODE_ENV === 'development' || process.env.NODE_ENV === 'test') {
|
|
20
|
+
if (typeof defaultValue === 'undefined') {
|
|
21
|
+
console.warn(` - missing env ${name}`);
|
|
22
|
+
}
|
|
23
|
+
return '';
|
|
24
|
+
}
|
|
25
|
+
throw new Error(`Environment variable ${name} not set.`);
|
|
26
|
+
}
|
|
27
|
+
// --- expected sentinel ---
|
|
28
|
+
/** marker for env vars that must be provided at runtime */
|
|
29
|
+
export const expected = Symbol.for('take-out/env/expected');
|
|
30
|
+
// --- createEnv ---
|
|
31
|
+
const validEnvs = { development: true, production: true };
|
|
32
|
+
const managedDotEnvHeader = '# managed by src/env.ts!';
|
|
33
|
+
function readManagedDotEnv(dotEnvPath) {
|
|
34
|
+
const fs = getFs();
|
|
35
|
+
if (!fs || !fs.existsSync(dotEnvPath)) {
|
|
36
|
+
return {};
|
|
37
|
+
}
|
|
38
|
+
const content = fs.readFileSync(dotEnvPath, 'utf-8');
|
|
39
|
+
if (!content.startsWith(`${managedDotEnvHeader}\n`)) {
|
|
40
|
+
return {};
|
|
41
|
+
}
|
|
42
|
+
const values = {};
|
|
43
|
+
for (const line of content.split('\n')) {
|
|
44
|
+
if (!line || line.startsWith('#')) {
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
const equalsIndex = line.indexOf('=');
|
|
48
|
+
if (equalsIndex <= 0) {
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
const key = line.slice(0, equalsIndex);
|
|
52
|
+
const rawValue = line.slice(equalsIndex + 1);
|
|
53
|
+
// unquoted values are literal, quoted values just strip quotes
|
|
54
|
+
values[key] =
|
|
55
|
+
rawValue.startsWith('"') && rawValue.endsWith('"')
|
|
56
|
+
? rawValue.slice(1, -1)
|
|
57
|
+
: rawValue;
|
|
58
|
+
}
|
|
59
|
+
return values;
|
|
60
|
+
}
|
|
61
|
+
export function createEnv(config) {
|
|
62
|
+
const portOffset = Number(process.env.PORT_OFFSET || 0);
|
|
63
|
+
// compute ports with offset
|
|
64
|
+
const resolvedPorts = {};
|
|
65
|
+
for (const [key, base] of Object.entries(config.ports)) {
|
|
66
|
+
resolvedPorts[key] = base + portOffset;
|
|
67
|
+
}
|
|
68
|
+
const ports = resolvedPorts;
|
|
69
|
+
// allow callers (like test/release helpers) to resolve env values for a
|
|
70
|
+
// target mode without inheriting the parent process's NODE_ENV branch.
|
|
71
|
+
const explicitMode = process.env.TAKEOUT_ENV_MODE;
|
|
72
|
+
const rawEnv = explicitMode || process.env.NODE_ENV || 'development';
|
|
73
|
+
const NODE_ENV = (rawEnv === 'test' ? 'development' : rawEnv);
|
|
74
|
+
if (!validEnvs[NODE_ENV]) {
|
|
75
|
+
throw new Error(`invalid NODE_ENV: ${rawEnv}`);
|
|
76
|
+
}
|
|
77
|
+
// postgres connection string helper
|
|
78
|
+
const pgPort = ports.postgres;
|
|
79
|
+
const pgUrl = (opts) => {
|
|
80
|
+
const user = opts?.user || 'user';
|
|
81
|
+
const password = opts?.password || 'password';
|
|
82
|
+
const database = opts?.database || 'postgres';
|
|
83
|
+
const port = pgPort || 5432;
|
|
84
|
+
return `postgresql://${user}:${password}@127.0.0.1:${port}/${database}`;
|
|
85
|
+
};
|
|
86
|
+
// resolve mode-specific env
|
|
87
|
+
const modeConfig = config[NODE_ENV];
|
|
88
|
+
const modeEnv = typeof modeConfig === 'function'
|
|
89
|
+
? modeConfig({ ports, portOffset, pgUrl })
|
|
90
|
+
: modeConfig;
|
|
91
|
+
const modeKeys = new Set(Object.keys(modeEnv || {}));
|
|
92
|
+
const managedDevEnv = NODE_ENV === 'development' && config.freshDev
|
|
93
|
+
? readManagedDotEnv('.env.development')
|
|
94
|
+
: {};
|
|
95
|
+
const refreshedKeys = new Set();
|
|
96
|
+
// in dev mode with freshDev, refresh only values that came from our managed
|
|
97
|
+
// .env.development file so computed defaults win over stale inherited values
|
|
98
|
+
// without clobbering explicit overrides from the parent process. resolution
|
|
99
|
+
// treats refreshed keys as unset; process.env itself is never mutated here —
|
|
100
|
+
// only apply() writes to it. deleting from process.env broke the built vite
|
|
101
|
+
// SSR server: apply()'s VITE_ENVIRONMENT guard constant-folds it to a no-op
|
|
102
|
+
// there, so cleared vars (e.g. BETTER_AUTH_SECRET read directly by
|
|
103
|
+
// better-auth) were never restored.
|
|
104
|
+
if (NODE_ENV === 'development' && config.freshDev && modeEnv) {
|
|
105
|
+
for (const key of Object.keys(modeEnv)) {
|
|
106
|
+
const envVal = process.env[key];
|
|
107
|
+
if (envVal !== undefined && managedDevEnv[key] === envVal) {
|
|
108
|
+
refreshedKeys.add(key);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
// merge base + mode, mode wins
|
|
113
|
+
const merged = {
|
|
114
|
+
...config.base,
|
|
115
|
+
...modeEnv,
|
|
116
|
+
};
|
|
117
|
+
// resolve expected values and build final env
|
|
118
|
+
const resolvedEnv = { NODE_ENV };
|
|
119
|
+
for (const [key, val] of Object.entries(merged)) {
|
|
120
|
+
if (val === expected) {
|
|
121
|
+
const envVal = refreshedKeys.has(key) ? undefined : process.env[key];
|
|
122
|
+
if (envVal !== undefined && envVal !== '') {
|
|
123
|
+
resolvedEnv[key] = envVal;
|
|
124
|
+
}
|
|
125
|
+
else if (NODE_ENV === 'production' && !process.env.ALLOW_MISSING_ENV) {
|
|
126
|
+
throw new Error(`expected env var ${key} to be set in production`);
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
console.warn(` - expected env ${key} not set`);
|
|
130
|
+
resolvedEnv[key] = '';
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
// prefer process.env over config defaults, except when an explicit mode
|
|
135
|
+
// override is active. In that case, mode-computed keys must resolve from
|
|
136
|
+
// the requested mode rather than inherited parent-process values.
|
|
137
|
+
const envVal = refreshedKeys.has(key) ? undefined : process.env[key];
|
|
138
|
+
resolvedEnv[key] =
|
|
139
|
+
explicitMode && modeKeys.has(key)
|
|
140
|
+
? val
|
|
141
|
+
: envVal !== undefined && envVal !== ''
|
|
142
|
+
? envVal
|
|
143
|
+
: val;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
const env = resolvedEnv;
|
|
147
|
+
function apply() {
|
|
148
|
+
// don't overwrite when running inside vite SSR (VITE_ENVIRONMENT is set)
|
|
149
|
+
if (process.env.VITE_ENVIRONMENT)
|
|
150
|
+
return;
|
|
151
|
+
for (const [key, val] of Object.entries(env)) {
|
|
152
|
+
if (explicitMode && modeKeys.has(key)) {
|
|
153
|
+
process.env[key] = val;
|
|
154
|
+
}
|
|
155
|
+
else if (process.env[key] === undefined || refreshedKeys.has(key)) {
|
|
156
|
+
process.env[key] = val;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
function writeDotEnv() {
|
|
161
|
+
const fs = getFs();
|
|
162
|
+
if (!fs) {
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
const dotEnvDevPath = '.env.development';
|
|
166
|
+
const dotEnvDev = Object.entries(env)
|
|
167
|
+
.map(([key, val]) => {
|
|
168
|
+
// bun's dotenv doesn't unescape \", so avoid quoting when possible
|
|
169
|
+
// unquoted values preserve quotes and backslashes correctly
|
|
170
|
+
// must quote if: starts with #, has leading/trailing whitespace, or contains newlines
|
|
171
|
+
const needsQuotes = val.startsWith('#') ||
|
|
172
|
+
val.startsWith(' ') ||
|
|
173
|
+
val.startsWith('\t') ||
|
|
174
|
+
val.endsWith(' ') ||
|
|
175
|
+
val.endsWith('\t') ||
|
|
176
|
+
val.includes('\n');
|
|
177
|
+
if (needsQuotes) {
|
|
178
|
+
// for quoted values, we have no good escape mechanism in bun's dotenv
|
|
179
|
+
// just quote it and hope there are no internal quotes
|
|
180
|
+
return `${key}="${val}"`;
|
|
181
|
+
}
|
|
182
|
+
return `${key}=${val}`;
|
|
183
|
+
})
|
|
184
|
+
.join('\n');
|
|
185
|
+
const content = `${managedDotEnvHeader}\n${dotEnvDev}`;
|
|
186
|
+
if (!fs.existsSync(dotEnvDevPath) ||
|
|
187
|
+
fs.readFileSync(dotEnvDevPath, 'utf-8') !== content) {
|
|
188
|
+
fs.writeFileSync(dotEnvDevPath, content, 'utf8');
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
async function run() {
|
|
192
|
+
// prevent RUN from leaking to child processes
|
|
193
|
+
delete process.env.RUN;
|
|
194
|
+
// write .env.development if default offset and dev mode
|
|
195
|
+
if (!process.env.VITE_ENVIRONMENT &&
|
|
196
|
+
!process.env.PORT_OFFSET &&
|
|
197
|
+
NODE_ENV === 'development') {
|
|
198
|
+
writeDotEnv();
|
|
199
|
+
}
|
|
200
|
+
// run command from argv (after --)
|
|
201
|
+
const sep = process.argv.indexOf('--');
|
|
202
|
+
const cmd = sep >= 0 ? process.argv.slice(sep + 1) : process.argv.slice(2);
|
|
203
|
+
if (cmd.length) {
|
|
204
|
+
const proc = Bun.spawn(cmd, {
|
|
205
|
+
env: process.env,
|
|
206
|
+
stdio: ['inherit', 'inherit', 'inherit'],
|
|
207
|
+
});
|
|
208
|
+
process.exitCode = await proc.exited;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
// server-only proxy — throws on client, reads live from process.env
|
|
212
|
+
// reading from process.env at access time prevents build-time inlining
|
|
213
|
+
// and ensures runtime env overrides take effect
|
|
214
|
+
const isClient = () => typeof window !== 'undefined';
|
|
215
|
+
const server = new Proxy(env, {
|
|
216
|
+
get(target, prop, receiver) {
|
|
217
|
+
if (typeof prop === 'string' && isClient()) {
|
|
218
|
+
throw new Error(`server env var ${prop} accessed on client`);
|
|
219
|
+
}
|
|
220
|
+
// prefer live process.env value over pre-resolved value
|
|
221
|
+
if (typeof prop === 'string' && process.env[prop] !== undefined) {
|
|
222
|
+
return process.env[prop];
|
|
223
|
+
}
|
|
224
|
+
return Reflect.get(target, prop, receiver);
|
|
225
|
+
},
|
|
226
|
+
ownKeys(target) {
|
|
227
|
+
if (isClient()) {
|
|
228
|
+
throw new Error('server env vars accessed on client');
|
|
229
|
+
}
|
|
230
|
+
return Reflect.ownKeys(target);
|
|
231
|
+
},
|
|
232
|
+
has(target, prop) {
|
|
233
|
+
if (isClient()) {
|
|
234
|
+
throw new Error('server env vars accessed on client');
|
|
235
|
+
}
|
|
236
|
+
return Reflect.has(target, prop);
|
|
237
|
+
},
|
|
238
|
+
getOwnPropertyDescriptor(target, prop) {
|
|
239
|
+
if (isClient()) {
|
|
240
|
+
throw new Error('server env vars accessed on client');
|
|
241
|
+
}
|
|
242
|
+
return Reflect.getOwnPropertyDescriptor(target, prop);
|
|
243
|
+
},
|
|
244
|
+
});
|
|
245
|
+
// base + production merged — the full var registry
|
|
246
|
+
const production = {
|
|
247
|
+
...config.base,
|
|
248
|
+
...config.production,
|
|
249
|
+
};
|
|
250
|
+
// resolve dep versions from package.json
|
|
251
|
+
const versions = {};
|
|
252
|
+
if (config.deps) {
|
|
253
|
+
try {
|
|
254
|
+
const fs = getFs();
|
|
255
|
+
if (fs) {
|
|
256
|
+
const pkg = JSON.parse(fs.readFileSync('package.json', 'utf-8'));
|
|
257
|
+
for (const [key, depName] of Object.entries(config.deps)) {
|
|
258
|
+
const version = pkg.dependencies?.[depName]?.replace(/^[\^~]/, '');
|
|
259
|
+
if (version) {
|
|
260
|
+
versions[key] = version;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
catch { }
|
|
266
|
+
}
|
|
267
|
+
// auto-apply on creation (matches existing behavior where importing env.ts has side effects)
|
|
268
|
+
apply();
|
|
269
|
+
return {
|
|
270
|
+
env,
|
|
271
|
+
server,
|
|
272
|
+
ports,
|
|
273
|
+
portOffset,
|
|
274
|
+
config,
|
|
275
|
+
production,
|
|
276
|
+
versions,
|
|
277
|
+
apply,
|
|
278
|
+
writeDotEnv,
|
|
279
|
+
run,
|
|
280
|
+
};
|
|
281
|
+
}
|
|
282
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@o/env",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Typed environment configuration for browser-safe application modules and local tooling.
|
|
3
|
+
"version": "0.16.14",
|
|
4
|
+
"description": "Typed environment configuration for browser-safe application modules and local tooling.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
@@ -10,6 +10,36 @@
|
|
|
10
10
|
},
|
|
11
11
|
"type": "module",
|
|
12
12
|
"sideEffects": false,
|
|
13
|
+
"main": "dist/index.js",
|
|
14
|
+
"module": "dist/index.js",
|
|
15
|
+
"types": "./dist/index.d.ts",
|
|
16
|
+
"exports": {
|
|
17
|
+
"./package.json": "./package.json",
|
|
18
|
+
".": {
|
|
19
|
+
"types": "./dist/index.d.ts",
|
|
20
|
+
"import": "./dist/index.js",
|
|
21
|
+
"default": "./dist/index.js"
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
"files": [
|
|
25
|
+
"dist",
|
|
26
|
+
"LICENSE",
|
|
27
|
+
"README.md"
|
|
28
|
+
],
|
|
29
|
+
"scripts": {
|
|
30
|
+
"build": "rm -rf dist && tsc -p tsconfig.build.json",
|
|
31
|
+
"format": "oxfmt",
|
|
32
|
+
"format:check": "oxfmt --check",
|
|
33
|
+
"lint": "oxlint src",
|
|
34
|
+
"test": "bun test src",
|
|
35
|
+
"typecheck": "tsc --noEmit -p tsconfig.json"
|
|
36
|
+
},
|
|
37
|
+
"devDependencies": {
|
|
38
|
+
"@types/bun": "1.3.14",
|
|
39
|
+
"oxfmt": "0.28.0",
|
|
40
|
+
"oxlint": "1.43.0",
|
|
41
|
+
"typescript": "5.9.3"
|
|
42
|
+
},
|
|
13
43
|
"publishConfig": {
|
|
14
44
|
"access": "public"
|
|
15
45
|
}
|