@ayronforge/envil 0.6.0
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/LICENSE +21 -0
- package/README.md +111 -0
- package/dist/cli/dotenv-codec.d.ts +3 -0
- package/dist/cli/fs-utils.d.ts +7 -0
- package/dist/cli/generate-env-ts.d.ts +2 -0
- package/dist/cli/generate-example.d.ts +2 -0
- package/dist/cli/index.d.ts +7 -0
- package/dist/cli/infer.d.ts +6 -0
- package/dist/cli/literals.d.ts +5 -0
- package/dist/cli/manifest-codec.d.ts +3 -0
- package/dist/cli/types.d.ts +61 -0
- package/dist/cli.d.ts +8 -0
- package/dist/cli.js +1249 -0
- package/dist/cli.js.map +18 -0
- package/dist/env.d.ts +14 -0
- package/dist/errors.d.ts +10 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +443 -0
- package/dist/index.js.map +17 -0
- package/dist/prefix.d.ts +6 -0
- package/dist/presets.d.ts +30 -0
- package/dist/presets.js +26 -0
- package/dist/presets.js.map +10 -0
- package/dist/resolvers/aws.d.ts +9 -0
- package/dist/resolvers/aws.js +146 -0
- package/dist/resolvers/aws.js.map +12 -0
- package/dist/resolvers/azure.d.ts +10 -0
- package/dist/resolvers/azure.js +85 -0
- package/dist/resolvers/azure.js.map +12 -0
- package/dist/resolvers/gcp.d.ts +10 -0
- package/dist/resolvers/gcp.js +88 -0
- package/dist/resolvers/gcp.js.map +12 -0
- package/dist/resolvers/onepassword.d.ts +9 -0
- package/dist/resolvers/onepassword.js +91 -0
- package/dist/resolvers/onepassword.js.map +12 -0
- package/dist/resolvers/remote.d.ts +9 -0
- package/dist/resolvers/types.d.ts +15 -0
- package/dist/resolvers/utils.d.ts +15 -0
- package/dist/safe-env.d.ts +23 -0
- package/dist/schemas.d.ts +30 -0
- package/dist/types.d.ts +41 -0
- package/package.json +109 -0
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { Schema } from "effect";
|
|
2
|
+
export declare const DEFAULT_VALUE_ANNOTATION: unique symbol;
|
|
3
|
+
export declare const withDefault: {
|
|
4
|
+
<S extends Schema.Schema.Any>(defaultValue: NonNullable<Schema.Schema.Type<S>>): (schema: S) => Schema.transform<Schema.UndefinedOr<S>, Schema.SchemaClass<NonNullable<Schema.Schema.Type<S>>>>;
|
|
5
|
+
<S extends Schema.Schema.Any>(schema: S, defaultValue: NonNullable<Schema.Schema.Type<S>>): Schema.transform<Schema.UndefinedOr<S>, Schema.SchemaClass<NonNullable<Schema.Schema.Type<S>>>>;
|
|
6
|
+
};
|
|
7
|
+
export declare const optional: <S extends Schema.Schema.Any>(schema: S) => Schema.UndefinedOr<S>;
|
|
8
|
+
export declare const redacted: <S extends Schema.Schema.Any>(schema: S) => Schema.Redacted<S>;
|
|
9
|
+
export declare const requiredString: Schema.refine<string, typeof Schema.String>;
|
|
10
|
+
export declare const optionalString: Schema.UndefinedOr<typeof Schema.String>;
|
|
11
|
+
export declare const positiveNumber: Schema.refine<number, typeof Schema.NumberFromString>;
|
|
12
|
+
export declare const commaSeparated: Schema.transform<typeof Schema.String, Schema.mutable<Schema.Array$<typeof Schema.String>>>;
|
|
13
|
+
export declare const commaSeparatedNumbers: Schema.transform<typeof Schema.String, Schema.mutable<Schema.Array$<typeof Schema.Number>>>;
|
|
14
|
+
export declare const url: Schema.filter<typeof Schema.String>;
|
|
15
|
+
export type Url = Schema.Schema.Type<typeof url>;
|
|
16
|
+
export declare const postgresUrl: Schema.filter<Schema.filter<typeof Schema.String>>;
|
|
17
|
+
export type PostgresUrl = Schema.Schema.Type<typeof postgresUrl>;
|
|
18
|
+
export declare const redisUrl: Schema.filter<Schema.filter<typeof Schema.String>>;
|
|
19
|
+
export type RedisUrl = Schema.Schema.Type<typeof redisUrl>;
|
|
20
|
+
export declare const commaSeparatedUrls: Schema.transform<typeof Schema.String, Schema.mutable<Schema.Array$<Schema.filter<typeof Schema.String>>>>;
|
|
21
|
+
export declare const boolean: Schema.transform<Schema.filter<typeof Schema.String>, typeof Schema.Boolean>;
|
|
22
|
+
export declare const integer: Schema.refine<number, typeof Schema.NumberFromString>;
|
|
23
|
+
export declare const nonNegativeNumber: Schema.refine<number, typeof Schema.NumberFromString>;
|
|
24
|
+
export declare const port: Schema.refine<number, Schema.filter<typeof Schema.NumberFromString>>;
|
|
25
|
+
export declare const stringEnum: <T extends readonly [string, ...string[]]>(values: T) => Schema.Literal<[...T]>;
|
|
26
|
+
export declare const json: <S extends Schema.Schema.Any>(schema: S) => Schema.transform<Schema.SchemaClass<unknown, string, never>, S>;
|
|
27
|
+
export declare const mongoUrl: Schema.filter<Schema.filter<typeof Schema.String>>;
|
|
28
|
+
export type MongoUrl = Schema.Schema.Type<typeof mongoUrl>;
|
|
29
|
+
export declare const mysqlUrl: Schema.filter<Schema.filter<typeof Schema.String>>;
|
|
30
|
+
export type MysqlUrl = Schema.Schema.Type<typeof mysqlUrl>;
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { Effect, Redacted, type Schema } from "effect";
|
|
2
|
+
import type { PrefixMap } from "./prefix.ts";
|
|
3
|
+
import type { ResolverError, ResolverResult } from "./resolvers/types.ts";
|
|
4
|
+
type AnySchema = Schema.Schema<any, any, never>;
|
|
5
|
+
export type { AnySchema };
|
|
6
|
+
export type SchemaDict = Record<string, AnySchema>;
|
|
7
|
+
export type InferEnv<T extends SchemaDict> = {
|
|
8
|
+
[K in keyof T]: Schema.Schema.Type<T[K]>;
|
|
9
|
+
};
|
|
10
|
+
export type MaybeRedact<T> = T extends Redacted.Redacted<infer _> ? T : Redacted.Redacted<T>;
|
|
11
|
+
export type InferEnvAutoRedacted<T extends SchemaDict, ResolverKeys extends string, Prefix extends string = ""> = {
|
|
12
|
+
[K in keyof T]: `${Prefix}${K & string}` extends ResolverKeys ? MaybeRedact<Schema.Schema.Type<T[K]>> : Schema.Schema.Type<T[K]>;
|
|
13
|
+
};
|
|
14
|
+
export type ExtractResolverKeys<T extends readonly any[]> = T[number] extends infer U ? U extends Effect.Effect<ResolverResult<infer K>, any, any> ? K : never : never;
|
|
15
|
+
export type PrefixStr<P> = P extends string ? P : "";
|
|
16
|
+
export type AnyEnv = Readonly<Record<string, unknown>>;
|
|
17
|
+
export type MergeEnvs<T extends readonly AnyEnv[]> = T extends readonly [
|
|
18
|
+
infer First extends AnyEnv,
|
|
19
|
+
...infer Rest extends readonly AnyEnv[]
|
|
20
|
+
] ? First & MergeEnvs<Rest> : {};
|
|
21
|
+
export type KnownKeys<T> = keyof {
|
|
22
|
+
[K in keyof T as string extends K ? never : K]: T[K];
|
|
23
|
+
};
|
|
24
|
+
export type EnvResult<TExtends extends readonly AnyEnv[], TServer extends SchemaDict, TClient extends SchemaDict, TShared extends SchemaDict> = Readonly<Omit<MergeEnvs<TExtends>, KnownKeys<TServer> | KnownKeys<TClient> | KnownKeys<TShared>> & InferEnv<TServer & TClient & TShared>>;
|
|
25
|
+
export type EnvResultAutoRedacted<TExtends extends readonly AnyEnv[], TServer extends SchemaDict, TClient extends SchemaDict, TShared extends SchemaDict, ResolverKeys extends string, Prefix extends string = ""> = Readonly<Omit<MergeEnvs<TExtends>, KnownKeys<TServer> | KnownKeys<TClient> | KnownKeys<TShared>> & InferEnvAutoRedacted<TServer & TClient & TShared, ResolverKeys, Prefix>>;
|
|
26
|
+
export type { PrefixMap };
|
|
27
|
+
export interface EnvOptions<TServer extends SchemaDict, TClient extends SchemaDict, TShared extends SchemaDict, TExtends extends readonly AnyEnv[] = readonly []> {
|
|
28
|
+
server?: TServer;
|
|
29
|
+
client?: TClient;
|
|
30
|
+
shared?: TShared;
|
|
31
|
+
extends?: TExtends;
|
|
32
|
+
prefix?: string | PrefixMap;
|
|
33
|
+
runtimeEnv?: Record<string, string | undefined>;
|
|
34
|
+
isServer?: boolean;
|
|
35
|
+
emptyStringAsUndefined?: boolean;
|
|
36
|
+
onValidationError?: (errors: string[]) => void;
|
|
37
|
+
}
|
|
38
|
+
export interface InternalEnvOptions<TServer extends SchemaDict, TClient extends SchemaDict, TShared extends SchemaDict, TExtends extends readonly AnyEnv[] = readonly []> extends EnvOptions<TServer, TClient, TShared, TExtends> {
|
|
39
|
+
_autoRedactKeys?: Set<string>;
|
|
40
|
+
}
|
|
41
|
+
export type ResolverEffects = readonly Effect.Effect<ResolverResult<any>, ResolverError>[];
|
package/package.json
ADDED
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@ayronforge/envil",
|
|
3
|
+
"version": "0.6.0",
|
|
4
|
+
"description": "Type-safe environment variable validation using Effect Schema",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"effect",
|
|
7
|
+
"env",
|
|
8
|
+
"environment",
|
|
9
|
+
"schema",
|
|
10
|
+
"type-safe",
|
|
11
|
+
"typescript",
|
|
12
|
+
"validation"
|
|
13
|
+
],
|
|
14
|
+
"homepage": "https://github.com/ayronforge/envil#readme",
|
|
15
|
+
"bugs": {
|
|
16
|
+
"url": "https://github.com/ayronforge/envil/issues"
|
|
17
|
+
},
|
|
18
|
+
"license": "MIT",
|
|
19
|
+
"author": "Pedro Toledo",
|
|
20
|
+
"repository": {
|
|
21
|
+
"type": "git",
|
|
22
|
+
"url": "https://github.com/ayronforge/envil.git"
|
|
23
|
+
},
|
|
24
|
+
"bin": {
|
|
25
|
+
"envil": "./dist/cli.js"
|
|
26
|
+
},
|
|
27
|
+
"files": [
|
|
28
|
+
"dist"
|
|
29
|
+
],
|
|
30
|
+
"type": "module",
|
|
31
|
+
"main": "./dist/index.js",
|
|
32
|
+
"types": "./dist/index.d.ts",
|
|
33
|
+
"exports": {
|
|
34
|
+
".": {
|
|
35
|
+
"types": "./dist/index.d.ts",
|
|
36
|
+
"import": "./dist/index.js"
|
|
37
|
+
},
|
|
38
|
+
"./presets": {
|
|
39
|
+
"types": "./dist/presets.d.ts",
|
|
40
|
+
"import": "./dist/presets.js"
|
|
41
|
+
},
|
|
42
|
+
"./aws": {
|
|
43
|
+
"types": "./dist/resolvers/aws.d.ts",
|
|
44
|
+
"import": "./dist/resolvers/aws.js"
|
|
45
|
+
},
|
|
46
|
+
"./azure": {
|
|
47
|
+
"types": "./dist/resolvers/azure.d.ts",
|
|
48
|
+
"import": "./dist/resolvers/azure.js"
|
|
49
|
+
},
|
|
50
|
+
"./gcp": {
|
|
51
|
+
"types": "./dist/resolvers/gcp.d.ts",
|
|
52
|
+
"import": "./dist/resolvers/gcp.js"
|
|
53
|
+
},
|
|
54
|
+
"./1password": {
|
|
55
|
+
"types": "./dist/resolvers/onepassword.d.ts",
|
|
56
|
+
"import": "./dist/resolvers/onepassword.js"
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
"scripts": {
|
|
60
|
+
"build": "bun run build:js && bun run build:types",
|
|
61
|
+
"build:js": "bun run scripts/build-cli.ts",
|
|
62
|
+
"build:types": "tsgo --noEmit false --declaration --emitDeclarationOnly --outDir dist --rootDir src",
|
|
63
|
+
"prepublishOnly": "bun run build",
|
|
64
|
+
"typecheck": "tsgo --noEmit",
|
|
65
|
+
"lint": "oxlint --type-aware ./src",
|
|
66
|
+
"lint:fix": "oxlint --type-aware --fix ./src",
|
|
67
|
+
"fmt": "oxfmt ./src ./docs",
|
|
68
|
+
"fmt:check": "oxfmt --check ./src",
|
|
69
|
+
"check": "bun run lint:fix && bun run fmt",
|
|
70
|
+
"test": "bun test",
|
|
71
|
+
"test:coverage": "bun test --coverage"
|
|
72
|
+
},
|
|
73
|
+
"devDependencies": {
|
|
74
|
+
"@types/bun": "^1.3.8",
|
|
75
|
+
"@types/node": "^25.2.1",
|
|
76
|
+
"@typescript/native-preview": "^7.0.0-dev.20260205.1",
|
|
77
|
+
"oxfmt": "^0.24.0",
|
|
78
|
+
"oxlint": "^1.39.0",
|
|
79
|
+
"oxlint-tsgolint": "^0.11.0"
|
|
80
|
+
},
|
|
81
|
+
"peerDependencies": {
|
|
82
|
+
"@1password/sdk": "^0.3.1",
|
|
83
|
+
"@aws-sdk/client-secrets-manager": "^3.984.0",
|
|
84
|
+
"@azure/identity": "^4.13.0",
|
|
85
|
+
"@azure/keyvault-secrets": "^4.10.0",
|
|
86
|
+
"@google-cloud/secret-manager": "^6.1.1",
|
|
87
|
+
"effect": "^3.19.11"
|
|
88
|
+
},
|
|
89
|
+
"peerDependenciesMeta": {
|
|
90
|
+
"@aws-sdk/client-secrets-manager": {
|
|
91
|
+
"optional": true
|
|
92
|
+
},
|
|
93
|
+
"@azure/keyvault-secrets": {
|
|
94
|
+
"optional": true
|
|
95
|
+
},
|
|
96
|
+
"@azure/identity": {
|
|
97
|
+
"optional": true
|
|
98
|
+
},
|
|
99
|
+
"@google-cloud/secret-manager": {
|
|
100
|
+
"optional": true
|
|
101
|
+
},
|
|
102
|
+
"@1password/sdk": {
|
|
103
|
+
"optional": true
|
|
104
|
+
}
|
|
105
|
+
},
|
|
106
|
+
"engines": {
|
|
107
|
+
"node": ">=18"
|
|
108
|
+
}
|
|
109
|
+
}
|