@c9up/ream 0.1.12 → 0.1.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/dist/Application.d.ts +14 -0
- package/dist/Application.d.ts.map +1 -1
- package/dist/Application.js +39 -0
- package/dist/Application.js.map +1 -1
- package/dist/Ignitor.d.ts.map +1 -1
- package/dist/Ignitor.js +5 -25
- package/dist/Ignitor.js.map +1 -1
- package/dist/env/Env.d.ts +57 -0
- package/dist/env/Env.d.ts.map +1 -0
- package/dist/env/Env.js +52 -0
- package/dist/env/Env.js.map +1 -0
- package/dist/env/loadEnvFiles.d.ts +17 -0
- package/dist/env/loadEnvFiles.d.ts.map +1 -0
- package/dist/env/loadEnvFiles.js +40 -0
- package/dist/env/loadEnvFiles.js.map +1 -0
- package/dist/env/schema.d.ts +48 -0
- package/dist/env/schema.d.ts.map +1 -0
- package/dist/env/schema.js +130 -0
- package/dist/env/schema.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/events.win32-x64-msvc.node +0 -0
- package/index.win32-x64-msvc.node +0 -0
- package/package.json +1 -1
- package/scheduler.win32-x64-msvc.node +0 -0
- package/src/Application.ts +49 -0
- package/src/Ignitor.ts +5 -25
- package/src/env/Env.ts +91 -0
- package/src/env/loadEnvFiles.ts +40 -0
- package/src/env/schema.ts +163 -0
- package/src/index.ts +8 -0
package/dist/Application.d.ts
CHANGED
|
@@ -25,6 +25,20 @@ export declare class Application implements AppContext {
|
|
|
25
25
|
private _bootedHooks;
|
|
26
26
|
private _shutdownHooks;
|
|
27
27
|
constructor();
|
|
28
|
+
/** Set the project root. Called by the Ignitor from its constructor URL. */
|
|
29
|
+
setAppRoot(root: URL): void;
|
|
30
|
+
/** The project root directory URL, or `undefined` in inline/no-root mode. */
|
|
31
|
+
get appRoot(): URL | undefined;
|
|
32
|
+
/** Absolute path to a file/dir inside the project root. */
|
|
33
|
+
makePath(...paths: string[]): string;
|
|
34
|
+
/** Absolute path inside the `config/` directory. */
|
|
35
|
+
configPath(...paths: string[]): string;
|
|
36
|
+
/** Absolute path inside the `database/migrations/` directory. */
|
|
37
|
+
migrationsPath(...paths: string[]): string;
|
|
38
|
+
/** Absolute path inside the `tmp/` directory. */
|
|
39
|
+
tmpPath(...paths: string[]): string;
|
|
40
|
+
/** Absolute path inside the `public/` directory. */
|
|
41
|
+
publicPath(...paths: string[]): string;
|
|
28
42
|
/** Check if running in production. */
|
|
29
43
|
get inProduction(): boolean;
|
|
30
44
|
/** Check if running in development. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Application.d.ts","sourceRoot":"","sources":["../src/Application.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;
|
|
1
|
+
{"version":3,"file":"Application.d.ts","sourceRoot":"","sources":["../src/Application.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAGjE,qBAAa,WAAY,YAAW,UAAU;;IAC5C,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAA;IAC7B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAA;IAE5B,OAAO,CAAC,SAAS,CAAyB;IAC1C,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,aAAa,CAAwC;IAC7D,OAAO,CAAC,YAAY,CAAwC;IAC5D,OAAO,CAAC,cAAc,CAAwC;;IAa9D,4EAA4E;IAC5E,UAAU,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI;IAI3B,6EAA6E;IAC7E,IAAI,OAAO,IAAI,GAAG,GAAG,SAAS,CAE7B;IAED,2DAA2D;IAC3D,QAAQ,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM;IASpC,oDAAoD;IACpD,UAAU,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM;IAItC,iEAAiE;IACjE,cAAc,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM;IAI1C,iDAAiD;IACjD,OAAO,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM;IAInC,oDAAoD;IACpD,UAAU,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM;IAMtC,sCAAsC;IACtC,IAAI,YAAY,IAAI,OAAO,CAE1B;IAED,uCAAuC;IACvC,IAAI,KAAK,IAAI,OAAO,CAGnB;IAED,qCAAqC;IACrC,IAAI,MAAM,IAAI,OAAO,CAEpB;IAED,+BAA+B;IAC/B,IAAI,YAAY,IAAI,OAAO,CAE1B;IAID;;;OAGG;IACH,OAAO,CAAC,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI;IAInD;;;OAGG;IACH,MAAM,CAAC,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI;IAsBlD;;;;;;OAMG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAK1D;;;OAGG;IACH,QAAQ,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAMhF;;;OAGG;IACG,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAOhC,oCAAoC;IACpC,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI;IAO1C,gEAAgE;IAC1D,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAuB3B;;;;OAIG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAgC/B,gCAAgC;IAChC,UAAU,CAAC,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI;IAItD,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,IAAI,aAAa,IAAI,MAAM,CAE1B;CACF"}
|
package/dist/Application.js
CHANGED
|
@@ -12,12 +12,15 @@
|
|
|
12
12
|
*
|
|
13
13
|
* @implements FR17, FR20
|
|
14
14
|
*/
|
|
15
|
+
import { join } from 'node:path';
|
|
16
|
+
import { fileURLToPath } from 'node:url';
|
|
15
17
|
import { ConfigStore } from './ConfigLoader.js';
|
|
16
18
|
import { Container } from './container/Container.js';
|
|
17
19
|
import { callProviderPhase } from './Provider.js';
|
|
18
20
|
export class Application {
|
|
19
21
|
container;
|
|
20
22
|
config;
|
|
23
|
+
#appRoot;
|
|
21
24
|
providers = [];
|
|
22
25
|
_booted = false;
|
|
23
26
|
_bootingHooks = [];
|
|
@@ -27,6 +30,42 @@ export class Application {
|
|
|
27
30
|
this.container = new Container();
|
|
28
31
|
this.config = new ConfigStore();
|
|
29
32
|
}
|
|
33
|
+
// ─── Paths ────────────────────────────────────────────────
|
|
34
|
+
// AdonisJS-style path helpers — resolve against the project root passed to
|
|
35
|
+
// the Ignitor (`new Ignitor(new URL('../', import.meta.url))`). App code uses
|
|
36
|
+
// these instead of recomputing `dirname(fileURLToPath(import.meta.url))` per
|
|
37
|
+
// file: `app.configPath('shield.ts')`, `app.migrationsPath()`, …
|
|
38
|
+
/** Set the project root. Called by the Ignitor from its constructor URL. */
|
|
39
|
+
setAppRoot(root) {
|
|
40
|
+
this.#appRoot = root;
|
|
41
|
+
}
|
|
42
|
+
/** The project root directory URL, or `undefined` in inline/no-root mode. */
|
|
43
|
+
get appRoot() {
|
|
44
|
+
return this.#appRoot;
|
|
45
|
+
}
|
|
46
|
+
/** Absolute path to a file/dir inside the project root. */
|
|
47
|
+
makePath(...paths) {
|
|
48
|
+
if (!this.#appRoot) {
|
|
49
|
+
throw new Error('Application.makePath: app root is not set — construct the Ignitor with `new Ignitor(new URL("../", import.meta.url))`.');
|
|
50
|
+
}
|
|
51
|
+
return join(fileURLToPath(this.#appRoot), ...paths);
|
|
52
|
+
}
|
|
53
|
+
/** Absolute path inside the `config/` directory. */
|
|
54
|
+
configPath(...paths) {
|
|
55
|
+
return this.makePath('config', ...paths);
|
|
56
|
+
}
|
|
57
|
+
/** Absolute path inside the `database/migrations/` directory. */
|
|
58
|
+
migrationsPath(...paths) {
|
|
59
|
+
return this.makePath('database', 'migrations', ...paths);
|
|
60
|
+
}
|
|
61
|
+
/** Absolute path inside the `tmp/` directory. */
|
|
62
|
+
tmpPath(...paths) {
|
|
63
|
+
return this.makePath('tmp', ...paths);
|
|
64
|
+
}
|
|
65
|
+
/** Absolute path inside the `public/` directory. */
|
|
66
|
+
publicPath(...paths) {
|
|
67
|
+
return this.makePath('public', ...paths);
|
|
68
|
+
}
|
|
30
69
|
// ─── Environment ──────────────────────────────────────────
|
|
31
70
|
/** Check if running in production. */
|
|
32
71
|
get inProduction() {
|
package/dist/Application.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Application.js","sourceRoot":"","sources":["../src/Application.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AAEpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAEjD,MAAM,OAAO,WAAW;IACb,SAAS,CAAW;IACpB,MAAM,CAAa;
|
|
1
|
+
{"version":3,"file":"Application.js","sourceRoot":"","sources":["../src/Application.ts"],"names":[],"mappings":"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"}
|
package/dist/Ignitor.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Ignitor.d.ts","sourceRoot":"","sources":["../src/Ignitor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;
|
|
1
|
+
{"version":3,"file":"Ignitor.d.ts","sourceRoot":"","sources":["../src/Ignitor.ts"],"names":[],"mappings":"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"}
|
package/dist/Ignitor.js
CHANGED
|
@@ -12,11 +12,9 @@
|
|
|
12
12
|
*
|
|
13
13
|
* @implements FR17, FR20, FR23
|
|
14
14
|
*/
|
|
15
|
-
import { readFileSync } from 'node:fs';
|
|
16
|
-
import { fileURLToPath } from 'node:url';
|
|
17
|
-
import { parseEnv } from 'node:util';
|
|
18
15
|
import { Application } from './Application.js';
|
|
19
16
|
import { ErrorBoundary } from './ErrorBoundary.js';
|
|
17
|
+
import { loadEnvFiles } from './env/loadEnvFiles.js';
|
|
20
18
|
import { ReamError } from './errors/ReamError.js';
|
|
21
19
|
import { startHotReload } from './HotReload.js';
|
|
22
20
|
import { createHttpKernel } from './HttpKernel.js';
|
|
@@ -91,6 +89,9 @@ export class Ignitor {
|
|
|
91
89
|
if (this.appRoot) {
|
|
92
90
|
const root = this.appRoot;
|
|
93
91
|
this.app.container.singleton('appRoot', () => root);
|
|
92
|
+
// Also expose it on the Application for the AdonisJS-style path helpers
|
|
93
|
+
// (`app.makePath`, `app.configPath`, `app.migrationsPath`, …).
|
|
94
|
+
this.app.setAppRoot(root);
|
|
94
95
|
}
|
|
95
96
|
// Set service singletons so route/kernel files can import them
|
|
96
97
|
setApp(this.app);
|
|
@@ -209,28 +210,7 @@ export class Ignitor {
|
|
|
209
210
|
#loadEnvironmentFiles() {
|
|
210
211
|
if (!this.appRoot)
|
|
211
212
|
return;
|
|
212
|
-
|
|
213
|
-
// Most-specific first; with "existing wins", earlier files take precedence.
|
|
214
|
-
const files = [
|
|
215
|
-
nodeEnv ? `.env.${nodeEnv}.local` : null,
|
|
216
|
-
this.environment === 'test' ? null : '.env.local',
|
|
217
|
-
nodeEnv ? `.env.${nodeEnv}` : null,
|
|
218
|
-
'.env',
|
|
219
|
-
].filter((name) => name !== null);
|
|
220
|
-
for (const name of files) {
|
|
221
|
-
let contents;
|
|
222
|
-
try {
|
|
223
|
-
contents = readFileSync(fileURLToPath(new URL(name, this.appRoot)), 'utf8');
|
|
224
|
-
}
|
|
225
|
-
catch {
|
|
226
|
-
continue; // file absent — nothing to load
|
|
227
|
-
}
|
|
228
|
-
for (const [key, value] of Object.entries(parseEnv(contents))) {
|
|
229
|
-
if (typeof value === 'string' && process.env[key] === undefined) {
|
|
230
|
-
process.env[key] = value;
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
}
|
|
213
|
+
loadEnvFiles(this.appRoot, { skipEnvLocal: this.environment === 'test' });
|
|
234
214
|
}
|
|
235
215
|
async phaseRegister() {
|
|
236
216
|
// Auto-load config/*.ts files into app.config
|
package/dist/Ignitor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Ignitor.js","sourceRoot":"","sources":["../src/Ignitor.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Ignitor.js","sourceRoot":"","sources":["../src/Ignitor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { type SchemaNode } from './schema.js';
|
|
2
|
+
/**
|
|
3
|
+
* Type-safe environment access — mirrors `@adonisjs/core/env`:
|
|
4
|
+
*
|
|
5
|
+
* // start/env.ts
|
|
6
|
+
* import { Env } from '@c9up/ream'
|
|
7
|
+
* export default await Env.create(new URL('../', import.meta.url), {
|
|
8
|
+
* HOST: Env.schema.string({ format: 'host' }),
|
|
9
|
+
* PORT: Env.schema.number(),
|
|
10
|
+
* NODE_ENV: Env.schema.enum(['development', 'production', 'test'] as const),
|
|
11
|
+
* DATABASE_URL: Env.schema.string.optional(),
|
|
12
|
+
* })
|
|
13
|
+
*
|
|
14
|
+
* // config/database.ts
|
|
15
|
+
* import env from '#start/env'
|
|
16
|
+
* const port = env.get('PORT') // typed `number`
|
|
17
|
+
*
|
|
18
|
+
* `create` loads the `.env*` files (so config read at import sees them, in EVERY
|
|
19
|
+
* flow incl. tests), validates each variable against the schema, and refuses to
|
|
20
|
+
* start with a descriptive error if a required variable is missing or invalid.
|
|
21
|
+
*/
|
|
22
|
+
/** The validated output type of a single schema node. */
|
|
23
|
+
type EnvOutput<N> = N extends SchemaNode<infer T> ? T : never;
|
|
24
|
+
/** Map a schema object to its `{ key: validatedType }` record. */
|
|
25
|
+
type EnvRecord<S extends Record<string, SchemaNode<unknown>>> = {
|
|
26
|
+
[K in keyof S]: EnvOutput<S[K]>;
|
|
27
|
+
};
|
|
28
|
+
/** Raised when one or more environment variables fail validation. */
|
|
29
|
+
export declare class EnvValidationException extends Error {
|
|
30
|
+
/** Human-readable, newline-joined list of every failure (cf. Adonis `error.help`). */
|
|
31
|
+
readonly help: string;
|
|
32
|
+
constructor(failures: string[]);
|
|
33
|
+
}
|
|
34
|
+
export declare class Env<Values extends Record<string, unknown>> {
|
|
35
|
+
#private;
|
|
36
|
+
/** The validation schema surface — `Env.schema.string()`, `.number()`, … */
|
|
37
|
+
static readonly schema: {
|
|
38
|
+
string: ((options?: import("./schema.js").StringOptions) => import("./schema.js").RequiredNode<string>) & {
|
|
39
|
+
optional(options?: import("./schema.js").StringOptions): SchemaNode<string | undefined>;
|
|
40
|
+
};
|
|
41
|
+
number: () => import("./schema.js").RequiredNode<number>;
|
|
42
|
+
boolean: () => import("./schema.js").RequiredNode<boolean>;
|
|
43
|
+
enum: <V extends readonly string[]>(values: V) => import("./schema.js").RequiredNode<V[number]>;
|
|
44
|
+
};
|
|
45
|
+
private constructor();
|
|
46
|
+
/**
|
|
47
|
+
* Load `.env*` files, validate `process.env` against `schema`, and return a
|
|
48
|
+
* typed `Env`. Throws {@link EnvValidationException} (aggregating every
|
|
49
|
+
* failure) if validation fails.
|
|
50
|
+
*/
|
|
51
|
+
static create<S extends Record<string, SchemaNode<unknown>>>(appRoot: URL, schema: S): Promise<Env<EnvRecord<S>>>;
|
|
52
|
+
/** Read a validated variable. Required keys are always present; optional keys may be `undefined`. */
|
|
53
|
+
get<K extends keyof Values>(key: K): Values[K];
|
|
54
|
+
get<K extends keyof Values>(key: K, fallback: Values[K]): Values[K];
|
|
55
|
+
}
|
|
56
|
+
export {};
|
|
57
|
+
//# sourceMappingURL=Env.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Env.d.ts","sourceRoot":"","sources":["../../src/env/Env.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,UAAU,EAAU,MAAM,aAAa,CAAA;AAErD;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,yDAAyD;AACzD,KAAK,SAAS,CAAC,CAAC,IAAI,CAAC,SAAS,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;AAE7D,kEAAkE;AAClE,KAAK,SAAS,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI;KAC7D,CAAC,IAAI,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAChC,CAAA;AAED,qEAAqE;AACrE,qBAAa,sBAAuB,SAAQ,KAAK;IAC/C,sFAAsF;IACtF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;gBACT,QAAQ,EAAE,MAAM,EAAE;CAK/B;AAED,qBAAa,GAAG,CAAC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;IACrD,4EAA4E;IAC5E,MAAM,CAAC,QAAQ,CAAC,MAAM;;;;;;;MAAS;IAI/B,OAAO;IAIP;;;;OAIG;WACU,MAAM,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,EAC/D,OAAO,EAAE,GAAG,EACZ,MAAM,EAAE,CAAC,GACR,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IAqB7B,qGAAqG;IACrG,GAAG,CAAC,CAAC,SAAS,MAAM,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;IAC9C,GAAG,CAAC,CAAC,SAAS,MAAM,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;CAMpE"}
|
package/dist/env/Env.js
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { loadEnvFiles } from './loadEnvFiles.js';
|
|
2
|
+
import { schema } from './schema.js';
|
|
3
|
+
/** Raised when one or more environment variables fail validation. */
|
|
4
|
+
export class EnvValidationException extends Error {
|
|
5
|
+
/** Human-readable, newline-joined list of every failure (cf. Adonis `error.help`). */
|
|
6
|
+
help;
|
|
7
|
+
constructor(failures) {
|
|
8
|
+
super('Environment variables validation failed');
|
|
9
|
+
this.name = 'E_INVALID_ENV_VARIABLES';
|
|
10
|
+
this.help = failures.join('\n');
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export class Env {
|
|
14
|
+
/** The validation schema surface — `Env.schema.string()`, `.number()`, … */
|
|
15
|
+
static schema = schema;
|
|
16
|
+
#values;
|
|
17
|
+
constructor(values) {
|
|
18
|
+
this.#values = values;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Load `.env*` files, validate `process.env` against `schema`, and return a
|
|
22
|
+
* typed `Env`. Throws {@link EnvValidationException} (aggregating every
|
|
23
|
+
* failure) if validation fails.
|
|
24
|
+
*/
|
|
25
|
+
static async create(appRoot, schema) {
|
|
26
|
+
loadEnvFiles(appRoot, { skipEnvLocal: process.env.NODE_ENV === 'test' });
|
|
27
|
+
const failures = [];
|
|
28
|
+
const collected = {};
|
|
29
|
+
for (const key of Object.keys(schema)) {
|
|
30
|
+
try {
|
|
31
|
+
collected[key] = schema[key].validate(key, process.env[key]);
|
|
32
|
+
}
|
|
33
|
+
catch (err) {
|
|
34
|
+
failures.push(err instanceof Error ? err.message : String(err));
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
if (failures.length > 0)
|
|
38
|
+
throw new EnvValidationException(failures);
|
|
39
|
+
// The ONE isolated type-erasure boundary (the same place zod / @adonisjs/env
|
|
40
|
+
// cast internally): every entry of `collected` was produced by its schema
|
|
41
|
+
// node's validator, so the object structurally IS `EnvRecord<S>` — TS just
|
|
42
|
+
// can't carry that proof through the dynamic `Object.keys` loop. Load-bearing.
|
|
43
|
+
return new Env(collected);
|
|
44
|
+
}
|
|
45
|
+
get(key, fallback) {
|
|
46
|
+
const value = this.#values[key];
|
|
47
|
+
if (value === undefined && fallback !== undefined)
|
|
48
|
+
return fallback;
|
|
49
|
+
return value;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=Env.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Env.js","sourceRoot":"","sources":["../../src/env/Env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAmB,MAAM,EAAE,MAAM,aAAa,CAAA;AA+BrD,qEAAqE;AACrE,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IAC/C,sFAAsF;IAC7E,IAAI,CAAQ;IACrB,YAAY,QAAkB;QAC5B,KAAK,CAAC,yCAAyC,CAAC,CAAA;QAChD,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAA;QACrC,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACjC,CAAC;CACF;AAED,MAAM,OAAO,GAAG;IACd,4EAA4E;IAC5E,MAAM,CAAU,MAAM,GAAG,MAAM,CAAA;IAEtB,OAAO,CAAQ;IAExB,YAAoB,MAAc;QAChC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAA;IACvB,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,KAAK,CAAC,MAAM,CACjB,OAAY,EACZ,MAAS;QAET,YAAY,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC,CAAA;QAExE,MAAM,QAAQ,GAAa,EAAE,CAAA;QAC7B,MAAM,SAAS,GAA4B,EAAE,CAAA;QAC7C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACtC,IAAI,CAAC;gBACH,SAAS,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;YAC9D,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,QAAQ,CAAC,IAAI,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;YACjE,CAAC;QACH,CAAC;QACD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM,IAAI,sBAAsB,CAAC,QAAQ,CAAC,CAAA;QAEnE,6EAA6E;QAC7E,0EAA0E;QAC1E,2EAA2E;QAC3E,+EAA+E;QAC/E,OAAO,IAAI,GAAG,CAAC,SAAyB,CAAC,CAAA;IAC3C,CAAC;IAKD,GAAG,CAAyB,GAAM,EAAE,QAAoB;QACtD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QAC/B,IAAI,KAAK,KAAK,SAAS,IAAI,QAAQ,KAAK,SAAS;YAAE,OAAO,QAAQ,CAAA;QAClE,OAAO,KAAK,CAAA;IACd,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Load `.env` files into `process.env` — the shared primitive behind both the
|
|
3
|
+
* Ignitor (HTTP/console boot) and `Env.create()` (config/test flow), mirroring
|
|
4
|
+
* AdonisJS which loads env in every flow.
|
|
5
|
+
*
|
|
6
|
+
* Order is most-specific-first and "already-present wins", so the shell / CI
|
|
7
|
+
* always overrides the files. Missing files are skipped silently. Uses Node's
|
|
8
|
+
* built-in parser — no dependency.
|
|
9
|
+
*
|
|
10
|
+
* @param appRoot Directory URL the `.env*` files are resolved against.
|
|
11
|
+
* @param options.skipEnvLocal Skip `.env.local` (the test flow does, so a
|
|
12
|
+
* developer's local overrides don't leak into tests).
|
|
13
|
+
*/
|
|
14
|
+
export declare function loadEnvFiles(appRoot: URL, options?: {
|
|
15
|
+
skipEnvLocal?: boolean;
|
|
16
|
+
}): void;
|
|
17
|
+
//# sourceMappingURL=loadEnvFiles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loadEnvFiles.d.ts","sourceRoot":"","sources":["../../src/env/loadEnvFiles.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,GAAE;IAAE,YAAY,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,IAAI,CAsBzF"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs';
|
|
2
|
+
import { fileURLToPath } from 'node:url';
|
|
3
|
+
import { parseEnv } from 'node:util';
|
|
4
|
+
/**
|
|
5
|
+
* Load `.env` files into `process.env` — the shared primitive behind both the
|
|
6
|
+
* Ignitor (HTTP/console boot) and `Env.create()` (config/test flow), mirroring
|
|
7
|
+
* AdonisJS which loads env in every flow.
|
|
8
|
+
*
|
|
9
|
+
* Order is most-specific-first and "already-present wins", so the shell / CI
|
|
10
|
+
* always overrides the files. Missing files are skipped silently. Uses Node's
|
|
11
|
+
* built-in parser — no dependency.
|
|
12
|
+
*
|
|
13
|
+
* @param appRoot Directory URL the `.env*` files are resolved against.
|
|
14
|
+
* @param options.skipEnvLocal Skip `.env.local` (the test flow does, so a
|
|
15
|
+
* developer's local overrides don't leak into tests).
|
|
16
|
+
*/
|
|
17
|
+
export function loadEnvFiles(appRoot, options = {}) {
|
|
18
|
+
const nodeEnv = process.env.NODE_ENV;
|
|
19
|
+
const files = [
|
|
20
|
+
nodeEnv ? `.env.${nodeEnv}.local` : null,
|
|
21
|
+
options.skipEnvLocal ? null : '.env.local',
|
|
22
|
+
nodeEnv ? `.env.${nodeEnv}` : null,
|
|
23
|
+
'.env',
|
|
24
|
+
].filter((name) => name !== null);
|
|
25
|
+
for (const name of files) {
|
|
26
|
+
let contents;
|
|
27
|
+
try {
|
|
28
|
+
contents = readFileSync(fileURLToPath(new URL(name, appRoot)), 'utf8');
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
continue; // file absent — nothing to load
|
|
32
|
+
}
|
|
33
|
+
for (const [key, value] of Object.entries(parseEnv(contents))) {
|
|
34
|
+
if (typeof value === 'string' && process.env[key] === undefined) {
|
|
35
|
+
process.env[key] = value;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=loadEnvFiles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loadEnvFiles.js","sourceRoot":"","sources":["../../src/env/loadEnvFiles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEpC;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,YAAY,CAAC,OAAY,EAAE,UAAsC,EAAE;IACjF,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAA;IACpC,MAAM,KAAK,GAAG;QACZ,OAAO,CAAC,CAAC,CAAC,QAAQ,OAAO,QAAQ,CAAC,CAAC,CAAC,IAAI;QACxC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY;QAC1C,OAAO,CAAC,CAAC,CAAC,QAAQ,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI;QAClC,MAAM;KACP,CAAC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,CAAA;IAEjD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,QAAgB,CAAA;QACpB,IAAI,CAAC;YACH,QAAQ,GAAG,YAAY,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;QACxE,CAAC;QAAC,MAAM,CAAC;YACP,SAAQ,CAAC,gCAAgC;QAC3C,CAAC;QACD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;YAC9D,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE,CAAC;gBAChE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;YAC1B,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Env validation schema — mirrors `@adonisjs/core/env`'s `Env.schema` surface:
|
|
3
|
+
*
|
|
4
|
+
* Env.schema.string({ format: 'host' })
|
|
5
|
+
* Env.schema.number()
|
|
6
|
+
* Env.schema.boolean()
|
|
7
|
+
* Env.schema.enum(['development', 'production', 'test'] as const)
|
|
8
|
+
* Env.schema.string.optional() // shortcut form
|
|
9
|
+
* Env.schema.enum([...]).optional() // node form
|
|
10
|
+
*
|
|
11
|
+
* Each node validates + coerces a raw `process.env` string into its typed
|
|
12
|
+
* value (or throws {@link EnvVarError}); `.optional()` accepts an absent/empty
|
|
13
|
+
* value as `undefined`.
|
|
14
|
+
*/
|
|
15
|
+
/** A single failed-variable validation — collected by `Env.create`. */
|
|
16
|
+
export declare class EnvVarError extends Error {
|
|
17
|
+
constructor(message: string);
|
|
18
|
+
}
|
|
19
|
+
/** A validator: parse + coerce a raw env value (or `undefined`) into `T`. */
|
|
20
|
+
export interface SchemaNode<T> {
|
|
21
|
+
validate(name: string, value: string | undefined): T;
|
|
22
|
+
}
|
|
23
|
+
/** A required node that can be turned optional — `.optional()` widens `T` to `T | undefined`. */
|
|
24
|
+
export interface RequiredNode<T> extends SchemaNode<T> {
|
|
25
|
+
optional(): SchemaNode<T | undefined>;
|
|
26
|
+
}
|
|
27
|
+
export interface StringOptions {
|
|
28
|
+
/** Validate the string against a known format. */
|
|
29
|
+
format?: 'host' | 'url' | 'email';
|
|
30
|
+
/** For `format: 'url'` — require a TLD (default true). */
|
|
31
|
+
tld?: boolean;
|
|
32
|
+
/** For `format: 'url'` — require a protocol (default true). */
|
|
33
|
+
protocol?: boolean;
|
|
34
|
+
}
|
|
35
|
+
declare function number(): RequiredNode<number>;
|
|
36
|
+
declare function boolean(): RequiredNode<boolean>;
|
|
37
|
+
declare function enumNode<V extends readonly string[]>(values: V): RequiredNode<V[number]>;
|
|
38
|
+
/** The `Env.schema` surface. */
|
|
39
|
+
export declare const schema: {
|
|
40
|
+
string: ((options?: StringOptions) => RequiredNode<string>) & {
|
|
41
|
+
optional(options?: StringOptions): SchemaNode<string | undefined>;
|
|
42
|
+
};
|
|
43
|
+
number: typeof number;
|
|
44
|
+
boolean: typeof boolean;
|
|
45
|
+
enum: typeof enumNode;
|
|
46
|
+
};
|
|
47
|
+
export {};
|
|
48
|
+
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/env/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,uEAAuE;AACvE,qBAAa,WAAY,SAAQ,KAAK;gBACxB,OAAO,EAAE,MAAM;CAI5B;AAED,6EAA6E;AAC7E,MAAM,WAAW,UAAU,CAAC,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,CAAC,CAAA;CACrD;AAED,iGAAiG;AACjG,MAAM,WAAW,YAAY,CAAC,CAAC,CAAE,SAAQ,UAAU,CAAC,CAAC,CAAC;IACpD,QAAQ,IAAI,UAAU,CAAC,CAAC,GAAG,SAAS,CAAC,CAAA;CACtC;AAED,MAAM,WAAW,aAAa;IAC5B,kDAAkD;IAClD,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,OAAO,CAAA;IACjC,0DAA0D;IAC1D,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAoFD,iBAAS,MAAM,IAAI,YAAY,CAAC,MAAM,CAAC,CAQtC;AAED,iBAAS,OAAO,IAAI,YAAY,CAAC,OAAO,CAAC,CAQxC;AAED,iBAAS,QAAQ,CAAC,CAAC,SAAS,SAAS,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAUjF;AAED,gCAAgC;AAChC,eAAO,MAAM,MAAM;wBAvCO,aAAa,KAAK,YAAY,CAAC,MAAM,CAAC;2BAC3C,aAAa,GAAG,UAAU,CAAC,MAAM,GAAG,SAAS,CAAC;;;;;CA2ClE,CAAA"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Env validation schema — mirrors `@adonisjs/core/env`'s `Env.schema` surface:
|
|
3
|
+
*
|
|
4
|
+
* Env.schema.string({ format: 'host' })
|
|
5
|
+
* Env.schema.number()
|
|
6
|
+
* Env.schema.boolean()
|
|
7
|
+
* Env.schema.enum(['development', 'production', 'test'] as const)
|
|
8
|
+
* Env.schema.string.optional() // shortcut form
|
|
9
|
+
* Env.schema.enum([...]).optional() // node form
|
|
10
|
+
*
|
|
11
|
+
* Each node validates + coerces a raw `process.env` string into its typed
|
|
12
|
+
* value (or throws {@link EnvVarError}); `.optional()` accepts an absent/empty
|
|
13
|
+
* value as `undefined`.
|
|
14
|
+
*/
|
|
15
|
+
/** A single failed-variable validation — collected by `Env.create`. */
|
|
16
|
+
export class EnvVarError extends Error {
|
|
17
|
+
constructor(message) {
|
|
18
|
+
super(message);
|
|
19
|
+
this.name = 'EnvVarError';
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
const TRUE_VALUES = new Set(['true', '1']);
|
|
23
|
+
const FALSE_VALUES = new Set(['false', '0']);
|
|
24
|
+
/**
|
|
25
|
+
* Build a node from a `parse` that only ever sees a present, non-empty string.
|
|
26
|
+
* Required `validate` throws on absent/empty; `.optional()` returns `undefined`.
|
|
27
|
+
*/
|
|
28
|
+
function makeNode(parse) {
|
|
29
|
+
return {
|
|
30
|
+
validate(name, value) {
|
|
31
|
+
if (value === undefined || value === '') {
|
|
32
|
+
throw new EnvVarError(`Missing required environment variable "${name}"`);
|
|
33
|
+
}
|
|
34
|
+
return parse(name, value);
|
|
35
|
+
},
|
|
36
|
+
optional() {
|
|
37
|
+
return {
|
|
38
|
+
validate(name, value) {
|
|
39
|
+
if (value === undefined || value === '')
|
|
40
|
+
return undefined;
|
|
41
|
+
return parse(name, value);
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
function isHost(value) {
|
|
48
|
+
if (value === 'localhost')
|
|
49
|
+
return true;
|
|
50
|
+
if (/^(\d{1,3}\.){3}\d{1,3}$/.test(value)) {
|
|
51
|
+
return value.split('.').every((octet) => Number(octet) <= 255);
|
|
52
|
+
}
|
|
53
|
+
if (value.includes(':') && /^[0-9a-fA-F:]+$/.test(value))
|
|
54
|
+
return true; // loose IPv6
|
|
55
|
+
return /^(?!-)[A-Za-z0-9-]{1,63}(?<!-)(\.(?!-)[A-Za-z0-9-]{1,63}(?<!-))*$/.test(value);
|
|
56
|
+
}
|
|
57
|
+
function isUrl(value, options) {
|
|
58
|
+
const candidate = options.protocol === false && !value.includes('://') ? `http://${value}` : value;
|
|
59
|
+
let url;
|
|
60
|
+
try {
|
|
61
|
+
url = new URL(candidate);
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
if (options.tld !== false && !url.hostname.includes('.') && url.hostname !== 'localhost') {
|
|
67
|
+
return false;
|
|
68
|
+
}
|
|
69
|
+
return true;
|
|
70
|
+
}
|
|
71
|
+
function isEmail(value) {
|
|
72
|
+
return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value);
|
|
73
|
+
}
|
|
74
|
+
function checkFormat(name, value, options) {
|
|
75
|
+
if (!options?.format)
|
|
76
|
+
return;
|
|
77
|
+
const ok = options.format === 'host'
|
|
78
|
+
? isHost(value)
|
|
79
|
+
: options.format === 'url'
|
|
80
|
+
? isUrl(value, options)
|
|
81
|
+
: isEmail(value);
|
|
82
|
+
if (!ok) {
|
|
83
|
+
throw new EnvVarError(`Environment variable "${name}" must be a valid ${options.format}, got "${value}"`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
function stringParse(options) {
|
|
87
|
+
return (name, raw) => {
|
|
88
|
+
checkFormat(name, raw, options);
|
|
89
|
+
return raw;
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
/** `string(opts?)` is callable AND exposes `.optional(opts?)` — both Adonis forms. */
|
|
93
|
+
const string = Object.assign((options) => makeNode(stringParse(options)), {
|
|
94
|
+
optional: (options) => makeNode(stringParse(options)).optional(),
|
|
95
|
+
});
|
|
96
|
+
function number() {
|
|
97
|
+
return makeNode((name, raw) => {
|
|
98
|
+
const parsed = Number(raw);
|
|
99
|
+
if (Number.isNaN(parsed)) {
|
|
100
|
+
throw new EnvVarError(`Environment variable "${name}" must be a number, got "${raw}"`);
|
|
101
|
+
}
|
|
102
|
+
return parsed;
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
function boolean() {
|
|
106
|
+
return makeNode((name, raw) => {
|
|
107
|
+
if (TRUE_VALUES.has(raw))
|
|
108
|
+
return true;
|
|
109
|
+
if (FALSE_VALUES.has(raw))
|
|
110
|
+
return false;
|
|
111
|
+
throw new EnvVarError(`Environment variable "${name}" must be a boolean (true/false/1/0), got "${raw}"`);
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
function enumNode(values) {
|
|
115
|
+
return makeNode((name, raw) => {
|
|
116
|
+
const match = values.find((candidate) => candidate === raw);
|
|
117
|
+
if (match === undefined) {
|
|
118
|
+
throw new EnvVarError(`Environment variable "${name}" must be one of [${values.join(', ')}], got "${raw}"`);
|
|
119
|
+
}
|
|
120
|
+
return match;
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
/** The `Env.schema` surface. */
|
|
124
|
+
export const schema = {
|
|
125
|
+
string,
|
|
126
|
+
number,
|
|
127
|
+
boolean,
|
|
128
|
+
enum: enumNode,
|
|
129
|
+
};
|
|
130
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/env/schema.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -8,6 +8,9 @@ export { Application } from './Application.js';
|
|
|
8
8
|
export { ConfigStore, defineModuleConfig, env } from './ConfigLoader.js';
|
|
9
9
|
export { Container } from './container/Container.js';
|
|
10
10
|
export type { Binding, ServiceFactory, ServiceScope, ServiceToken } from './container/types.js';
|
|
11
|
+
export { Env, EnvValidationException } from './env/Env.js';
|
|
12
|
+
export { loadEnvFiles } from './env/loadEnvFiles.js';
|
|
13
|
+
export { EnvVarError, type RequiredNode, type SchemaNode, type StringOptions, } from './env/schema.js';
|
|
11
14
|
export { E_FORBIDDEN, E_HTTP_EXCEPTION, E_ROUTE_NOT_FOUND, E_ROW_NOT_FOUND, E_UNAUTHORIZED, E_VALIDATION_ERROR, Exception, ExceptionHandler, } from './http/Exception.js';
|
|
12
15
|
export type { Authorizer, AuthState, RouteInfo } from './http/HttpContext.js';
|
|
13
16
|
export { HttpContext } from './http/HttpContext.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,kBAAkB,CAAA;AAIzB,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAA;AACxE,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AACpD,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -8,6 +8,9 @@ import 'reflect-metadata';
|
|
|
8
8
|
export { Application } from './Application.js';
|
|
9
9
|
export { ConfigStore, defineModuleConfig, env } from './ConfigLoader.js';
|
|
10
10
|
export { Container } from './container/Container.js';
|
|
11
|
+
export { Env, EnvValidationException } from './env/Env.js';
|
|
12
|
+
export { loadEnvFiles } from './env/loadEnvFiles.js';
|
|
13
|
+
export { EnvVarError, } from './env/schema.js';
|
|
11
14
|
// ─── HTTP (new — AdonisJS-compatible) ───────────────────────
|
|
12
15
|
export { E_FORBIDDEN, E_HTTP_EXCEPTION, E_ROUTE_NOT_FOUND, E_ROW_NOT_FOUND, E_UNAUTHORIZED, E_VALIDATION_ERROR, Exception, ExceptionHandler, } from './http/Exception.js';
|
|
13
16
|
export { HttpContext } from './http/HttpContext.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,kBAAkB,CAAA;AAEzB,+DAA+D;AAE/D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAA;AACxE,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
Binary file
|
|
Binary file
|
package/package.json
CHANGED
|
Binary file
|
package/src/Application.ts
CHANGED
|
@@ -13,6 +13,8 @@
|
|
|
13
13
|
* @implements FR17, FR20
|
|
14
14
|
*/
|
|
15
15
|
|
|
16
|
+
import { join } from 'node:path'
|
|
17
|
+
import { fileURLToPath } from 'node:url'
|
|
16
18
|
import { ConfigStore } from './ConfigLoader.js'
|
|
17
19
|
import { Container } from './container/Container.js'
|
|
18
20
|
import type { AppContext, ProviderContract } from './Provider.js'
|
|
@@ -21,6 +23,7 @@ import { callProviderPhase } from './Provider.js'
|
|
|
21
23
|
export class Application implements AppContext {
|
|
22
24
|
readonly container: Container
|
|
23
25
|
readonly config: ConfigStore
|
|
26
|
+
#appRoot?: URL
|
|
24
27
|
private providers: ProviderContract[] = []
|
|
25
28
|
private _booted = false
|
|
26
29
|
private _bootingHooks: Array<() => Promise<void> | void> = []
|
|
@@ -32,6 +35,52 @@ export class Application implements AppContext {
|
|
|
32
35
|
this.config = new ConfigStore()
|
|
33
36
|
}
|
|
34
37
|
|
|
38
|
+
// ─── Paths ────────────────────────────────────────────────
|
|
39
|
+
// AdonisJS-style path helpers — resolve against the project root passed to
|
|
40
|
+
// the Ignitor (`new Ignitor(new URL('../', import.meta.url))`). App code uses
|
|
41
|
+
// these instead of recomputing `dirname(fileURLToPath(import.meta.url))` per
|
|
42
|
+
// file: `app.configPath('shield.ts')`, `app.migrationsPath()`, …
|
|
43
|
+
|
|
44
|
+
/** Set the project root. Called by the Ignitor from its constructor URL. */
|
|
45
|
+
setAppRoot(root: URL): void {
|
|
46
|
+
this.#appRoot = root
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/** The project root directory URL, or `undefined` in inline/no-root mode. */
|
|
50
|
+
get appRoot(): URL | undefined {
|
|
51
|
+
return this.#appRoot
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/** Absolute path to a file/dir inside the project root. */
|
|
55
|
+
makePath(...paths: string[]): string {
|
|
56
|
+
if (!this.#appRoot) {
|
|
57
|
+
throw new Error(
|
|
58
|
+
'Application.makePath: app root is not set — construct the Ignitor with `new Ignitor(new URL("../", import.meta.url))`.',
|
|
59
|
+
)
|
|
60
|
+
}
|
|
61
|
+
return join(fileURLToPath(this.#appRoot), ...paths)
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/** Absolute path inside the `config/` directory. */
|
|
65
|
+
configPath(...paths: string[]): string {
|
|
66
|
+
return this.makePath('config', ...paths)
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/** Absolute path inside the `database/migrations/` directory. */
|
|
70
|
+
migrationsPath(...paths: string[]): string {
|
|
71
|
+
return this.makePath('database', 'migrations', ...paths)
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/** Absolute path inside the `tmp/` directory. */
|
|
75
|
+
tmpPath(...paths: string[]): string {
|
|
76
|
+
return this.makePath('tmp', ...paths)
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/** Absolute path inside the `public/` directory. */
|
|
80
|
+
publicPath(...paths: string[]): string {
|
|
81
|
+
return this.makePath('public', ...paths)
|
|
82
|
+
}
|
|
83
|
+
|
|
35
84
|
// ─── Environment ──────────────────────────────────────────
|
|
36
85
|
|
|
37
86
|
/** Check if running in production. */
|
package/src/Ignitor.ts
CHANGED
|
@@ -13,12 +13,10 @@
|
|
|
13
13
|
* @implements FR17, FR20, FR23
|
|
14
14
|
*/
|
|
15
15
|
|
|
16
|
-
import { readFileSync } from 'node:fs'
|
|
17
|
-
import { fileURLToPath } from 'node:url'
|
|
18
|
-
import { parseEnv } from 'node:util'
|
|
19
16
|
import { Application } from './Application.js'
|
|
20
17
|
import type { ErrorEvent } from './ErrorBoundary.js'
|
|
21
18
|
import { ErrorBoundary } from './ErrorBoundary.js'
|
|
19
|
+
import { loadEnvFiles } from './env/loadEnvFiles.js'
|
|
22
20
|
import { ReamError } from './errors/ReamError.js'
|
|
23
21
|
import type { Emitter } from './events/Emitter.js'
|
|
24
22
|
import { startHotReload } from './HotReload.js'
|
|
@@ -163,6 +161,9 @@ export class Ignitor {
|
|
|
163
161
|
if (this.appRoot) {
|
|
164
162
|
const root = this.appRoot
|
|
165
163
|
this.app.container.singleton('appRoot', () => root)
|
|
164
|
+
// Also expose it on the Application for the AdonisJS-style path helpers
|
|
165
|
+
// (`app.makePath`, `app.configPath`, `app.migrationsPath`, …).
|
|
166
|
+
this.app.setAppRoot(root)
|
|
166
167
|
}
|
|
167
168
|
|
|
168
169
|
// Set service singletons so route/kernel files can import them
|
|
@@ -302,28 +303,7 @@ export class Ignitor {
|
|
|
302
303
|
*/
|
|
303
304
|
#loadEnvironmentFiles(): void {
|
|
304
305
|
if (!this.appRoot) return
|
|
305
|
-
|
|
306
|
-
// Most-specific first; with "existing wins", earlier files take precedence.
|
|
307
|
-
const files = [
|
|
308
|
-
nodeEnv ? `.env.${nodeEnv}.local` : null,
|
|
309
|
-
this.environment === 'test' ? null : '.env.local',
|
|
310
|
-
nodeEnv ? `.env.${nodeEnv}` : null,
|
|
311
|
-
'.env',
|
|
312
|
-
].filter((name): name is string => name !== null)
|
|
313
|
-
|
|
314
|
-
for (const name of files) {
|
|
315
|
-
let contents: string
|
|
316
|
-
try {
|
|
317
|
-
contents = readFileSync(fileURLToPath(new URL(name, this.appRoot)), 'utf8')
|
|
318
|
-
} catch {
|
|
319
|
-
continue // file absent — nothing to load
|
|
320
|
-
}
|
|
321
|
-
for (const [key, value] of Object.entries(parseEnv(contents))) {
|
|
322
|
-
if (typeof value === 'string' && process.env[key] === undefined) {
|
|
323
|
-
process.env[key] = value
|
|
324
|
-
}
|
|
325
|
-
}
|
|
326
|
-
}
|
|
306
|
+
loadEnvFiles(this.appRoot, { skipEnvLocal: this.environment === 'test' })
|
|
327
307
|
}
|
|
328
308
|
|
|
329
309
|
private async phaseRegister(): Promise<void> {
|
package/src/env/Env.ts
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { loadEnvFiles } from './loadEnvFiles.js'
|
|
2
|
+
import { type SchemaNode, schema } from './schema.js'
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Type-safe environment access — mirrors `@adonisjs/core/env`:
|
|
6
|
+
*
|
|
7
|
+
* // start/env.ts
|
|
8
|
+
* import { Env } from '@c9up/ream'
|
|
9
|
+
* export default await Env.create(new URL('../', import.meta.url), {
|
|
10
|
+
* HOST: Env.schema.string({ format: 'host' }),
|
|
11
|
+
* PORT: Env.schema.number(),
|
|
12
|
+
* NODE_ENV: Env.schema.enum(['development', 'production', 'test'] as const),
|
|
13
|
+
* DATABASE_URL: Env.schema.string.optional(),
|
|
14
|
+
* })
|
|
15
|
+
*
|
|
16
|
+
* // config/database.ts
|
|
17
|
+
* import env from '#start/env'
|
|
18
|
+
* const port = env.get('PORT') // typed `number`
|
|
19
|
+
*
|
|
20
|
+
* `create` loads the `.env*` files (so config read at import sees them, in EVERY
|
|
21
|
+
* flow incl. tests), validates each variable against the schema, and refuses to
|
|
22
|
+
* start with a descriptive error if a required variable is missing or invalid.
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
/** The validated output type of a single schema node. */
|
|
26
|
+
type EnvOutput<N> = N extends SchemaNode<infer T> ? T : never
|
|
27
|
+
|
|
28
|
+
/** Map a schema object to its `{ key: validatedType }` record. */
|
|
29
|
+
type EnvRecord<S extends Record<string, SchemaNode<unknown>>> = {
|
|
30
|
+
[K in keyof S]: EnvOutput<S[K]>
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/** Raised when one or more environment variables fail validation. */
|
|
34
|
+
export class EnvValidationException extends Error {
|
|
35
|
+
/** Human-readable, newline-joined list of every failure (cf. Adonis `error.help`). */
|
|
36
|
+
readonly help: string
|
|
37
|
+
constructor(failures: string[]) {
|
|
38
|
+
super('Environment variables validation failed')
|
|
39
|
+
this.name = 'E_INVALID_ENV_VARIABLES'
|
|
40
|
+
this.help = failures.join('\n')
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export class Env<Values extends Record<string, unknown>> {
|
|
45
|
+
/** The validation schema surface — `Env.schema.string()`, `.number()`, … */
|
|
46
|
+
static readonly schema = schema
|
|
47
|
+
|
|
48
|
+
readonly #values: Values
|
|
49
|
+
|
|
50
|
+
private constructor(values: Values) {
|
|
51
|
+
this.#values = values
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Load `.env*` files, validate `process.env` against `schema`, and return a
|
|
56
|
+
* typed `Env`. Throws {@link EnvValidationException} (aggregating every
|
|
57
|
+
* failure) if validation fails.
|
|
58
|
+
*/
|
|
59
|
+
static async create<S extends Record<string, SchemaNode<unknown>>>(
|
|
60
|
+
appRoot: URL,
|
|
61
|
+
schema: S,
|
|
62
|
+
): Promise<Env<EnvRecord<S>>> {
|
|
63
|
+
loadEnvFiles(appRoot, { skipEnvLocal: process.env.NODE_ENV === 'test' })
|
|
64
|
+
|
|
65
|
+
const failures: string[] = []
|
|
66
|
+
const collected: Record<string, unknown> = {}
|
|
67
|
+
for (const key of Object.keys(schema)) {
|
|
68
|
+
try {
|
|
69
|
+
collected[key] = schema[key].validate(key, process.env[key])
|
|
70
|
+
} catch (err) {
|
|
71
|
+
failures.push(err instanceof Error ? err.message : String(err))
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
if (failures.length > 0) throw new EnvValidationException(failures)
|
|
75
|
+
|
|
76
|
+
// The ONE isolated type-erasure boundary (the same place zod / @adonisjs/env
|
|
77
|
+
// cast internally): every entry of `collected` was produced by its schema
|
|
78
|
+
// node's validator, so the object structurally IS `EnvRecord<S>` — TS just
|
|
79
|
+
// can't carry that proof through the dynamic `Object.keys` loop. Load-bearing.
|
|
80
|
+
return new Env(collected as EnvRecord<S>)
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/** Read a validated variable. Required keys are always present; optional keys may be `undefined`. */
|
|
84
|
+
get<K extends keyof Values>(key: K): Values[K]
|
|
85
|
+
get<K extends keyof Values>(key: K, fallback: Values[K]): Values[K]
|
|
86
|
+
get<K extends keyof Values>(key: K, fallback?: Values[K]): Values[K] {
|
|
87
|
+
const value = this.#values[key]
|
|
88
|
+
if (value === undefined && fallback !== undefined) return fallback
|
|
89
|
+
return value
|
|
90
|
+
}
|
|
91
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs'
|
|
2
|
+
import { fileURLToPath } from 'node:url'
|
|
3
|
+
import { parseEnv } from 'node:util'
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Load `.env` files into `process.env` — the shared primitive behind both the
|
|
7
|
+
* Ignitor (HTTP/console boot) and `Env.create()` (config/test flow), mirroring
|
|
8
|
+
* AdonisJS which loads env in every flow.
|
|
9
|
+
*
|
|
10
|
+
* Order is most-specific-first and "already-present wins", so the shell / CI
|
|
11
|
+
* always overrides the files. Missing files are skipped silently. Uses Node's
|
|
12
|
+
* built-in parser — no dependency.
|
|
13
|
+
*
|
|
14
|
+
* @param appRoot Directory URL the `.env*` files are resolved against.
|
|
15
|
+
* @param options.skipEnvLocal Skip `.env.local` (the test flow does, so a
|
|
16
|
+
* developer's local overrides don't leak into tests).
|
|
17
|
+
*/
|
|
18
|
+
export function loadEnvFiles(appRoot: URL, options: { skipEnvLocal?: boolean } = {}): void {
|
|
19
|
+
const nodeEnv = process.env.NODE_ENV
|
|
20
|
+
const files = [
|
|
21
|
+
nodeEnv ? `.env.${nodeEnv}.local` : null,
|
|
22
|
+
options.skipEnvLocal ? null : '.env.local',
|
|
23
|
+
nodeEnv ? `.env.${nodeEnv}` : null,
|
|
24
|
+
'.env',
|
|
25
|
+
].filter((name): name is string => name !== null)
|
|
26
|
+
|
|
27
|
+
for (const name of files) {
|
|
28
|
+
let contents: string
|
|
29
|
+
try {
|
|
30
|
+
contents = readFileSync(fileURLToPath(new URL(name, appRoot)), 'utf8')
|
|
31
|
+
} catch {
|
|
32
|
+
continue // file absent — nothing to load
|
|
33
|
+
}
|
|
34
|
+
for (const [key, value] of Object.entries(parseEnv(contents))) {
|
|
35
|
+
if (typeof value === 'string' && process.env[key] === undefined) {
|
|
36
|
+
process.env[key] = value
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Env validation schema — mirrors `@adonisjs/core/env`'s `Env.schema` surface:
|
|
3
|
+
*
|
|
4
|
+
* Env.schema.string({ format: 'host' })
|
|
5
|
+
* Env.schema.number()
|
|
6
|
+
* Env.schema.boolean()
|
|
7
|
+
* Env.schema.enum(['development', 'production', 'test'] as const)
|
|
8
|
+
* Env.schema.string.optional() // shortcut form
|
|
9
|
+
* Env.schema.enum([...]).optional() // node form
|
|
10
|
+
*
|
|
11
|
+
* Each node validates + coerces a raw `process.env` string into its typed
|
|
12
|
+
* value (or throws {@link EnvVarError}); `.optional()` accepts an absent/empty
|
|
13
|
+
* value as `undefined`.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
/** A single failed-variable validation — collected by `Env.create`. */
|
|
17
|
+
export class EnvVarError extends Error {
|
|
18
|
+
constructor(message: string) {
|
|
19
|
+
super(message)
|
|
20
|
+
this.name = 'EnvVarError'
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/** A validator: parse + coerce a raw env value (or `undefined`) into `T`. */
|
|
25
|
+
export interface SchemaNode<T> {
|
|
26
|
+
validate(name: string, value: string | undefined): T
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/** A required node that can be turned optional — `.optional()` widens `T` to `T | undefined`. */
|
|
30
|
+
export interface RequiredNode<T> extends SchemaNode<T> {
|
|
31
|
+
optional(): SchemaNode<T | undefined>
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export interface StringOptions {
|
|
35
|
+
/** Validate the string against a known format. */
|
|
36
|
+
format?: 'host' | 'url' | 'email'
|
|
37
|
+
/** For `format: 'url'` — require a TLD (default true). */
|
|
38
|
+
tld?: boolean
|
|
39
|
+
/** For `format: 'url'` — require a protocol (default true). */
|
|
40
|
+
protocol?: boolean
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
const TRUE_VALUES = new Set(['true', '1'])
|
|
44
|
+
const FALSE_VALUES = new Set(['false', '0'])
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Build a node from a `parse` that only ever sees a present, non-empty string.
|
|
48
|
+
* Required `validate` throws on absent/empty; `.optional()` returns `undefined`.
|
|
49
|
+
*/
|
|
50
|
+
function makeNode<T>(parse: (name: string, raw: string) => T): RequiredNode<T> {
|
|
51
|
+
return {
|
|
52
|
+
validate(name, value) {
|
|
53
|
+
if (value === undefined || value === '') {
|
|
54
|
+
throw new EnvVarError(`Missing required environment variable "${name}"`)
|
|
55
|
+
}
|
|
56
|
+
return parse(name, value)
|
|
57
|
+
},
|
|
58
|
+
optional() {
|
|
59
|
+
return {
|
|
60
|
+
validate(name, value) {
|
|
61
|
+
if (value === undefined || value === '') return undefined
|
|
62
|
+
return parse(name, value)
|
|
63
|
+
},
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
function isHost(value: string): boolean {
|
|
70
|
+
if (value === 'localhost') return true
|
|
71
|
+
if (/^(\d{1,3}\.){3}\d{1,3}$/.test(value)) {
|
|
72
|
+
return value.split('.').every((octet) => Number(octet) <= 255)
|
|
73
|
+
}
|
|
74
|
+
if (value.includes(':') && /^[0-9a-fA-F:]+$/.test(value)) return true // loose IPv6
|
|
75
|
+
return /^(?!-)[A-Za-z0-9-]{1,63}(?<!-)(\.(?!-)[A-Za-z0-9-]{1,63}(?<!-))*$/.test(value)
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
function isUrl(value: string, options: StringOptions): boolean {
|
|
79
|
+
const candidate = options.protocol === false && !value.includes('://') ? `http://${value}` : value
|
|
80
|
+
let url: URL
|
|
81
|
+
try {
|
|
82
|
+
url = new URL(candidate)
|
|
83
|
+
} catch {
|
|
84
|
+
return false
|
|
85
|
+
}
|
|
86
|
+
if (options.tld !== false && !url.hostname.includes('.') && url.hostname !== 'localhost') {
|
|
87
|
+
return false
|
|
88
|
+
}
|
|
89
|
+
return true
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
function isEmail(value: string): boolean {
|
|
93
|
+
return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value)
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
function checkFormat(name: string, value: string, options?: StringOptions): void {
|
|
97
|
+
if (!options?.format) return
|
|
98
|
+
const ok =
|
|
99
|
+
options.format === 'host'
|
|
100
|
+
? isHost(value)
|
|
101
|
+
: options.format === 'url'
|
|
102
|
+
? isUrl(value, options)
|
|
103
|
+
: isEmail(value)
|
|
104
|
+
if (!ok) {
|
|
105
|
+
throw new EnvVarError(
|
|
106
|
+
`Environment variable "${name}" must be a valid ${options.format}, got "${value}"`,
|
|
107
|
+
)
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
function stringParse(options?: StringOptions): (name: string, raw: string) => string {
|
|
112
|
+
return (name, raw) => {
|
|
113
|
+
checkFormat(name, raw, options)
|
|
114
|
+
return raw
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/** `string(opts?)` is callable AND exposes `.optional(opts?)` — both Adonis forms. */
|
|
119
|
+
const string: ((options?: StringOptions) => RequiredNode<string>) & {
|
|
120
|
+
optional(options?: StringOptions): SchemaNode<string | undefined>
|
|
121
|
+
} = Object.assign((options?: StringOptions) => makeNode(stringParse(options)), {
|
|
122
|
+
optional: (options?: StringOptions) => makeNode(stringParse(options)).optional(),
|
|
123
|
+
})
|
|
124
|
+
|
|
125
|
+
function number(): RequiredNode<number> {
|
|
126
|
+
return makeNode((name, raw) => {
|
|
127
|
+
const parsed = Number(raw)
|
|
128
|
+
if (Number.isNaN(parsed)) {
|
|
129
|
+
throw new EnvVarError(`Environment variable "${name}" must be a number, got "${raw}"`)
|
|
130
|
+
}
|
|
131
|
+
return parsed
|
|
132
|
+
})
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
function boolean(): RequiredNode<boolean> {
|
|
136
|
+
return makeNode((name, raw) => {
|
|
137
|
+
if (TRUE_VALUES.has(raw)) return true
|
|
138
|
+
if (FALSE_VALUES.has(raw)) return false
|
|
139
|
+
throw new EnvVarError(
|
|
140
|
+
`Environment variable "${name}" must be a boolean (true/false/1/0), got "${raw}"`,
|
|
141
|
+
)
|
|
142
|
+
})
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
function enumNode<V extends readonly string[]>(values: V): RequiredNode<V[number]> {
|
|
146
|
+
return makeNode((name, raw) => {
|
|
147
|
+
const match = values.find((candidate) => candidate === raw)
|
|
148
|
+
if (match === undefined) {
|
|
149
|
+
throw new EnvVarError(
|
|
150
|
+
`Environment variable "${name}" must be one of [${values.join(', ')}], got "${raw}"`,
|
|
151
|
+
)
|
|
152
|
+
}
|
|
153
|
+
return match
|
|
154
|
+
})
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/** The `Env.schema` surface. */
|
|
158
|
+
export const schema = {
|
|
159
|
+
string,
|
|
160
|
+
number,
|
|
161
|
+
boolean,
|
|
162
|
+
enum: enumNode,
|
|
163
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -12,6 +12,14 @@ export { Application } from './Application.js'
|
|
|
12
12
|
export { ConfigStore, defineModuleConfig, env } from './ConfigLoader.js'
|
|
13
13
|
export { Container } from './container/Container.js'
|
|
14
14
|
export type { Binding, ServiceFactory, ServiceScope, ServiceToken } from './container/types.js'
|
|
15
|
+
export { Env, EnvValidationException } from './env/Env.js'
|
|
16
|
+
export { loadEnvFiles } from './env/loadEnvFiles.js'
|
|
17
|
+
export {
|
|
18
|
+
EnvVarError,
|
|
19
|
+
type RequiredNode,
|
|
20
|
+
type SchemaNode,
|
|
21
|
+
type StringOptions,
|
|
22
|
+
} from './env/schema.js'
|
|
15
23
|
|
|
16
24
|
// ─── HTTP (new — AdonisJS-compatible) ───────────────────────
|
|
17
25
|
|