@hexaijs/utils 0.1.0 → 0.1.1
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/config/index.d.ts +1 -6
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +2 -17
- package/dist/config/index.js.map +1 -1
- package/package.json +4 -2
- package/dist/config/config-spec.d.ts +0 -49
- package/dist/config/config-spec.d.ts.map +0 -1
- package/dist/config/config-spec.js +0 -10
- package/dist/config/config-spec.js.map +0 -1
- package/dist/config/database-config.d.ts +0 -22
- package/dist/config/database-config.d.ts.map +0 -1
- package/dist/config/database-config.js +0 -3
- package/dist/config/database-config.js.map +0 -1
- package/dist/config/define-config.d.ts +0 -45
- package/dist/config/define-config.d.ts.map +0 -1
- package/dist/config/define-config.js +0 -70
- package/dist/config/define-config.js.map +0 -1
- package/dist/config/env-spec.d.ts +0 -78
- package/dist/config/env-spec.d.ts.map +0 -1
- package/dist/config/env-spec.js +0 -123
- package/dist/config/env-spec.js.map +0 -1
- package/dist/config/env-spec.spec.d.ts +0 -2
- package/dist/config/env-spec.spec.d.ts.map +0 -1
- package/dist/config/env-spec.spec.js +0 -184
- package/dist/config/env-spec.spec.js.map +0 -1
- package/dist/config/errors.d.ts +0 -9
- package/dist/config/errors.d.ts.map +0 -1
- package/dist/config/errors.js +0 -17
- package/dist/config/errors.js.map +0 -1
- package/dist/config/load-env-files.d.ts +0 -5
- package/dist/config/load-env-files.d.ts.map +0 -1
- package/dist/config/load-env-files.js +0 -34
- package/dist/config/load-env-files.js.map +0 -1
package/dist/config/index.d.ts
CHANGED
|
@@ -1,7 +1,2 @@
|
|
|
1
|
-
export
|
|
2
|
-
export { ConfigValidationError } from "./errors";
|
|
3
|
-
export { defineConfig, type ConfigOptions } from "./define-config";
|
|
4
|
-
export * from "./load-env-files";
|
|
5
|
-
export { EnvSpec, env, envOptional, envNumber, envNumberOptional, envBoolean, envJson, envJsonOptional, } from "./env-spec";
|
|
6
|
-
export { DatabaseConfig } from "./database-config";
|
|
1
|
+
export * from "ezcfg";
|
|
7
2
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AACA,cAAc,OAAO,CAAC"}
|
package/dist/config/index.js
CHANGED
|
@@ -14,21 +14,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
Object.defineProperty(exports, "isConfigSpec", { enumerable: true, get: function () { return config_spec_1.isConfigSpec; } });
|
|
20
|
-
var errors_1 = require("./errors");
|
|
21
|
-
Object.defineProperty(exports, "ConfigValidationError", { enumerable: true, get: function () { return errors_1.ConfigValidationError; } });
|
|
22
|
-
var define_config_1 = require("./define-config");
|
|
23
|
-
Object.defineProperty(exports, "defineConfig", { enumerable: true, get: function () { return define_config_1.defineConfig; } });
|
|
24
|
-
__exportStar(require("./load-env-files"), exports);
|
|
25
|
-
var env_spec_1 = require("./env-spec");
|
|
26
|
-
Object.defineProperty(exports, "EnvSpec", { enumerable: true, get: function () { return env_spec_1.EnvSpec; } });
|
|
27
|
-
Object.defineProperty(exports, "env", { enumerable: true, get: function () { return env_spec_1.env; } });
|
|
28
|
-
Object.defineProperty(exports, "envOptional", { enumerable: true, get: function () { return env_spec_1.envOptional; } });
|
|
29
|
-
Object.defineProperty(exports, "envNumber", { enumerable: true, get: function () { return env_spec_1.envNumber; } });
|
|
30
|
-
Object.defineProperty(exports, "envNumberOptional", { enumerable: true, get: function () { return env_spec_1.envNumberOptional; } });
|
|
31
|
-
Object.defineProperty(exports, "envBoolean", { enumerable: true, get: function () { return env_spec_1.envBoolean; } });
|
|
32
|
-
Object.defineProperty(exports, "envJson", { enumerable: true, get: function () { return env_spec_1.envJson; } });
|
|
33
|
-
Object.defineProperty(exports, "envJsonOptional", { enumerable: true, get: function () { return env_spec_1.envJsonOptional; } });
|
|
17
|
+
// Re-export from ezcfg for backward compatibility
|
|
18
|
+
__exportStar(require("ezcfg"), exports);
|
|
34
19
|
//# sourceMappingURL=index.js.map
|
package/dist/config/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kDAAkD;AAClD,wCAAsB"}
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"publishConfig": {
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
|
-
"version": "0.1.
|
|
6
|
+
"version": "0.1.1",
|
|
7
7
|
"description": "A collection of utility functions and value objects for hexai projects",
|
|
8
8
|
"license": "MIT",
|
|
9
9
|
"author": "Sangwoo Hyun <wkdny.hyun@gmail.com>",
|
|
@@ -38,7 +38,9 @@
|
|
|
38
38
|
"require": "./dist/config/index.js"
|
|
39
39
|
}
|
|
40
40
|
},
|
|
41
|
-
"dependencies": {
|
|
41
|
+
"dependencies": {
|
|
42
|
+
"ezcfg": "^0.1.0"
|
|
43
|
+
},
|
|
42
44
|
"devDependencies": {},
|
|
43
45
|
"scripts": {
|
|
44
46
|
"test": "vitest run",
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Base interface for all config specs.
|
|
3
|
-
* Implement this interface to create custom config specs that can be used with defineConfig.
|
|
4
|
-
*
|
|
5
|
-
* @example
|
|
6
|
-
* ```typescript
|
|
7
|
-
* class RedisSpec implements ConfigSpec<RedisConfig> {
|
|
8
|
-
* readonly _type = "redis";
|
|
9
|
-
*
|
|
10
|
-
* constructor(private prefix: string) {}
|
|
11
|
-
*
|
|
12
|
-
* resolve(errors: string[]): RedisConfig | undefined {
|
|
13
|
-
* try {
|
|
14
|
-
* return RedisConfig.fromEnv(this.prefix);
|
|
15
|
-
* } catch (e) {
|
|
16
|
-
* errors.push((e as Error).message);
|
|
17
|
-
* return undefined;
|
|
18
|
-
* }
|
|
19
|
-
* }
|
|
20
|
-
* }
|
|
21
|
-
* ```
|
|
22
|
-
*/
|
|
23
|
-
export interface ConfigSpec<T> {
|
|
24
|
-
/**
|
|
25
|
-
* Unique type identifier for this spec.
|
|
26
|
-
* Used for debugging and error messages.
|
|
27
|
-
*/
|
|
28
|
-
readonly _type: string;
|
|
29
|
-
/**
|
|
30
|
-
* Resolve the config value from environment.
|
|
31
|
-
* Should push error messages to the errors array instead of throwing.
|
|
32
|
-
*
|
|
33
|
-
* @param errors - Array to collect validation errors
|
|
34
|
-
* @returns The resolved value, or undefined if resolution failed
|
|
35
|
-
*/
|
|
36
|
-
resolve(errors: string[]): T | undefined;
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* Type helper to infer result type from a ConfigSpec.
|
|
40
|
-
*/
|
|
41
|
-
export type InferSpecType<S> = S extends ConfigSpec<infer T> ? T : S;
|
|
42
|
-
/**
|
|
43
|
-
* Type helper to infer config object type from schema.
|
|
44
|
-
*/
|
|
45
|
-
export type InferConfigType<S extends Record<string, unknown>> = {
|
|
46
|
-
readonly [K in keyof S]: InferSpecType<S[K]>;
|
|
47
|
-
};
|
|
48
|
-
export declare function isConfigSpec(value: unknown): value is ConfigSpec<unknown>;
|
|
49
|
-
//# sourceMappingURL=config-spec.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config-spec.d.ts","sourceRoot":"","sources":["../../src/config/config-spec.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,WAAW,UAAU,CAAC,CAAC;IACzB;;;OAGG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEvB;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,CAAC;CAC5C;AAED;;GAEG;AACH,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI,CAAC,SAAS,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAErE;;GAEG;AACH,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI;IAC7D,QAAQ,EAAE,CAAC,IAAI,MAAM,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC/C,CAAC;AAGF,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,UAAU,CAAC,OAAO,CAAC,CAOzE"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.isConfigSpec = isConfigSpec;
|
|
4
|
-
function isConfigSpec(value) {
|
|
5
|
-
return (typeof value === "object" &&
|
|
6
|
-
value !== null &&
|
|
7
|
-
"resolve" in value &&
|
|
8
|
-
typeof value.resolve === "function");
|
|
9
|
-
}
|
|
10
|
-
//# sourceMappingURL=config-spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config-spec.js","sourceRoot":"","sources":["../../src/config/config-spec.ts"],"names":[],"mappings":";;AAoDA,oCAOC;AAPD,SAAgB,YAAY,CAAC,KAAc;IACvC,OAAO,CACH,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,SAAS,IAAI,KAAK;QAClB,OAAQ,KAA6B,CAAC,OAAO,KAAK,UAAU,CAC/D,CAAC;AACN,CAAC"}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Common interface for all database configurations.
|
|
3
|
-
*
|
|
4
|
-
* This interface defines the minimal contract that all database config
|
|
5
|
-
* implementations (PostgresConfig, MySQLConfig, etc.) must satisfy.
|
|
6
|
-
*
|
|
7
|
-
* Note: Builder methods (with*) are intentionally NOT included here.
|
|
8
|
-
* Each implementation returns its own concrete type for better type inference.
|
|
9
|
-
*/
|
|
10
|
-
export interface DatabaseConfig {
|
|
11
|
-
readonly host: string;
|
|
12
|
-
readonly port: number;
|
|
13
|
-
readonly database: string;
|
|
14
|
-
readonly user: string;
|
|
15
|
-
readonly password?: string;
|
|
16
|
-
/**
|
|
17
|
-
* Returns the connection URL string representation.
|
|
18
|
-
* Format varies by database type (e.g., postgres://, mysql://)
|
|
19
|
-
*/
|
|
20
|
-
toString(): string;
|
|
21
|
-
}
|
|
22
|
-
//# sourceMappingURL=database-config.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"database-config.d.ts","sourceRoot":"","sources":["../../src/config/database-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,WAAW,cAAc;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAE3B;;;OAGG;IACH,QAAQ,IAAI,MAAM,CAAC;CACtB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"database-config.js","sourceRoot":"","sources":["../../src/config/database-config.ts"],"names":[],"mappings":""}
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import { type InferConfigType } from "./config-spec";
|
|
2
|
-
export interface ConfigOptions {
|
|
3
|
-
/**
|
|
4
|
-
* Whether to load .env files before resolving config.
|
|
5
|
-
* @default false
|
|
6
|
-
*/
|
|
7
|
-
loadEnv?: boolean;
|
|
8
|
-
/**
|
|
9
|
-
* Custom env loader function. Called when loadEnv is true.
|
|
10
|
-
* If not provided and loadEnv is true, uses dotenv.config().
|
|
11
|
-
*/
|
|
12
|
-
envLoader?: () => void;
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* Defines a typed configuration with automatic validation and singleton management.
|
|
16
|
-
*
|
|
17
|
-
* @param schema - Configuration schema defining all config fields
|
|
18
|
-
* @param options - Optional configuration options
|
|
19
|
-
* @returns A function that returns the resolved config (singleton)
|
|
20
|
-
*
|
|
21
|
-
* @example
|
|
22
|
-
* ```typescript
|
|
23
|
-
* import { defineConfig, env, envBoolean } from "@hexaijs/core";
|
|
24
|
-
* import { postgres } from "@hexaijs/postgres";
|
|
25
|
-
*
|
|
26
|
-
* export const getConfig = defineConfig({
|
|
27
|
-
* db: postgres("ORDER_DB"),
|
|
28
|
-
* apiKey: env("API_KEY"),
|
|
29
|
-
* debug: envBoolean("DEBUG", false),
|
|
30
|
-
* // Primitive values are also supported
|
|
31
|
-
* appName: "my-app",
|
|
32
|
-
* maxRetries: 3,
|
|
33
|
-
* });
|
|
34
|
-
*
|
|
35
|
-
* // Usage
|
|
36
|
-
* const config = getConfig();
|
|
37
|
-
* config.db.host; // PostgresConfig property
|
|
38
|
-
* config.apiKey; // string
|
|
39
|
-
* config.debug; // boolean
|
|
40
|
-
* config.appName; // "my-app" (literal type)
|
|
41
|
-
* config.maxRetries; // 3 (literal type)
|
|
42
|
-
* ```
|
|
43
|
-
*/
|
|
44
|
-
export declare function defineConfig<S extends Record<string, unknown>>(schema: S, options?: ConfigOptions): () => InferConfigType<S>;
|
|
45
|
-
//# sourceMappingURL=define-config.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"define-config.d.ts","sourceRoot":"","sources":["../../src/config/define-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,eAAe,EAAgB,MAAM,eAAe,CAAC;AAInE,MAAM,WAAW,aAAa;IAC1B;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;CAC1B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC1D,MAAM,EAAE,CAAC,EACT,OAAO,CAAC,EAAE,aAAa,GACxB,MAAM,eAAe,CAAC,CAAC,CAAC,CAoC1B"}
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.defineConfig = defineConfig;
|
|
4
|
-
const config_spec_1 = require("./config-spec");
|
|
5
|
-
const errors_1 = require("./errors");
|
|
6
|
-
const load_env_files_1 = require("./load-env-files");
|
|
7
|
-
/**
|
|
8
|
-
* Defines a typed configuration with automatic validation and singleton management.
|
|
9
|
-
*
|
|
10
|
-
* @param schema - Configuration schema defining all config fields
|
|
11
|
-
* @param options - Optional configuration options
|
|
12
|
-
* @returns A function that returns the resolved config (singleton)
|
|
13
|
-
*
|
|
14
|
-
* @example
|
|
15
|
-
* ```typescript
|
|
16
|
-
* import { defineConfig, env, envBoolean } from "@hexaijs/core";
|
|
17
|
-
* import { postgres } from "@hexaijs/postgres";
|
|
18
|
-
*
|
|
19
|
-
* export const getConfig = defineConfig({
|
|
20
|
-
* db: postgres("ORDER_DB"),
|
|
21
|
-
* apiKey: env("API_KEY"),
|
|
22
|
-
* debug: envBoolean("DEBUG", false),
|
|
23
|
-
* // Primitive values are also supported
|
|
24
|
-
* appName: "my-app",
|
|
25
|
-
* maxRetries: 3,
|
|
26
|
-
* });
|
|
27
|
-
*
|
|
28
|
-
* // Usage
|
|
29
|
-
* const config = getConfig();
|
|
30
|
-
* config.db.host; // PostgresConfig property
|
|
31
|
-
* config.apiKey; // string
|
|
32
|
-
* config.debug; // boolean
|
|
33
|
-
* config.appName; // "my-app" (literal type)
|
|
34
|
-
* config.maxRetries; // 3 (literal type)
|
|
35
|
-
* ```
|
|
36
|
-
*/
|
|
37
|
-
function defineConfig(schema, options) {
|
|
38
|
-
let instance = null;
|
|
39
|
-
return () => {
|
|
40
|
-
// In test environment, always recreate to reflect env changes
|
|
41
|
-
if (instance && process.env.NODE_ENV !== "test") {
|
|
42
|
-
return instance;
|
|
43
|
-
}
|
|
44
|
-
// Load env files if requested
|
|
45
|
-
if (options?.loadEnv) {
|
|
46
|
-
if (options.envLoader) {
|
|
47
|
-
options.envLoader();
|
|
48
|
-
}
|
|
49
|
-
else {
|
|
50
|
-
(0, load_env_files_1.loadEnvFiles)();
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
const config = {};
|
|
54
|
-
const errors = [];
|
|
55
|
-
for (const [key, value] of Object.entries(schema)) {
|
|
56
|
-
if ((0, config_spec_1.isConfigSpec)(value)) {
|
|
57
|
-
config[key] = value.resolve(errors);
|
|
58
|
-
}
|
|
59
|
-
else {
|
|
60
|
-
config[key] = value;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
if (errors.length > 0) {
|
|
64
|
-
throw new errors_1.ConfigValidationError(errors);
|
|
65
|
-
}
|
|
66
|
-
instance = config;
|
|
67
|
-
return instance;
|
|
68
|
-
};
|
|
69
|
-
}
|
|
70
|
-
//# sourceMappingURL=define-config.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"define-config.js","sourceRoot":"","sources":["../../src/config/define-config.ts"],"names":[],"mappings":";;AAgDA,oCAuCC;AAvFD,+CAAmE;AACnE,qCAAiD;AACjD,qDAAgD;AAgBhD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,SAAgB,YAAY,CACxB,MAAS,EACT,OAAuB;IAEvB,IAAI,QAAQ,GAA8B,IAAI,CAAC;IAE/C,OAAO,GAAG,EAAE;QACR,8DAA8D;QAC9D,IAAI,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;YAC9C,OAAO,QAAQ,CAAC;QACpB,CAAC;QAED,8BAA8B;QAC9B,IAAI,OAAO,EAAE,OAAO,EAAE,CAAC;YACnB,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;gBACpB,OAAO,CAAC,SAAS,EAAE,CAAC;YACxB,CAAC;iBAAM,CAAC;gBACJ,IAAA,6BAAY,GAAE,CAAC;YACnB,CAAC;QACL,CAAC;QAED,MAAM,MAAM,GAAG,EAA6B,CAAC;QAC7C,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAChD,IAAI,IAAA,0BAAY,EAAC,KAAK,CAAC,EAAE,CAAC;gBACtB,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACxC,CAAC;iBAAM,CAAC;gBACJ,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACxB,CAAC;QACL,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpB,MAAM,IAAI,8BAAqB,CAAC,MAAM,CAAC,CAAC;QAC5C,CAAC;QAED,QAAQ,GAAG,MAA4B,CAAC;QACxC,OAAO,QAAQ,CAAC;IACpB,CAAC,CAAC;AACN,CAAC"}
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
import type { ConfigSpec } from "./config-spec";
|
|
2
|
-
/**
|
|
3
|
-
* Config spec for environment variables.
|
|
4
|
-
* Use the builder functions (env, envOptional, envNumber, etc.) instead of instantiating directly.
|
|
5
|
-
*/
|
|
6
|
-
export declare class EnvSpec<T> implements ConfigSpec<T> {
|
|
7
|
-
private readonly envKey;
|
|
8
|
-
private readonly required;
|
|
9
|
-
private readonly defaultValue?;
|
|
10
|
-
private readonly transform?;
|
|
11
|
-
readonly _type = "env";
|
|
12
|
-
constructor(envKey: string, required: boolean, defaultValue?: T | undefined, transform?: ((value: string) => T) | undefined);
|
|
13
|
-
resolve(errors: string[]): T | undefined;
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Required string environment variable.
|
|
17
|
-
*
|
|
18
|
-
* @example
|
|
19
|
-
* ```typescript
|
|
20
|
-
* const getConfig = defineConfig({
|
|
21
|
-
* apiKey: env("API_KEY"),
|
|
22
|
-
* });
|
|
23
|
-
* ```
|
|
24
|
-
*/
|
|
25
|
-
export declare function env(key: string): EnvSpec<string>;
|
|
26
|
-
/**
|
|
27
|
-
* Optional string environment variable with default value.
|
|
28
|
-
*
|
|
29
|
-
* @example
|
|
30
|
-
* ```typescript
|
|
31
|
-
* const getConfig = defineConfig({
|
|
32
|
-
* logLevel: envOptional("LOG_LEVEL", "info"),
|
|
33
|
-
* });
|
|
34
|
-
* ```
|
|
35
|
-
*/
|
|
36
|
-
export declare function envOptional(key: string, defaultValue?: string): EnvSpec<string | undefined>;
|
|
37
|
-
/**
|
|
38
|
-
* Required number environment variable.
|
|
39
|
-
*
|
|
40
|
-
* @example
|
|
41
|
-
* ```typescript
|
|
42
|
-
* const getConfig = defineConfig({
|
|
43
|
-
* port: envNumber("PORT"),
|
|
44
|
-
* });
|
|
45
|
-
* ```
|
|
46
|
-
*/
|
|
47
|
-
export declare function envNumber(key: string): EnvSpec<number>;
|
|
48
|
-
/**
|
|
49
|
-
* Optional number environment variable with default value.
|
|
50
|
-
*/
|
|
51
|
-
export declare function envNumberOptional(key: string, defaultValue?: number): EnvSpec<number | undefined>;
|
|
52
|
-
/**
|
|
53
|
-
* Boolean environment variable. Recognizes "true", "1" as true.
|
|
54
|
-
*
|
|
55
|
-
* @example
|
|
56
|
-
* ```typescript
|
|
57
|
-
* const getConfig = defineConfig({
|
|
58
|
-
* debug: envBoolean("DEBUG", false),
|
|
59
|
-
* });
|
|
60
|
-
* ```
|
|
61
|
-
*/
|
|
62
|
-
export declare function envBoolean(key: string, defaultValue?: boolean): EnvSpec<boolean>;
|
|
63
|
-
/**
|
|
64
|
-
* JSON environment variable. Parses JSON string into object.
|
|
65
|
-
*
|
|
66
|
-
* @example
|
|
67
|
-
* ```typescript
|
|
68
|
-
* const getConfig = defineConfig({
|
|
69
|
-
* prompts: envJson<{ system: string }>("PROMPTS"),
|
|
70
|
-
* });
|
|
71
|
-
* ```
|
|
72
|
-
*/
|
|
73
|
-
export declare function envJson<T>(key: string): EnvSpec<T>;
|
|
74
|
-
/**
|
|
75
|
-
* Optional JSON environment variable with default value.
|
|
76
|
-
*/
|
|
77
|
-
export declare function envJsonOptional<T>(key: string, defaultValue?: T): EnvSpec<T | undefined>;
|
|
78
|
-
//# sourceMappingURL=env-spec.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"env-spec.d.ts","sourceRoot":"","sources":["../../src/config/env-spec.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD;;;GAGG;AACH,qBAAa,OAAO,CAAC,CAAC,CAAE,YAAW,UAAU,CAAC,CAAC,CAAC;IAIxC,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;IAC9B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;IAN/B,QAAQ,CAAC,KAAK,SAAS;gBAGF,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,OAAO,EACjB,YAAY,CAAC,EAAE,CAAC,YAAA,EAChB,SAAS,CAAC,GAAE,CAAC,KAAK,EAAE,MAAM,KAAK,CAAC,aAAA;IAGrD,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS;CAmB3C;AAED;;;;;;;;;GASG;AACH,wBAAgB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAEhD;AAED;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAE3F;AAED;;;;;;;;;GASG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAEtD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAEjG;AAED;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,UAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAE9E;AAED;;;;;;;;;GASG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAElD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAExF"}
|
package/dist/config/env-spec.js
DELETED
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.EnvSpec = void 0;
|
|
4
|
-
exports.env = env;
|
|
5
|
-
exports.envOptional = envOptional;
|
|
6
|
-
exports.envNumber = envNumber;
|
|
7
|
-
exports.envNumberOptional = envNumberOptional;
|
|
8
|
-
exports.envBoolean = envBoolean;
|
|
9
|
-
exports.envJson = envJson;
|
|
10
|
-
exports.envJsonOptional = envJsonOptional;
|
|
11
|
-
/**
|
|
12
|
-
* Config spec for environment variables.
|
|
13
|
-
* Use the builder functions (env, envOptional, envNumber, etc.) instead of instantiating directly.
|
|
14
|
-
*/
|
|
15
|
-
class EnvSpec {
|
|
16
|
-
envKey;
|
|
17
|
-
required;
|
|
18
|
-
defaultValue;
|
|
19
|
-
transform;
|
|
20
|
-
_type = "env";
|
|
21
|
-
constructor(envKey, required, defaultValue, transform) {
|
|
22
|
-
this.envKey = envKey;
|
|
23
|
-
this.required = required;
|
|
24
|
-
this.defaultValue = defaultValue;
|
|
25
|
-
this.transform = transform;
|
|
26
|
-
}
|
|
27
|
-
resolve(errors) {
|
|
28
|
-
const rawValue = process.env[this.envKey];
|
|
29
|
-
if (!rawValue && this.required) {
|
|
30
|
-
errors.push(`Missing required env: ${this.envKey}`);
|
|
31
|
-
return undefined;
|
|
32
|
-
}
|
|
33
|
-
if (rawValue !== undefined) {
|
|
34
|
-
try {
|
|
35
|
-
return this.transform ? this.transform(rawValue) : rawValue;
|
|
36
|
-
}
|
|
37
|
-
catch (e) {
|
|
38
|
-
errors.push(`Failed to transform ${this.envKey}: ${e.message}`);
|
|
39
|
-
return undefined;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
return this.defaultValue;
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
exports.EnvSpec = EnvSpec;
|
|
46
|
-
/**
|
|
47
|
-
* Required string environment variable.
|
|
48
|
-
*
|
|
49
|
-
* @example
|
|
50
|
-
* ```typescript
|
|
51
|
-
* const getConfig = defineConfig({
|
|
52
|
-
* apiKey: env("API_KEY"),
|
|
53
|
-
* });
|
|
54
|
-
* ```
|
|
55
|
-
*/
|
|
56
|
-
function env(key) {
|
|
57
|
-
return new EnvSpec(key, true);
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* Optional string environment variable with default value.
|
|
61
|
-
*
|
|
62
|
-
* @example
|
|
63
|
-
* ```typescript
|
|
64
|
-
* const getConfig = defineConfig({
|
|
65
|
-
* logLevel: envOptional("LOG_LEVEL", "info"),
|
|
66
|
-
* });
|
|
67
|
-
* ```
|
|
68
|
-
*/
|
|
69
|
-
function envOptional(key, defaultValue) {
|
|
70
|
-
return new EnvSpec(key, false, defaultValue);
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* Required number environment variable.
|
|
74
|
-
*
|
|
75
|
-
* @example
|
|
76
|
-
* ```typescript
|
|
77
|
-
* const getConfig = defineConfig({
|
|
78
|
-
* port: envNumber("PORT"),
|
|
79
|
-
* });
|
|
80
|
-
* ```
|
|
81
|
-
*/
|
|
82
|
-
function envNumber(key) {
|
|
83
|
-
return new EnvSpec(key, true, undefined, Number);
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* Optional number environment variable with default value.
|
|
87
|
-
*/
|
|
88
|
-
function envNumberOptional(key, defaultValue) {
|
|
89
|
-
return new EnvSpec(key, false, defaultValue, (v) => (v ? Number(v) : undefined));
|
|
90
|
-
}
|
|
91
|
-
/**
|
|
92
|
-
* Boolean environment variable. Recognizes "true", "1" as true.
|
|
93
|
-
*
|
|
94
|
-
* @example
|
|
95
|
-
* ```typescript
|
|
96
|
-
* const getConfig = defineConfig({
|
|
97
|
-
* debug: envBoolean("DEBUG", false),
|
|
98
|
-
* });
|
|
99
|
-
* ```
|
|
100
|
-
*/
|
|
101
|
-
function envBoolean(key, defaultValue = false) {
|
|
102
|
-
return new EnvSpec(key, false, defaultValue, (v) => v === "true" || v === "1");
|
|
103
|
-
}
|
|
104
|
-
/**
|
|
105
|
-
* JSON environment variable. Parses JSON string into object.
|
|
106
|
-
*
|
|
107
|
-
* @example
|
|
108
|
-
* ```typescript
|
|
109
|
-
* const getConfig = defineConfig({
|
|
110
|
-
* prompts: envJson<{ system: string }>("PROMPTS"),
|
|
111
|
-
* });
|
|
112
|
-
* ```
|
|
113
|
-
*/
|
|
114
|
-
function envJson(key) {
|
|
115
|
-
return new EnvSpec(key, true, undefined, JSON.parse);
|
|
116
|
-
}
|
|
117
|
-
/**
|
|
118
|
-
* Optional JSON environment variable with default value.
|
|
119
|
-
*/
|
|
120
|
-
function envJsonOptional(key, defaultValue) {
|
|
121
|
-
return new EnvSpec(key, false, defaultValue, (v) => (v ? JSON.parse(v) : undefined));
|
|
122
|
-
}
|
|
123
|
-
//# sourceMappingURL=env-spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"env-spec.js","sourceRoot":"","sources":["../../src/config/env-spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"env-spec.spec.d.ts","sourceRoot":"","sources":["../../src/config/env-spec.spec.ts"],"names":[],"mappings":""}
|
|
@@ -1,184 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const vitest_1 = require("vitest");
|
|
4
|
-
const env_spec_1 = require("./env-spec");
|
|
5
|
-
const define_config_1 = require("./define-config");
|
|
6
|
-
const errors_1 = require("./errors");
|
|
7
|
-
(0, vitest_1.describe)("EnvSpec", () => {
|
|
8
|
-
const originalEnv = process.env;
|
|
9
|
-
(0, vitest_1.beforeEach)(() => {
|
|
10
|
-
process.env = { ...originalEnv, NODE_ENV: "test" };
|
|
11
|
-
});
|
|
12
|
-
(0, vitest_1.afterEach)(() => {
|
|
13
|
-
process.env = originalEnv;
|
|
14
|
-
});
|
|
15
|
-
(0, vitest_1.describe)("env()", () => {
|
|
16
|
-
(0, vitest_1.it)("should resolve required string env var", () => {
|
|
17
|
-
process.env.API_KEY = "secret-key";
|
|
18
|
-
const getConfig = (0, define_config_1.defineConfig)({ apiKey: (0, env_spec_1.env)("API_KEY") });
|
|
19
|
-
(0, vitest_1.expect)(getConfig().apiKey).toBe("secret-key");
|
|
20
|
-
});
|
|
21
|
-
(0, vitest_1.it)("should throw ConfigValidationError for missing required env", () => {
|
|
22
|
-
const getConfig = (0, define_config_1.defineConfig)({ apiKey: (0, env_spec_1.env)("MISSING_KEY") });
|
|
23
|
-
(0, vitest_1.expect)(() => getConfig()).toThrow(errors_1.ConfigValidationError);
|
|
24
|
-
(0, vitest_1.expect)(() => getConfig()).toThrow("Missing required env: MISSING_KEY");
|
|
25
|
-
});
|
|
26
|
-
(0, vitest_1.it)("should collect all missing env vars in error", () => {
|
|
27
|
-
const getConfig = (0, define_config_1.defineConfig)({
|
|
28
|
-
key1: (0, env_spec_1.env)("MISSING_1"),
|
|
29
|
-
key2: (0, env_spec_1.env)("MISSING_2"),
|
|
30
|
-
key3: (0, env_spec_1.env)("MISSING_3"),
|
|
31
|
-
});
|
|
32
|
-
try {
|
|
33
|
-
getConfig();
|
|
34
|
-
vitest_1.expect.fail("Should have thrown");
|
|
35
|
-
}
|
|
36
|
-
catch (e) {
|
|
37
|
-
(0, vitest_1.expect)(e).toBeInstanceOf(errors_1.ConfigValidationError);
|
|
38
|
-
const error = e;
|
|
39
|
-
(0, vitest_1.expect)(error.errors).toHaveLength(3);
|
|
40
|
-
(0, vitest_1.expect)(error.errors).toContain("Missing required env: MISSING_1");
|
|
41
|
-
(0, vitest_1.expect)(error.errors).toContain("Missing required env: MISSING_2");
|
|
42
|
-
(0, vitest_1.expect)(error.errors).toContain("Missing required env: MISSING_3");
|
|
43
|
-
}
|
|
44
|
-
});
|
|
45
|
-
});
|
|
46
|
-
(0, vitest_1.describe)("envOptional()", () => {
|
|
47
|
-
(0, vitest_1.it)("should resolve optional env var", () => {
|
|
48
|
-
process.env.LOG_LEVEL = "debug";
|
|
49
|
-
const getConfig = (0, define_config_1.defineConfig)({ logLevel: (0, env_spec_1.envOptional)("LOG_LEVEL") });
|
|
50
|
-
(0, vitest_1.expect)(getConfig().logLevel).toBe("debug");
|
|
51
|
-
});
|
|
52
|
-
(0, vitest_1.it)("should use default value when env is not set", () => {
|
|
53
|
-
const getConfig = (0, define_config_1.defineConfig)({ logLevel: (0, env_spec_1.envOptional)("LOG_LEVEL", "info") });
|
|
54
|
-
(0, vitest_1.expect)(getConfig().logLevel).toBe("info");
|
|
55
|
-
});
|
|
56
|
-
(0, vitest_1.it)("should return undefined when no default and env not set", () => {
|
|
57
|
-
const getConfig = (0, define_config_1.defineConfig)({ logLevel: (0, env_spec_1.envOptional)("LOG_LEVEL") });
|
|
58
|
-
(0, vitest_1.expect)(getConfig().logLevel).toBeUndefined();
|
|
59
|
-
});
|
|
60
|
-
});
|
|
61
|
-
(0, vitest_1.describe)("envNumber()", () => {
|
|
62
|
-
(0, vitest_1.it)("should resolve and transform to number", () => {
|
|
63
|
-
process.env.PORT = "3000";
|
|
64
|
-
const getConfig = (0, define_config_1.defineConfig)({ port: (0, env_spec_1.envNumber)("PORT") });
|
|
65
|
-
(0, vitest_1.expect)(getConfig().port).toBe(3000);
|
|
66
|
-
(0, vitest_1.expect)(typeof getConfig().port).toBe("number");
|
|
67
|
-
});
|
|
68
|
-
(0, vitest_1.it)("should throw for missing required number env", () => {
|
|
69
|
-
const getConfig = (0, define_config_1.defineConfig)({ port: (0, env_spec_1.envNumber)("PORT") });
|
|
70
|
-
(0, vitest_1.expect)(() => getConfig()).toThrow("Missing required env: PORT");
|
|
71
|
-
});
|
|
72
|
-
});
|
|
73
|
-
(0, vitest_1.describe)("envNumberOptional()", () => {
|
|
74
|
-
(0, vitest_1.it)("should resolve optional number with default", () => {
|
|
75
|
-
const getConfig = (0, define_config_1.defineConfig)({ timeout: (0, env_spec_1.envNumberOptional)("TIMEOUT", 5000) });
|
|
76
|
-
(0, vitest_1.expect)(getConfig().timeout).toBe(5000);
|
|
77
|
-
});
|
|
78
|
-
(0, vitest_1.it)("should parse env value when set", () => {
|
|
79
|
-
process.env.TIMEOUT = "10000";
|
|
80
|
-
const getConfig = (0, define_config_1.defineConfig)({ timeout: (0, env_spec_1.envNumberOptional)("TIMEOUT", 5000) });
|
|
81
|
-
(0, vitest_1.expect)(getConfig().timeout).toBe(10000);
|
|
82
|
-
});
|
|
83
|
-
});
|
|
84
|
-
(0, vitest_1.describe)("envBoolean()", () => {
|
|
85
|
-
(0, vitest_1.it)("should parse 'true' as true", () => {
|
|
86
|
-
process.env.DEBUG = "true";
|
|
87
|
-
const getConfig = (0, define_config_1.defineConfig)({ debug: (0, env_spec_1.envBoolean)("DEBUG") });
|
|
88
|
-
(0, vitest_1.expect)(getConfig().debug).toBe(true);
|
|
89
|
-
});
|
|
90
|
-
(0, vitest_1.it)("should parse '1' as true", () => {
|
|
91
|
-
process.env.DEBUG = "1";
|
|
92
|
-
const getConfig = (0, define_config_1.defineConfig)({ debug: (0, env_spec_1.envBoolean)("DEBUG") });
|
|
93
|
-
(0, vitest_1.expect)(getConfig().debug).toBe(true);
|
|
94
|
-
});
|
|
95
|
-
(0, vitest_1.it)("should parse other values as false", () => {
|
|
96
|
-
process.env.DEBUG = "false";
|
|
97
|
-
const getConfig = (0, define_config_1.defineConfig)({ debug: (0, env_spec_1.envBoolean)("DEBUG") });
|
|
98
|
-
(0, vitest_1.expect)(getConfig().debug).toBe(false);
|
|
99
|
-
});
|
|
100
|
-
(0, vitest_1.it)("should use default value when not set", () => {
|
|
101
|
-
const getConfig = (0, define_config_1.defineConfig)({ debug: (0, env_spec_1.envBoolean)("DEBUG", true) });
|
|
102
|
-
(0, vitest_1.expect)(getConfig().debug).toBe(true);
|
|
103
|
-
});
|
|
104
|
-
});
|
|
105
|
-
(0, vitest_1.describe)("envJson()", () => {
|
|
106
|
-
(0, vitest_1.it)("should parse JSON env var", () => {
|
|
107
|
-
process.env.CONFIG = JSON.stringify({ key: "value", num: 42 });
|
|
108
|
-
const getConfig = (0, define_config_1.defineConfig)({
|
|
109
|
-
config: (0, env_spec_1.envJson)("CONFIG"),
|
|
110
|
-
});
|
|
111
|
-
(0, vitest_1.expect)(getConfig().config).toEqual({ key: "value", num: 42 });
|
|
112
|
-
});
|
|
113
|
-
(0, vitest_1.it)("should throw for invalid JSON", () => {
|
|
114
|
-
process.env.CONFIG = "not-valid-json";
|
|
115
|
-
const getConfig = (0, define_config_1.defineConfig)({ config: (0, env_spec_1.envJson)("CONFIG") });
|
|
116
|
-
(0, vitest_1.expect)(() => getConfig()).toThrow("Failed to transform CONFIG");
|
|
117
|
-
});
|
|
118
|
-
(0, vitest_1.it)("should throw for missing required JSON env", () => {
|
|
119
|
-
const getConfig = (0, define_config_1.defineConfig)({ config: (0, env_spec_1.envJson)("CONFIG") });
|
|
120
|
-
(0, vitest_1.expect)(() => getConfig()).toThrow("Missing required env: CONFIG");
|
|
121
|
-
});
|
|
122
|
-
});
|
|
123
|
-
(0, vitest_1.describe)("envJsonOptional()", () => {
|
|
124
|
-
(0, vitest_1.it)("should return default when not set", () => {
|
|
125
|
-
const defaultConfig = { level: "info" };
|
|
126
|
-
const getConfig = (0, define_config_1.defineConfig)({ config: (0, env_spec_1.envJsonOptional)("CONFIG", defaultConfig) });
|
|
127
|
-
(0, vitest_1.expect)(getConfig().config).toEqual(defaultConfig);
|
|
128
|
-
});
|
|
129
|
-
(0, vitest_1.it)("should parse JSON when set", () => {
|
|
130
|
-
process.env.CONFIG = JSON.stringify({ level: "debug" });
|
|
131
|
-
const getConfig = (0, define_config_1.defineConfig)({ config: (0, env_spec_1.envJsonOptional)("CONFIG", { level: "info" }) });
|
|
132
|
-
(0, vitest_1.expect)(getConfig().config).toEqual({ level: "debug" });
|
|
133
|
-
});
|
|
134
|
-
});
|
|
135
|
-
(0, vitest_1.describe)("singleton behavior", () => {
|
|
136
|
-
(0, vitest_1.it)("should return same instance in non-test environment", () => {
|
|
137
|
-
process.env.NODE_ENV = "production";
|
|
138
|
-
process.env.API_KEY = "key1";
|
|
139
|
-
const getConfig = (0, define_config_1.defineConfig)({ apiKey: (0, env_spec_1.env)("API_KEY") });
|
|
140
|
-
const config1 = getConfig();
|
|
141
|
-
process.env.API_KEY = "key2";
|
|
142
|
-
const config2 = getConfig();
|
|
143
|
-
(0, vitest_1.expect)(config1).toBe(config2);
|
|
144
|
-
(0, vitest_1.expect)(config1.apiKey).toBe("key1");
|
|
145
|
-
});
|
|
146
|
-
(0, vitest_1.it)("should recreate config in test environment", () => {
|
|
147
|
-
process.env.NODE_ENV = "test";
|
|
148
|
-
process.env.API_KEY = "key1";
|
|
149
|
-
const getConfig = (0, define_config_1.defineConfig)({ apiKey: (0, env_spec_1.env)("API_KEY") });
|
|
150
|
-
const config1 = getConfig();
|
|
151
|
-
(0, vitest_1.expect)(config1.apiKey).toBe("key1");
|
|
152
|
-
process.env.API_KEY = "key2";
|
|
153
|
-
const config2 = getConfig();
|
|
154
|
-
(0, vitest_1.expect)(config2.apiKey).toBe("key2");
|
|
155
|
-
});
|
|
156
|
-
});
|
|
157
|
-
(0, vitest_1.describe)("type inference", () => {
|
|
158
|
-
(0, vitest_1.it)("should infer correct types", () => {
|
|
159
|
-
process.env.API_KEY = "secret";
|
|
160
|
-
process.env.PORT = "3000";
|
|
161
|
-
process.env.DEBUG = "true";
|
|
162
|
-
process.env.CONFIG = "{}";
|
|
163
|
-
const getConfig = (0, define_config_1.defineConfig)({
|
|
164
|
-
apiKey: (0, env_spec_1.env)("API_KEY"),
|
|
165
|
-
port: (0, env_spec_1.envNumber)("PORT"),
|
|
166
|
-
debug: (0, env_spec_1.envBoolean)("DEBUG"),
|
|
167
|
-
optional: (0, env_spec_1.envOptional)("OPTIONAL"),
|
|
168
|
-
json: (0, env_spec_1.envJson)("CONFIG"),
|
|
169
|
-
});
|
|
170
|
-
const config = getConfig();
|
|
171
|
-
// Type assertions - these would fail at compile time if types are wrong
|
|
172
|
-
const _apiKey = config.apiKey;
|
|
173
|
-
const _port = config.port;
|
|
174
|
-
const _debug = config.debug;
|
|
175
|
-
const _optional = config.optional;
|
|
176
|
-
const _json = config.json;
|
|
177
|
-
(0, vitest_1.expect)(_apiKey).toBeDefined();
|
|
178
|
-
(0, vitest_1.expect)(_port).toBeDefined();
|
|
179
|
-
(0, vitest_1.expect)(_debug).toBeDefined();
|
|
180
|
-
(0, vitest_1.expect)(_json).toBeDefined();
|
|
181
|
-
});
|
|
182
|
-
});
|
|
183
|
-
});
|
|
184
|
-
//# sourceMappingURL=env-spec.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"env-spec.spec.js","sourceRoot":"","sources":["../../src/config/env-spec.spec.ts"],"names":[],"mappings":"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"}
|
package/dist/config/errors.d.ts
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Error thrown when config validation fails.
|
|
3
|
-
* Contains all validation errors collected during config resolution.
|
|
4
|
-
*/
|
|
5
|
-
export declare class ConfigValidationError extends Error {
|
|
6
|
-
readonly errors: string[];
|
|
7
|
-
constructor(errors: string[]);
|
|
8
|
-
}
|
|
9
|
-
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/config/errors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;aAChB,MAAM,EAAE,MAAM,EAAE;gBAAhB,MAAM,EAAE,MAAM,EAAE;CAI/C"}
|
package/dist/config/errors.js
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ConfigValidationError = void 0;
|
|
4
|
-
/**
|
|
5
|
-
* Error thrown when config validation fails.
|
|
6
|
-
* Contains all validation errors collected during config resolution.
|
|
7
|
-
*/
|
|
8
|
-
class ConfigValidationError extends Error {
|
|
9
|
-
errors;
|
|
10
|
-
constructor(errors) {
|
|
11
|
-
super(`Config validation failed:\n - ${errors.join("\n - ")}`);
|
|
12
|
-
this.errors = errors;
|
|
13
|
-
this.name = "ConfigValidationError";
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
exports.ConfigValidationError = ConfigValidationError;
|
|
17
|
-
//# sourceMappingURL=errors.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/config/errors.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACH,MAAa,qBAAsB,SAAQ,KAAK;IAChB;IAA5B,YAA4B,MAAgB;QACxC,KAAK,CAAC,kCAAkC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QADzC,WAAM,GAAN,MAAM,CAAU;QAExC,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;IACxC,CAAC;CACJ;AALD,sDAKC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"load-env-files.d.ts","sourceRoot":"","sources":["../../src/config/load-env-files.ts"],"names":[],"mappings":"AAKA,wBAAgB,YAAY,CAAC,EACzB,QAAQ,EACR,OAAO,GACV,GAAE;IACC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CACf,GAAG,IAAI,CA0BZ"}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.loadEnvFiles = loadEnvFiles;
|
|
7
|
-
const node_fs_1 = __importDefault(require("node:fs"));
|
|
8
|
-
const node_path_1 = __importDefault(require("node:path"));
|
|
9
|
-
const dotenv_1 = __importDefault(require("dotenv"));
|
|
10
|
-
function loadEnvFiles({ basePath, nodeEnv, } = {}) {
|
|
11
|
-
const basePath_ = basePath ?? process.cwd();
|
|
12
|
-
const nodeEnv_ = nodeEnv ?? process.env.NODE_ENV ?? "development";
|
|
13
|
-
// List of environment files in the order of precedence
|
|
14
|
-
const envFiles = [
|
|
15
|
-
".env", // Default
|
|
16
|
-
".env.local", // Local overrides
|
|
17
|
-
`.env.${nodeEnv_}`, // Environment-specific settings
|
|
18
|
-
`.env.${nodeEnv_}.local`, // Local overrides of environment-specific settings
|
|
19
|
-
];
|
|
20
|
-
// Function to load a single env file
|
|
21
|
-
const loadEnvFile = (filePath) => {
|
|
22
|
-
if (node_fs_1.default.existsSync(filePath)) {
|
|
23
|
-
dotenv_1.default.config({
|
|
24
|
-
path: filePath,
|
|
25
|
-
});
|
|
26
|
-
}
|
|
27
|
-
};
|
|
28
|
-
// Load env files in order of precedence
|
|
29
|
-
envFiles.reverse().forEach((file) => {
|
|
30
|
-
const filePath = node_path_1.default.resolve(basePath_, file);
|
|
31
|
-
loadEnvFile(filePath);
|
|
32
|
-
});
|
|
33
|
-
}
|
|
34
|
-
//# sourceMappingURL=load-env-files.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"load-env-files.js","sourceRoot":"","sources":["../../src/config/load-env-files.ts"],"names":[],"mappings":";;;;;AAKA,oCAgCC;AArCD,sDAAyB;AACzB,0DAA6B;AAE7B,oDAA4B;AAE5B,SAAgB,YAAY,CAAC,EACzB,QAAQ,EACR,OAAO,MAIP,EAAE;IACF,MAAM,SAAS,GAAG,QAAQ,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAC5C,MAAM,QAAQ,GAAG,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,aAAa,CAAC;IAElE,uDAAuD;IACvD,MAAM,QAAQ,GAAG;QACb,MAAM,EAAE,UAAU;QAClB,YAAY,EAAE,kBAAkB;QAChC,QAAQ,QAAQ,EAAE,EAAE,gCAAgC;QACpD,QAAQ,QAAQ,QAAQ,EAAE,mDAAmD;KAChF,CAAC;IAEF,qCAAqC;IACrC,MAAM,WAAW,GAAG,CAAC,QAAgB,EAAE,EAAE;QACrC,IAAI,iBAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,gBAAM,CAAC,MAAM,CAAC;gBACV,IAAI,EAAE,QAAQ;aACjB,CAAC,CAAC;QACP,CAAC;IACL,CAAC,CAAC;IAEF,wCAAwC;IACxC,QAAQ,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QAChC,MAAM,QAAQ,GAAG,mBAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAC/C,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACP,CAAC"}
|