arkenv 1.0.0-alpha.1 → 1.0.0-alpha.3

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.
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-Br22fqkz.d.mts","names":["_$arktype","_$arktype_internal_keywords_string_ts0","_$arktype_internal_attributes_ts0","$","trim","To","Submodule","normalize","capitalize","stringDate","stringInteger","ip","stringJson","lower","stringNumeric","url","uuid","Scope","string","In","root","alpha","alphanumeric","hex","base64","creditCard","date","digits","email","integer","json","numeric","regex","semver","upper","preformatted","host","number","NaN","Infinity","epoch","safe","NegativeInfinity","port","Dict","T","Record","StandardTypedV1","Input","Output","Props","Schema","Types","NonNullable","version","vendor","types","input","output","InferInput","InferOutput","StandardSchemaV1","Options","Result","Promise","SuccessResult","FailureResult","Record","Issue","ReadonlyArray","PropertyKey","PathSegment","validate","value","options","issues","libraryOptions","message","path","key","StandardJSONSchemaV1","Converter","Target","jsonSchema","target","type","StandardSchemaV1","InferType","T","Record","errors","Any","_Input","Output","value","R","t","U","_Scope","$","Type","SchemaShape","Record","CompiledEnvSchema"],"sources":["../../internal/scope/dist/index.d.ts","../../internal/types/dist/helpers.d.ts","../../internal/types/dist/standard-schema.d.ts","../../internal/types/dist/infer-type.d.ts","../../internal/types/dist/schema.d.ts"],"mappings":"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"}
@@ -1,210 +0,0 @@
1
- import * as _$arktype_internal_keywords_string_ts0 from "arktype/internal/keywords/string.ts";
2
- import * as _$arktype_internal_attributes_ts0 from "arktype/internal/attributes.ts";
3
- import * as _$arktype from "arktype";
4
- import { Type, type } from "arktype";
5
-
6
- //#region ../internal/scope/dist/index.d.ts
7
- //#region src/root.d.ts
8
- /**
9
- * The root scope for the ArkEnv library,
10
- * containing extensions to the ArkType scopes with ArkEnv-specific types
11
- * like `string.host` and `number.port`.
12
- */
13
- declare const $: _$arktype.Scope<{
14
- string: _$arktype.Submodule<{
15
- trim: _$arktype.Submodule<_$arktype_internal_keywords_string_ts0.trim.$ & {
16
- " arkInferred": (In: string) => _$arktype_internal_attributes_ts0.To<string>;
17
- }>;
18
- normalize: _$arktype.Submodule<_$arktype_internal_keywords_string_ts0.normalize.$ & {
19
- " arkInferred": (In: string) => _$arktype_internal_attributes_ts0.To<string>;
20
- }>;
21
- root: string;
22
- alpha: string;
23
- alphanumeric: string;
24
- hex: string;
25
- base64: _$arktype.Submodule<{
26
- root: string;
27
- url: string;
28
- } & {
29
- " arkInferred": string;
30
- }>;
31
- capitalize: _$arktype.Submodule<_$arktype_internal_keywords_string_ts0.capitalize.$ & {
32
- " arkInferred": (In: string) => _$arktype_internal_attributes_ts0.To<string>;
33
- }>;
34
- creditCard: string;
35
- date: _$arktype.Submodule<_$arktype_internal_keywords_string_ts0.stringDate.$ & {
36
- " arkInferred": string;
37
- }>;
38
- digits: string;
39
- email: string;
40
- integer: _$arktype.Submodule<_$arktype_internal_keywords_string_ts0.stringInteger.$ & {
41
- " arkInferred": string;
42
- }>;
43
- ip: _$arktype.Submodule<_$arktype_internal_keywords_string_ts0.ip.$ & {
44
- " arkInferred": string;
45
- }>;
46
- json: _$arktype.Submodule<_$arktype_internal_keywords_string_ts0.stringJson.$ & {
47
- " arkInferred": string;
48
- }>;
49
- lower: _$arktype.Submodule<_$arktype_internal_keywords_string_ts0.lower.$ & {
50
- " arkInferred": (In: string) => _$arktype_internal_attributes_ts0.To<string>;
51
- }>;
52
- numeric: _$arktype.Submodule<_$arktype_internal_keywords_string_ts0.stringNumeric.$ & {
53
- " arkInferred": string;
54
- }>;
55
- regex: string;
56
- semver: string;
57
- upper: _$arktype.Submodule<{
58
- root: (In: string) => _$arktype_internal_attributes_ts0.To<string>;
59
- preformatted: string;
60
- } & {
61
- " arkInferred": (In: string) => _$arktype_internal_attributes_ts0.To<string>;
62
- }>;
63
- url: _$arktype.Submodule<_$arktype_internal_keywords_string_ts0.url.$ & {
64
- " arkInferred": string;
65
- }>;
66
- uuid: _$arktype.Submodule<_$arktype_internal_keywords_string_ts0.uuid.$ & {
67
- " arkInferred": string;
68
- }>;
69
- " arkInferred": string;
70
- host: string;
71
- }>;
72
- number: _$arktype.Submodule<{
73
- NaN: number;
74
- Infinity: number;
75
- root: number;
76
- integer: number;
77
- " arkInferred": number;
78
- epoch: number;
79
- safe: number;
80
- NegativeInfinity: number;
81
- port: number;
82
- }>;
83
- }>;
84
- type $ = (typeof $)["t"]; //#endregion
85
- //#endregion
86
- //#region ../internal/types/dist/helpers.d.ts
87
- type Dict<T> = Record<string, T | undefined>;
88
- //#endregion
89
- //#region ../internal/types/dist/standard-schema.d.ts
90
- /**
91
- * @see https://github.com/standard-schema/standard-schema/tree/3130ce43fdd848d9ab49dbb0458d04f18459961c/packages/spec
92
- *
93
- * Copied from standard-schema (MIT License)
94
- * Copyright (c) 2024 Colin McDannell
95
- */
96
- /** The Standard Typed interface. This is a base type extended by other specs. */
97
- interface StandardTypedV1<Input = unknown, Output = Input> {
98
- /** The Standard properties. */
99
- readonly "~standard": StandardTypedV1.Props<Input, Output>;
100
- }
101
- declare namespace StandardTypedV1 {
102
- /** The Standard Typed properties interface. */
103
- interface Props<Input = unknown, Output = Input> {
104
- /** The version number of the standard. */
105
- readonly version: 1;
106
- /** The vendor name of the schema library. */
107
- readonly vendor: string;
108
- /** Inferred types associated with the schema. */
109
- readonly types?: Types<Input, Output> | undefined;
110
- }
111
- /** The Standard Typed types interface. */
112
- interface Types<Input = unknown, Output = Input> {
113
- /** The input type of the schema. */
114
- readonly input: Input;
115
- /** The output type of the schema. */
116
- readonly output: Output;
117
- }
118
- /** Infers the input type of a Standard Typed. */
119
- type InferInput<Schema extends StandardTypedV1> = NonNullable<Schema["~standard"]["types"]>["input"];
120
- /** Infers the output type of a Standard Typed. */
121
- type InferOutput<Schema extends StandardTypedV1> = NonNullable<Schema["~standard"]["types"]>["output"];
122
- }
123
- /** The Standard Schema interface. */
124
- interface StandardSchemaV1<Input = unknown, Output = Input> {
125
- /** The Standard Schema properties. */
126
- readonly "~standard": StandardSchemaV1.Props<Input, Output>;
127
- }
128
- declare namespace StandardSchemaV1 {
129
- /** The Standard Schema properties interface. */
130
- interface Props<Input = unknown, Output = Input> extends StandardTypedV1.Props<Input, Output> {
131
- /** Validates unknown input values. */
132
- readonly validate: (value: unknown, options?: StandardSchemaV1.Options | undefined) => Result<Output> | Promise<Result<Output>>;
133
- }
134
- /** The result interface of the validate function. */
135
- type Result<Output> = SuccessResult<Output> | FailureResult;
136
- /** The result interface if validation succeeds. */
137
- interface SuccessResult<Output> {
138
- /** The typed output value. */
139
- readonly value: Output;
140
- /** A falsy value for `issues` indicates success. */
141
- readonly issues?: undefined;
142
- }
143
- interface Options {
144
- /** Explicit support for additional vendor-specific parameters, if needed. */
145
- readonly libraryOptions?: Record<string, unknown> | undefined;
146
- }
147
- /** The result interface if validation fails. */
148
- interface FailureResult {
149
- /** The issues of failed validation. */
150
- readonly issues: ReadonlyArray<Issue>;
151
- }
152
- /** The issue interface of the failure output. */
153
- interface Issue {
154
- /** The error message of the issue. */
155
- readonly message: string;
156
- /** The path of the issue, if any. */
157
- readonly path?: ReadonlyArray<PropertyKey | PathSegment> | undefined;
158
- }
159
- /** The path segment interface of the issue. */
160
- interface PathSegment {
161
- /** The key representing a path segment. */
162
- readonly key: PropertyKey;
163
- }
164
- /** The Standard types interface. */
165
- interface Types<Input = unknown, Output = Input> extends StandardTypedV1.Types<Input, Output> {}
166
- /** Infers the input type of a Standard. */
167
- type InferInput<Schema extends StandardTypedV1> = StandardTypedV1.InferInput<Schema>;
168
- /** Infers the output type of a Standard. */
169
- type InferOutput<Schema extends StandardTypedV1> = StandardTypedV1.InferOutput<Schema>;
170
- }
171
- //#endregion
172
- //#region ../internal/types/dist/infer-type.d.ts
173
- /**
174
- * Extract the inferred type from a schema definition.
175
- * Supports both ArkType type definitions and Standard Schema 1.0 validators.
176
- *
177
- * For Standard Schema validators (e.g., Zod, Valibot), extracts the output type.
178
- * For ArkType definitions, checks the call signature or type properties.
179
- *
180
- * @template T - The schema definition to infer from
181
- */
182
- type InferType<T> = T extends StandardSchemaV1<infer _Input, infer Output> ? Output : T extends ((value: Record<string, string | undefined>) => infer R) ? R extends type.errors ? never : R : T extends {
183
- t: infer U;
184
- } ? U : T extends type.Any<infer U, infer _Scope> ? U : never;
185
- //#endregion
186
- //#region ../internal/types/dist/schema.d.ts
187
- type SchemaShape = Record<string, unknown>;
188
- /**
189
- * @internal
190
- *
191
- * Compiled ArkType schema accepted by ArkEnv.
192
- * Produced by `arktype.type(...)` or `scope(...)`.
193
- *
194
- * Represents an already-constructed ArkType `Type` instance that
195
- * defines the full environment schema.
196
- *
197
- * This form bypasses schema validation and is intended for advanced
198
- * or programmatic use cases where schemas are constructed dynamically.
199
- */
200
- type CompiledEnvSchema = Type<SchemaShape, $>;
201
- //#endregion
202
- export { Dict as a, StandardSchemaV1 as i, SchemaShape as n, $ as o, InferType as r, CompiledEnvSchema as t };
203
-
204
- // CJS Interop Shim
205
- if (module.exports && module.exports.default) {
206
- Object.assign(module.exports.default, module.exports);
207
- module.exports = module.exports.default;
208
- }
209
-
210
- //# sourceMappingURL=index-CzNfOanV.d.cts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-CzNfOanV.d.cts","names":["_$arktype","_$arktype_internal_keywords_string_ts0","_$arktype_internal_attributes_ts0","$","trim","To","Submodule","normalize","capitalize","stringDate","stringInteger","ip","stringJson","lower","stringNumeric","url","uuid","Scope","string","In","root","alpha","alphanumeric","hex","base64","creditCard","date","digits","email","integer","json","numeric","regex","semver","upper","preformatted","host","number","NaN","Infinity","epoch","safe","NegativeInfinity","port","Dict","T","Record","StandardTypedV1","Input","Output","Props","Schema","Types","NonNullable","version","vendor","types","input","output","InferInput","InferOutput","StandardSchemaV1","Options","Result","Promise","SuccessResult","FailureResult","Record","Issue","ReadonlyArray","PropertyKey","PathSegment","validate","value","options","issues","libraryOptions","message","path","key","StandardJSONSchemaV1","Converter","Target","jsonSchema","target","type","StandardSchemaV1","InferType","T","Record","errors","Any","_Input","Output","value","R","t","U","_Scope","$","Type","SchemaShape","Record","CompiledEnvSchema"],"sources":["../../internal/scope/dist/index.d.ts","../../internal/types/dist/helpers.d.ts","../../internal/types/dist/standard-schema.d.ts","../../internal/types/dist/infer-type.d.ts","../../internal/types/dist/schema.d.ts"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.cts","names":[],"sources":["../src/arkenv.ts","../src/index.ts"],"mappings":";;;;;;;;;;;;;AAyBA;;;;;;;;;KAAY,SAAA,QAAiB,MAAA,CAAG,QAAA,CAAS,GAAA,EAAK,CAAA;;;;;;AAQ9C;KAAY,KAAA,MAAW,CAAA,SAAU,WAAA,GAC9B,OAAA,CAAQ,GAAA,CAAI,MAAA,CAAG,KAAA,CAAM,CAAA,EAAG,CAAA,KACxB,SAAA,CAAU,CAAA;AAAA,KAER,kBAAA,GAAqB,IAAA;;;;KAKd,YAAA;EARG;;;EAYd,GAAA,GAAM,kBAAA;EAXK;;;EAeX,MAAA;EAjBgC;;;;;;;;;;;AAEjB;;;EA8Bf,eAAA;EA5B6B;AAK9B;;;;;;;EAiCC,WAAA;EAAA;;;;AA2BD;;;;;EAhBC,gBAAA;AAAA;;;;;;;;;;;;;iBAgBe,MAAA,iBAAuB,WAAA,CAAA,CACtC,GAAA,EAAK,SAAA,CAAU,CAAA,GACf,MAAA,GAAS,YAAA,GACP,OAAA,CAAQ,GAAA,CAAI,MAAA,CAAG,KAAA,CAAM,CAAA,EAAG,CAAA;AAAA,iBACX,MAAA,WAAiB,iBAAA,CAAA,CAChC,GAAA,EAAK,CAAA,EACL,MAAA,GAAS,YAAA,GACP,SAAA,CAAU,CAAA;AAAA,iBACG,MAAA,iBAAuB,WAAA,CAAA,CACtC,GAAA,EAAK,SAAA,CAAU,CAAA,IAAK,iBAAA,EACpB,MAAA,GAAS,YAAA,GACP,OAAA,CAAQ,GAAA,CAAI,MAAA,CAAG,KAAA,CAAM,CAAA,EAAG,CAAA,KAAM,SAAA,QAAiB,GAAA;;;;;;;;;AAxFlD;;;cCZa,IAAA,8BAAI,UAAA"}
package/dist/index.d.mts DELETED
@@ -1,179 +0,0 @@
1
- import { a as Dict, n as SchemaShape, o as $, r as InferType, t as CompiledEnvSchema } from "./index-Br22fqkz.mjs";
2
- import * as _$arktype from "arktype";
3
- import { distill, type as type$1 } from "arktype";
4
- import * as _$arktype_internal_keywords_string_ts0 from "arktype/internal/keywords/string.ts";
5
- import * as _$arktype_internal_attributes_ts0 from "arktype/internal/attributes.ts";
6
- import * as _$arktype_internal_type_ts0 from "arktype/internal/type.ts";
7
-
8
- //#region src/arkenv.d.ts
9
- /**
10
- * Declarative environment schema definition accepted by ArkEnv.
11
- *
12
- * Represents a declarative schema object mapping environment
13
- * variable names to schema definitions (e.g. ArkType DSL strings
14
- * or Standard Schema validators).
15
- *
16
- * This type is used to validate that a schema object is compatible with
17
- * ArkEnv’s validator scope before being compiled or parsed.
18
- *
19
- * Most users will provide schemas in this form.
20
- *
21
- * @template def - The schema shape object
22
- */
23
- type EnvSchema<def> = type$1.validate<def, $>;
24
- /**
25
- * Infer the validated and coerced environment object type from a schema.
26
- * Supports declarative schema shapes, compiled ArkType schemas, and Standard Schema validators.
27
- *
28
- * @template T - The schema type
29
- */
30
- type Infer<T> = T extends SchemaShape ? distill.Out<type$1.infer<T, $>> : InferType<T>;
31
- type RuntimeEnvironment = Dict<string>;
32
- /**
33
- * Configuration options for `arkenv`
34
- */
35
- type ArkEnvConfig = {
36
- /**
37
- * The environment variables to parse. Defaults to `process.env`
38
- */
39
- env?: RuntimeEnvironment;
40
- /**
41
- * Whether to coerce environment variables to their defined types. Defaults to `true`
42
- */
43
- coerce?: boolean;
44
- /**
45
- * Control how ArkEnv handles environment variables that are not defined in your schema.
46
- *
47
- * Defaults to `'delete'` to ensure your output object only contains
48
- * keys you've explicitly declared. This differs from ArkType's standard behavior, which
49
- * mirrors TypeScript by defaulting to `'ignore'`.
50
- *
51
- * - `delete` (ArkEnv default): Undeclared keys are allowed on input but stripped from the output.
52
- * - `ignore` (ArkType default): Undeclared keys are allowed and preserved in the output.
53
- * - `reject`: Undeclared keys will cause validation to fail.
54
- *
55
- * @default "delete"
56
- * @see https://arktype.io/docs/configuration#onundeclaredkey
57
- */
58
- onUndeclaredKey?: "ignore" | "delete" | "reject";
59
- /**
60
- * The format to use for array parsing when coercion is enabled.
61
- *
62
- * - `comma` (default): Strings are split by comma and trimmed.
63
- * - `json`: Strings are parsed as JSON.
64
- *
65
- * @default "comma"
66
- */
67
- arrayFormat?: "comma" | "json";
68
- /**
69
- * Whether to treat empty strings (`""`) as `undefined` before validation.
70
- *
71
- * When enabled, an environment variable set to an empty value (e.g. `PORT=`)
72
- * will be treated as if it were missing, allowing defaults to apply and
73
- * preventing validation errors for numeric or boolean types.
74
- *
75
- * @default false
76
- */
77
- emptyAsUndefined?: boolean;
78
- };
79
- /**
80
- * TODO: `SchemaShape` is basically `Record<string, unknown>`.
81
- * If possible, find a better type than "const T extends Record<string, unknown>",
82
- * and be as close as possible to the type accepted by ArkType's `type`.
83
- */
84
- /**
85
- * Utility to parse environment variables using ArkType or Standard Schema
86
- * @param def - The schema definition
87
- * @param config - The evaluation configuration
88
- * @returns The parsed environment variables
89
- * @throws An {@link ArkEnvError | error} if the environment variables are invalid.
90
- */
91
- declare function arkenv<const T extends SchemaShape>(def: EnvSchema<T>, config?: ArkEnvConfig): distill.Out<type$1.infer<T, $>>;
92
- declare function arkenv<T extends CompiledEnvSchema>(def: T, config?: ArkEnvConfig): InferType<T>;
93
- declare function arkenv<const T extends SchemaShape>(def: EnvSchema<T> | CompiledEnvSchema, config?: ArkEnvConfig): distill.Out<type$1.infer<T, $>> | InferType<typeof def>;
94
- //#endregion
95
- //#region src/index.d.ts
96
- /**
97
- * Like ArkType's `type`, but with ArkEnv's extra keywords, such as:
98
- *
99
- * - `string.host` – a hostname (e.g. `"localhost"`, `"127.0.0.1"`)
100
- * - `number.port` – a port number (e.g. `8080`)
101
- *
102
- * See ArkType's docs for the full API:
103
- * https://arktype.io/docs/type-api
104
- */
105
- declare const type: _$arktype_internal_type_ts0.TypeParser<{
106
- string: _$arktype.Submodule<{
107
- trim: _$arktype.Submodule<_$arktype_internal_keywords_string_ts0.trim.$ & {
108
- " arkInferred": (In: string) => _$arktype_internal_attributes_ts0.To<string>;
109
- }>;
110
- normalize: _$arktype.Submodule<_$arktype_internal_keywords_string_ts0.normalize.$ & {
111
- " arkInferred": (In: string) => _$arktype_internal_attributes_ts0.To<string>;
112
- }>;
113
- root: string;
114
- alpha: string;
115
- alphanumeric: string;
116
- hex: string;
117
- base64: _$arktype.Submodule<{
118
- root: string;
119
- url: string;
120
- } & {
121
- " arkInferred": string;
122
- }>;
123
- capitalize: _$arktype.Submodule<_$arktype_internal_keywords_string_ts0.capitalize.$ & {
124
- " arkInferred": (In: string) => _$arktype_internal_attributes_ts0.To<string>;
125
- }>;
126
- creditCard: string;
127
- date: _$arktype.Submodule<_$arktype_internal_keywords_string_ts0.stringDate.$ & {
128
- " arkInferred": string;
129
- }>;
130
- digits: string;
131
- email: string;
132
- integer: _$arktype.Submodule<_$arktype_internal_keywords_string_ts0.stringInteger.$ & {
133
- " arkInferred": string;
134
- }>;
135
- ip: _$arktype.Submodule<_$arktype_internal_keywords_string_ts0.ip.$ & {
136
- " arkInferred": string;
137
- }>;
138
- json: _$arktype.Submodule<_$arktype_internal_keywords_string_ts0.stringJson.$ & {
139
- " arkInferred": string;
140
- }>;
141
- lower: _$arktype.Submodule<_$arktype_internal_keywords_string_ts0.lower.$ & {
142
- " arkInferred": (In: string) => _$arktype_internal_attributes_ts0.To<string>;
143
- }>;
144
- numeric: _$arktype.Submodule<_$arktype_internal_keywords_string_ts0.stringNumeric.$ & {
145
- " arkInferred": string;
146
- }>;
147
- regex: string;
148
- semver: string;
149
- upper: _$arktype.Submodule<{
150
- root: (In: string) => _$arktype_internal_attributes_ts0.To<string>;
151
- preformatted: string;
152
- } & {
153
- " arkInferred": (In: string) => _$arktype_internal_attributes_ts0.To<string>;
154
- }>;
155
- url: _$arktype.Submodule<_$arktype_internal_keywords_string_ts0.url.$ & {
156
- " arkInferred": string;
157
- }>;
158
- uuid: _$arktype.Submodule<_$arktype_internal_keywords_string_ts0.uuid.$ & {
159
- " arkInferred": string;
160
- }>;
161
- " arkInferred": string;
162
- host: string;
163
- }>;
164
- number: _$arktype.Submodule<{
165
- NaN: number;
166
- Infinity: number;
167
- root: number;
168
- integer: number;
169
- " arkInferred": number;
170
- epoch: number;
171
- safe: number;
172
- NegativeInfinity: number;
173
- port: number;
174
- }>;
175
- }>;
176
- //#endregion
177
- export { type ArkEnvConfig, type EnvSchema, type Infer, arkenv, arkenv as default, type };
178
-
179
- //# sourceMappingURL=index.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../src/arkenv.ts","../src/index.ts"],"mappings":";;;;;;;;;;;;;AAyBA;;;;;;;;;KAAY,SAAA,QAAiB,MAAA,CAAG,QAAA,CAAS,GAAA,EAAK,CAAA;;;;;;AAQ9C;KAAY,KAAA,MAAW,CAAA,SAAU,WAAA,GAC9B,OAAA,CAAQ,GAAA,CAAI,MAAA,CAAG,KAAA,CAAM,CAAA,EAAG,CAAA,KACxB,SAAA,CAAU,CAAA;AAAA,KAER,kBAAA,GAAqB,IAAA;;;;KAKd,YAAA;EARG;;;EAYd,GAAA,GAAM,kBAAA;EAXK;;;EAeX,MAAA;EAjBgC;;;;;;;;;;;AAEjB;;;EA8Bf,eAAA;EA5B6B;AAK9B;;;;;;;EAiCC,WAAA;EAAA;;;;AA2BD;;;;;EAhBC,gBAAA;AAAA;;;;;;;;;;;;;iBAgBe,MAAA,iBAAuB,WAAA,CAAA,CACtC,GAAA,EAAK,SAAA,CAAU,CAAA,GACf,MAAA,GAAS,YAAA,GACP,OAAA,CAAQ,GAAA,CAAI,MAAA,CAAG,KAAA,CAAM,CAAA,EAAG,CAAA;AAAA,iBACX,MAAA,WAAiB,iBAAA,CAAA,CAChC,GAAA,EAAK,CAAA,EACL,MAAA,GAAS,YAAA,GACP,SAAA,CAAU,CAAA;AAAA,iBACG,MAAA,iBAAuB,WAAA,CAAA,CACtC,GAAA,EAAK,SAAA,CAAU,CAAA,IAAK,iBAAA,EACpB,MAAA,GAAS,YAAA,GACP,OAAA,CAAQ,GAAA,CAAI,MAAA,CAAG,KAAA,CAAM,CAAA,EAAG,CAAA,KAAM,SAAA,QAAiB,GAAA;;;;;;;;;AAxFlD;;;cCZa,IAAA,8BAAI,UAAA"}
package/dist/index.mjs DELETED
@@ -1,3 +0,0 @@
1
- import{n as e,r as t,t as n}from"./shared-B7lIFzfk.mjs";import{r,t as i}from"./core-B0IkKRzg.mjs";import{ArkErrors as a,scope as o,type as s}from"arktype";const c=s(`0 <= number.integer <= 65535`),l=s(`string.ip | 'localhost'`),u=o({string:s.module({...s.keywords.string,host:l}),number:s.module({...s.keywords.number,port:c})});function d(e){return Object.entries(e.byPath).map(([e,t])=>{let n=t.message,i=n.trimStart();if(i.length>0&&`:.-`.includes(i[0])&&(i=i.slice(1).trimStart()),i.toLowerCase().startsWith(e.toLowerCase())){let t=i.slice(e.length).trimStart();t.length>0&&`:.-`.includes(t[0])&&(t=t.slice(1)),n=t.trimStart()}let a=n.match(/\(was (.*)\)/);if(a?.[1]){let e=a[1];e.includes(`\x1B[`)||(n=n.replace(`(was ${e})`,`(was ${r(`cyan`,e)})`))}return{path:e,message:n}})}function f(r,o){let{env:s=process.env,coerce:c=!0,onUndeclaredKey:l=`delete`,arrayFormat:f=`comma`,emptyAsUndefined:p=!1}=o,m=(typeof r==`function`&&`assert`in r?r:u.type.raw(r)).onUndeclaredKey(l),h={...p?t(s):s};if(c){let t=e(m.in.toJsonSchema({fallback:e=>e.base}));t.length>0&&(h=n(h,t,{arrayFormat:f}))}let g=m(h);if(g instanceof a)throw new i(d(g));return g}function p(e,t={}){return f(e,t)}const m=u.type;var h=p;export{p as arkenv,h as default,m as type};
2
-
3
- //# sourceMappingURL=index.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.mjs","names":["t","e","$","$"],"sources":["../../internal/scope/dist/index.js","../src/arktype/index.ts","../src/arkenv.ts","../src/index.ts"],"sourcesContent":["import{scope as e,type as t}from\"arktype\";const n=t(`0 <= number.integer <= 65535`),r=t(`string.ip | 'localhost'`),i=e({string:t.module({...t.keywords.string,host:r}),number:t.module({...t.keywords.number,port:n})});export{i as $};\n//# sourceMappingURL=index.js.map","import { $ } from \"@repo/scope\";\nimport type { SchemaShape } from \"@repo/types\";\nimport type { distill } from \"arktype\";\nimport { ArkErrors } from \"arktype\";\nimport type { ArkEnvConfig, EnvSchema } from \"@/arkenv\";\nimport {\n\tapplyCoercion,\n\tfindCoercionPaths,\n\tstripEmptyStrings,\n} from \"@/coercion\";\nimport { ArkEnvError, type ValidationIssue } from \"@/core\";\nimport { styleText } from \"@/utils/style-text\";\n\n/**\n * Re-export of ArkType's `distill` utilities.\n *\n * Exposed for internal use cases and type-level integrations.\n * ArkEnv does not add behavior or guarantees beyond what ArkType provides.\n *\n * @internal\n * @see https://github.com/arktypeio/arktype\n */\nexport type { distill };\n\n/**\n * Converts ArkType's `ArkErrors` (keyed by path) into a flat `ValidationIssue[]`\n * suitable for `ArkEnvError`. Strips leading path references from messages to\n * avoid duplication when `formatInternalErrors` prepends the styled path, and\n * applies cyan styling to inline \"(was …)\" values.\n *\n * @param errors The ArkType errors object to convert\n * @returns An array of flattened validation issues\n *\n * @internal\n */\nfunction arkErrorsToIssues(errors: ArkErrors): ValidationIssue[] {\n\treturn Object.entries(errors.byPath).map(([path, error]) => {\n\t\tlet message = error.message;\n\n\t\t// Strip leading path reference if ArkType included it in the message\n\t\tlet trimmed = message.trimStart();\n\t\tif (trimmed.length > 0 && \":.-\".includes(trimmed[0])) {\n\t\t\ttrimmed = trimmed.slice(1).trimStart();\n\t\t}\n\t\tif (trimmed.toLowerCase().startsWith(path.toLowerCase())) {\n\t\t\tlet rest = trimmed.slice(path.length).trimStart();\n\t\t\tif (rest.length > 0 && \":.-\".includes(rest[0])) {\n\t\t\t\trest = rest.slice(1);\n\t\t\t}\n\t\t\tmessage = rest.trimStart();\n\t\t}\n\n\t\t// Style (was ...) inline values\n\t\tconst valueMatch = message.match(/\\(was (.*)\\)/);\n\t\tif (valueMatch?.[1]) {\n\t\t\tconst value = valueMatch[1];\n\t\t\tif (!value.includes(\"\\x1b[\")) {\n\t\t\t\tmessage = message.replace(\n\t\t\t\t\t`(was ${value})`,\n\t\t\t\t\t`(was ${styleText(\"cyan\", value)})`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\treturn { path, message };\n\t});\n}\n\n/**\n * Parse and validate environment variables using ArkEnv's schema rules.\n *\n * This applies:\n * - schema validation\n * - optional coercion (strings → numbers, booleans, arrays)\n * - undeclared key handling\n *\n * On success, returns the validated environment object.\n * On failure, throws an {@link ArkEnvError}.\n *\n * This is a low-level utility used internally by ArkEnv.\n * Most users should prefer the default `arkenv()` export.\n *\n * @param def The ArkType schema definition to validate against\n * @param config The configuration object for parsing and coercion\n * @returns The parsed and validated environment variables\n * @throws {@link ArkEnvError} if validation fails\n *\n * @internal\n */\nexport function parse<const T extends SchemaShape>(\n\tdef: EnvSchema<T>,\n\tconfig: ArkEnvConfig,\n) {\n\tconst {\n\t\tenv = process.env,\n\t\tcoerce: shouldCoerce = true,\n\t\tonUndeclaredKey = \"delete\",\n\t\tarrayFormat = \"comma\",\n\t\temptyAsUndefined = false,\n\t} = config;\n\n\t// If def is a type definition (has assert method), use it directly\n\t// Otherwise, use raw() to convert the schema definition\n\tconst isCompiledType = typeof def === \"function\" && \"assert\" in def;\n\tconst schema = (isCompiledType ? def : $.type.raw(def)) as any;\n\n\t// Apply the `onUndeclaredKey` option\n\tconst schemaWithKeys = schema.onUndeclaredKey(onUndeclaredKey);\n\n\t// Optionally treat empty strings as undefined\n\tconst processedEnv = emptyAsUndefined\n\t\t? stripEmptyStrings(env as Record<string, string | undefined>)\n\t\t: env;\n\n\tlet coercedEnv = { ...processedEnv } as Record<string, unknown>;\n\n\t// Apply coercion transformation to allow strings to be parsed as numbers/booleans\n\tif (shouldCoerce) {\n\t\tconst json = schemaWithKeys.in.toJsonSchema({\n\t\t\tfallback: (ctx: { base: unknown }) => ctx.base,\n\t\t});\n\t\tconst targets = findCoercionPaths(json);\n\t\tif (targets.length > 0) {\n\t\t\tcoercedEnv = applyCoercion(coercedEnv, targets, {\n\t\t\t\tarrayFormat,\n\t\t\t});\n\t\t}\n\t}\n\n\t// Validate the environment variables\n\tconst validatedEnv = schemaWithKeys(coercedEnv);\n\n\t// In ArkType 2.x, calling a type as a function returns the validated data or ArkErrors\n\tif (validatedEnv instanceof ArkErrors) {\n\t\tthrow new ArkEnvError(arkErrorsToIssues(validatedEnv));\n\t}\n\n\treturn validatedEnv;\n}\n","import type { $ } from \"@repo/scope\";\nimport type {\n\tCompiledEnvSchema,\n\tDict,\n\tInferType,\n\tSchemaShape,\n} from \"@repo/types\";\nimport type { type as at, distill } from \"arktype\";\nimport { parse } from \"./arktype\";\nimport type { ArkEnvError } from \"./core\";\n\n/**\n * Declarative environment schema definition accepted by ArkEnv.\n *\n * Represents a declarative schema object mapping environment\n * variable names to schema definitions (e.g. ArkType DSL strings\n * or Standard Schema validators).\n *\n * This type is used to validate that a schema object is compatible with\n * ArkEnv’s validator scope before being compiled or parsed.\n *\n * Most users will provide schemas in this form.\n *\n * @template def - The schema shape object\n */\nexport type EnvSchema<def> = at.validate<def, $>;\n\n/**\n * Infer the validated and coerced environment object type from a schema.\n * Supports declarative schema shapes, compiled ArkType schemas, and Standard Schema validators.\n *\n * @template T - The schema type\n */\nexport type Infer<T> = T extends SchemaShape\n\t? distill.Out<at.infer<T, $>>\n\t: InferType<T>;\n\ntype RuntimeEnvironment = Dict<string>;\n\n/**\n * Configuration options for `arkenv`\n */\nexport type ArkEnvConfig = {\n\t/**\n\t * The environment variables to parse. Defaults to `process.env`\n\t */\n\tenv?: RuntimeEnvironment;\n\t/**\n\t * Whether to coerce environment variables to their defined types. Defaults to `true`\n\t */\n\tcoerce?: boolean;\n\t/**\n\t * Control how ArkEnv handles environment variables that are not defined in your schema.\n\t *\n\t * Defaults to `'delete'` to ensure your output object only contains\n\t * keys you've explicitly declared. This differs from ArkType's standard behavior, which\n\t * mirrors TypeScript by defaulting to `'ignore'`.\n\t *\n\t * - `delete` (ArkEnv default): Undeclared keys are allowed on input but stripped from the output.\n\t * - `ignore` (ArkType default): Undeclared keys are allowed and preserved in the output.\n\t * - `reject`: Undeclared keys will cause validation to fail.\n\t *\n\t * @default \"delete\"\n\t * @see https://arktype.io/docs/configuration#onundeclaredkey\n\t */\n\tonUndeclaredKey?: \"ignore\" | \"delete\" | \"reject\";\n\n\t/**\n\t * The format to use for array parsing when coercion is enabled.\n\t *\n\t * - `comma` (default): Strings are split by comma and trimmed.\n\t * - `json`: Strings are parsed as JSON.\n\t *\n\t * @default \"comma\"\n\t */\n\tarrayFormat?: \"comma\" | \"json\";\n\n\t/**\n\t * Whether to treat empty strings (`\"\"`) as `undefined` before validation.\n\t *\n\t * When enabled, an environment variable set to an empty value (e.g. `PORT=`)\n\t * will be treated as if it were missing, allowing defaults to apply and\n\t * preventing validation errors for numeric or boolean types.\n\t *\n\t * @default false\n\t */\n\temptyAsUndefined?: boolean;\n};\n\n/**\n * TODO: `SchemaShape` is basically `Record<string, unknown>`.\n * If possible, find a better type than \"const T extends Record<string, unknown>\",\n * and be as close as possible to the type accepted by ArkType's `type`.\n */\n\n/**\n * Utility to parse environment variables using ArkType or Standard Schema\n * @param def - The schema definition\n * @param config - The evaluation configuration\n * @returns The parsed environment variables\n * @throws An {@link ArkEnvError | error} if the environment variables are invalid.\n */\nexport function arkenv<const T extends SchemaShape>(\n\tdef: EnvSchema<T>,\n\tconfig?: ArkEnvConfig,\n): distill.Out<at.infer<T, $>>;\nexport function arkenv<T extends CompiledEnvSchema>(\n\tdef: T,\n\tconfig?: ArkEnvConfig,\n): InferType<T>;\nexport function arkenv<const T extends SchemaShape>(\n\tdef: EnvSchema<T> | CompiledEnvSchema,\n\tconfig?: ArkEnvConfig,\n): distill.Out<at.infer<T, $>> | InferType<typeof def>;\nexport function arkenv<const T extends SchemaShape>(\n\tdef: EnvSchema<T> | CompiledEnvSchema,\n\tconfig: ArkEnvConfig = {},\n): distill.Out<at.infer<T, $>> | InferType<typeof def> {\n\t// biome-ignore lint/suspicious/noExplicitAny: parse handles both EnvSchema<T> and CompiledEnvSchema at runtime\n\treturn parse(def as any, config);\n}\n","import { $ } from \"@repo/scope\";\nimport { arkenv } from \"./arkenv\";\n\nexport { arkenv };\n/**\n * Like ArkType's `type`, but with ArkEnv's extra keywords, such as:\n *\n * - `string.host` – a hostname (e.g. `\"localhost\"`, `\"127.0.0.1\"`)\n * - `number.port` – a port number (e.g. `8080`)\n *\n * See ArkType's docs for the full API:\n * https://arktype.io/docs/type-api\n */\nexport const type = $.type;\nexport type { ArkEnvConfig, EnvSchema, Infer } from \"./arkenv\";\n\n/**\n * ArkEnv's main export, an alias for {@link arkenv}\n *\n * {@link https://arkenv.js.org | ArkEnv} is a typesafe environment variables validator from editor to runtime.\n */\nexport default arkenv;\n"],"mappings":"2JAA0C,MAAM,EAAEA,EAAE,+BAA+B,CAAC,EAAEA,EAAE,0BAA0B,CAAC,EAAEC,EAAE,CAAC,OAAOD,EAAE,OAAO,CAAC,GAAGA,EAAE,SAAS,OAAO,KAAK,EAAE,CAAC,CAAC,OAAOA,EAAE,OAAO,CAAC,GAAGA,EAAE,SAAS,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,CCmCvN,SAAS,EAAkB,EAAsC,CAChE,OAAO,OAAO,QAAQ,EAAO,OAAO,CAAC,KAAK,CAAC,EAAM,KAAW,CAC3D,IAAI,EAAU,EAAM,QAGhB,EAAU,EAAQ,WAAW,CAIjC,GAHI,EAAQ,OAAS,GAAK,MAAM,SAAS,EAAQ,GAAG,GACnD,EAAU,EAAQ,MAAM,EAAE,CAAC,WAAW,EAEnC,EAAQ,aAAa,CAAC,WAAW,EAAK,aAAa,CAAC,CAAE,CACzD,IAAI,EAAO,EAAQ,MAAM,EAAK,OAAO,CAAC,WAAW,CAC7C,EAAK,OAAS,GAAK,MAAM,SAAS,EAAK,GAAG,GAC7C,EAAO,EAAK,MAAM,EAAE,EAErB,EAAU,EAAK,WAAW,CAI3B,IAAM,EAAa,EAAQ,MAAM,eAAe,CAChD,GAAI,IAAa,GAAI,CACpB,IAAM,EAAQ,EAAW,GACpB,EAAM,SAAS,QAAQ,GAC3B,EAAU,EAAQ,QACjB,QAAQ,EAAM,GACd,QAAQ,EAAU,OAAQ,EAAM,CAAC,GACjC,EAIH,MAAO,CAAE,OAAM,UAAS,EACvB,CAwBH,SAAgB,EACf,EACA,EACC,CACD,GAAM,CACL,MAAM,QAAQ,IACd,OAAQ,EAAe,GACvB,kBAAkB,SAClB,cAAc,QACd,mBAAmB,IAChB,EAQE,GAJiB,OAAO,GAAQ,YAAc,WAAY,EAC/B,EAAME,EAAE,KAAK,IAAI,EAAI,EAGxB,gBAAgB,EAAgB,CAO1D,EAAa,CAAE,GAJE,EAClB,EAAkB,EAA0C,CAC5D,EAEiC,CAGpC,GAAI,EAAc,CAIjB,IAAM,EAAU,EAHH,EAAe,GAAG,aAAa,CAC3C,SAAW,GAA2B,EAAI,KAC1C,CACqC,CAAC,CACnC,EAAQ,OAAS,IACpB,EAAa,EAAc,EAAY,EAAS,CAC/C,cACA,CAAC,EAKJ,IAAM,EAAe,EAAe,EAAW,CAG/C,GAAI,aAAwB,EAC3B,MAAM,IAAI,EAAY,EAAkB,EAAa,CAAC,CAGvD,OAAO,ECvBR,SAAgB,EACf,EACA,EAAuB,EAAE,CAC6B,CAEtD,OAAO,EAAM,EAAY,EAAO,CC1GjC,MAAa,EAAOC,EAAE,KAQtB,IAAA,EAAe"}
@@ -1,3 +0,0 @@
1
- const e=e=>{if(typeof e==`number`||typeof e!=`string`||!e.trim())return e;if(e.trim()===`NaN`)return NaN;let t=Number(e);return Number.isNaN(t)?e:t},t=e=>e===`true`?!0:e===`false`?!1:e,n=e=>{if(typeof e!=`string`)return e;let t=e.trim();if(t[0]!==`{`&&t[0]!==`[`)return e;try{return JSON.parse(t)}catch{return e}},r=e=>{if(e instanceof Date||typeof e!=`string`||!e.trim())return e;let t=new Date(e);return Number.isNaN(t.getTime())?e:t},i=e=>{let t={};for(let n in e){let r=e[n];r!==``&&(t[n]=r)}return t},a=(e,t=[])=>{let n=[];if(!e||typeof e!=`object`||Array.isArray(e))return n;let r=e;if(`const`in r){let e=typeof r.const;(e===`number`||e===`boolean`)&&n.push({path:[...t],type:`primitive`})}`enum`in r&&Array.isArray(r.enum)&&r.enum.some(e=>typeof e==`number`||typeof e==`boolean`)&&n.push({path:[...t],type:`primitive`});let i=r.type;if(i===`number`||i===`integer`||i===`boolean`)n.push({path:[...t],type:`primitive`});else if(i===`string`&&`format`in r&&(r.format===`date-time`||r.format===`date`))n.push({path:[...t],type:`date`});else if(i===`object`){if(r.properties&&Object.keys(r.properties).length>0){n.push({path:[...t],type:`object`});for(let e in r.properties)n.push(...a(r.properties[e],[...t,e]))}}else i===`array`&&(n.push({path:[...t],type:`array`}),r.items&&(Array.isArray(r.items)?r.items.forEach((e,r)=>{n.push(...a(e,[...t,String(r)]))}):n.push(...a(r.items,[...t,`*`]))));for(let e of[`anyOf`,`allOf`,`oneOf`])if(r[e]&&Array.isArray(r[e]))for(let i of r[e])n.push(...a(i,t));let o=new Set;return n.filter(e=>{let t=e.path.join(`/`)+`:`+e.type;return o.has(t)?!1:o.add(t)})},o=(i,a,o={})=>{let{arrayFormat:s=`comma`}=o,c=e=>{if(s===`json`)try{return JSON.parse(e)}catch{return e}return e.trim()?e.split(`,`).map(e=>e.trim()):[]},l=(i,a)=>{if(a===`array`&&typeof i==`string`)return c(i);if(a===`object`&&typeof i==`string`)return n(i);if(a===`date`&&typeof i==`string`)return r(i);if(a===`primitive`){if(Array.isArray(i)){for(let n=0;n<i.length;n++){let r=e(i[n]);i[n]=typeof r==`number`?r:t(i[n])}return i}let n=e(i);return typeof n==`number`?n:t(i)}return i};if(typeof i!=`object`||!i){let e=a.find(e=>e.path.length===0);return e?l(i,e.type):i}let u=[...a].sort((e,t)=>e.path.length-t.path.length),d=(e,t,n)=>{if(!e||typeof e!=`object`||t.length===0)return;let[r,...i]=t;if(i.length===0){if(r===`*`){if(Array.isArray(e))for(let t=0;t<e.length;t++)e[t]=l(e[t],n)}else Object.prototype.hasOwnProperty.call(e,r)&&(e[r]=l(e[r],n));return}if(r===`*`){if(Array.isArray(e))for(let t of e)d(t,i,n)}else d(e[r],i,n)};for(let e of u)d(i,e.path,e.type);return i};export{a as n,i as r,o as t};
2
-
3
- //# sourceMappingURL=shared-B7lIFzfk.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"shared-B7lIFzfk.mjs","names":[],"sources":["../src/coercion/morphs.ts","../src/coercion/shared.ts"],"sourcesContent":["/**\n * Attempt to coerce a value to a number.\n *\n * If the input is already a number, returns it unchanged.\n * If the input is a string that can be parsed as a number, returns the parsed number.\n * Otherwise, returns the original value unchanged.\n *\n * @internal\n * @param s - The value to coerce\n * @returns The coerced number or the original value\n */\nexport const coerceNumber = (s: unknown) => {\n\tif (typeof s === \"number\") return s;\n\tif (typeof s !== \"string\" || !s.trim()) return s;\n\tif (s.trim() === \"NaN\") return Number.NaN;\n\tconst n = Number(s);\n\treturn Number.isNaN(n) ? s : n;\n};\n\n/**\n * Attempt to coerce a value to a boolean.\n *\n * Convert the strings \"true\" and \"false\" to their boolean equivalents.\n * All other values are returned unchanged.\n *\n * @internal\n * @param s - The value to coerce\n * @returns The coerced boolean or the original value\n */\nexport const coerceBoolean = (s: unknown) => {\n\tif (s === \"true\") return true;\n\tif (s === \"false\") return false;\n\treturn s;\n};\n\n/**\n * Attempt to parse a value as JSON.\n *\n * If the input is a string that starts with `{` or `[` and can be parsed as JSON,\n * returns the parsed object or array. Otherwise, returns the original value unchanged.\n *\n * @internal\n * @param s - The value to parse\n * @returns The parsed JSON or the original value\n */\nexport const coerceJson = (s: unknown) => {\n\tif (typeof s !== \"string\") return s;\n\tconst trimmed = s.trim();\n\tif (trimmed[0] !== \"{\" && trimmed[0] !== \"[\") return s;\n\ttry {\n\t\treturn JSON.parse(trimmed);\n\t} catch {\n\t\treturn s;\n\t}\n};\n\n/**\n * Attempt to coerce a value to a Date.\n *\n * If the input is already a Date, returns it unchanged.\n * If the input is a valid date string, returns a Date object.\n * Otherwise, returns the original value unchanged.\n *\n * @internal\n * @param s - The value to coerce\n * @returns The coerced Date or the original value\n */\nexport const coerceDate = (s: unknown) => {\n\tif (s instanceof Date) return s;\n\tif (typeof s !== \"string\" || !s.trim()) return s;\n\tconst d = new Date(s);\n\treturn Number.isNaN(d.getTime()) ? s : d;\n};\n","import { coerceBoolean, coerceDate, coerceJson, coerceNumber } from \"./morphs\";\n\n/**\n * Remove keys with empty string values from an environment record.\n *\n * When a key is set to `\"\"` (e.g. `PORT=` in a `.env` file), deleting it\n * allows the validator to treat it as missing so that defaults apply.\n *\n * @param env The environment variables record\n * @returns A new record with empty string keys removed\n */\nexport const stripEmptyStrings = (\n\tenv: Record<string, string | undefined>,\n): Record<string, string | undefined> => {\n\tconst result: Record<string, string | undefined> = {};\n\tfor (const key in env) {\n\t\tconst value = env[key];\n\t\tif (value !== \"\") {\n\t\t\tresult[key] = value;\n\t\t}\n\t}\n\treturn result;\n};\n\n/**\n * A marker used in the coercion path to indicate that the target\n * is the *elements* of an array, rather than the array property itself.\n */\nexport const ARRAY_ITEM_MARKER = \"*\";\n\n/**\n * @internal\n * Information about a path in the schema that requires coercion.\n */\nexport type CoercionTarget = {\n\tpath: string[];\n\ttype: \"primitive\" | \"array\" | \"object\" | \"date\";\n};\n\n/**\n * Options for coercion behavior.\n */\nexport type CoerceOptions = {\n\t/**\n\t * format to use for array parsing\n\t * @default \"comma\"\n\t */\n\tarrayFormat?: \"comma\" | \"json\";\n};\n\n/**\n * Internal representation of a JSON Schema node for coercion traversal.\n */\ntype JsonSchemaNode = {\n\ttype?: string | string[];\n\tconst?: unknown;\n\tenum?: unknown[];\n\tformat?: string;\n\tproperties?: Record<string, unknown>;\n\titems?: unknown | unknown[];\n\tanyOf?: unknown[];\n\tallOf?: unknown[];\n\toneOf?: unknown[];\n};\n\n/**\n * Find all paths in a JSON Schema that require coercion.\n *\n * Prioritize \"number\", \"integer\", \"boolean\", \"array\", \"object\", and \"date\" types.\n *\n * @param node The JSON Schema node to traverse\n * @param path The current path segments in the schema tree\n * @returns An array of coercion targets containing their path and type\n */\nexport const findCoercionPaths = (\n\tnode: unknown,\n\tpath: string[] = [],\n): CoercionTarget[] => {\n\tconst results: CoercionTarget[] = [];\n\tif (!node || typeof node !== \"object\" || Array.isArray(node)) return results;\n\n\tconst n = node as JsonSchemaNode;\n\n\tif (\"const\" in n) {\n\t\tconst t = typeof n.const;\n\t\tif (t === \"number\" || t === \"boolean\") {\n\t\t\tresults.push({ path: [...path], type: \"primitive\" });\n\t\t}\n\t}\n\n\tif (\"enum\" in n && Array.isArray(n.enum)) {\n\t\tif (n.enum.some((v) => typeof v === \"number\" || typeof v === \"boolean\")) {\n\t\t\tresults.push({ path: [...path], type: \"primitive\" });\n\t\t}\n\t}\n\n\tconst type = n.type;\n\tif (type === \"number\" || type === \"integer\" || type === \"boolean\") {\n\t\tresults.push({ path: [...path], type: \"primitive\" });\n\t} else if (\n\t\ttype === \"string\" &&\n\t\t\"format\" in n &&\n\t\t(n.format === \"date-time\" || n.format === \"date\")\n\t) {\n\t\tresults.push({ path: [...path], type: \"date\" });\n\t} else if (type === \"object\") {\n\t\tif (n.properties && Object.keys(n.properties).length > 0) {\n\t\t\tresults.push({ path: [...path], type: \"object\" });\n\t\t\tfor (const key in n.properties) {\n\t\t\t\tresults.push(...findCoercionPaths(n.properties[key], [...path, key]));\n\t\t\t}\n\t\t}\n\t} else if (type === \"array\") {\n\t\tresults.push({ path: [...path], type: \"array\" });\n\t\tif (n.items) {\n\t\t\tif (Array.isArray(n.items)) {\n\t\t\t\tn.items.forEach((item, index) => {\n\t\t\t\t\tresults.push(...findCoercionPaths(item, [...path, String(index)]));\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tresults.push(\n\t\t\t\t\t...findCoercionPaths(n.items, [...path, ARRAY_ITEM_MARKER]),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tfor (const comb of [\"anyOf\", \"allOf\", \"oneOf\"] as const) {\n\t\tif (n[comb] && Array.isArray(n[comb])) {\n\t\t\tfor (const branch of n[comb]) {\n\t\t\t\tresults.push(...findCoercionPaths(branch, path));\n\t\t\t}\n\t\t}\n\t}\n\n\tconst seen = new Set<string>();\n\treturn results.filter((t) => {\n\t\tconst key = t.path.join(\"/\") + \":\" + t.type;\n\t\treturn seen.has(key) ? false : seen.add(key);\n\t});\n};\n\n/**\n * Apply coercion to a data object based on identified paths.\n *\n * @param data The input environment data object to coerce\n * @param targets The coercion targets mapping paths to types\n * @param options The coercion options, including array parsing format\n * @returns The coerced data object\n */\nexport const applyCoercion = <T = unknown>(\n\tdata: T,\n\ttargets: CoercionTarget[],\n\toptions: CoerceOptions = {},\n): T => {\n\tconst { arrayFormat = \"comma\" } = options;\n\n\tconst splitString = (val: string) => {\n\t\tif (arrayFormat === \"json\") {\n\t\t\ttry {\n\t\t\t\treturn JSON.parse(val);\n\t\t\t} catch {\n\t\t\t\treturn val;\n\t\t\t}\n\t\t}\n\t\treturn val.trim() ? val.split(\",\").map((s) => s.trim()) : [];\n\t};\n\n\tconst coerceValue = (val: unknown, type: CoercionTarget[\"type\"]): unknown => {\n\t\tif (type === \"array\" && typeof val === \"string\") {\n\t\t\treturn splitString(val);\n\t\t}\n\t\tif (type === \"object\" && typeof val === \"string\") {\n\t\t\treturn coerceJson(val);\n\t\t}\n\t\tif (type === \"date\" && typeof val === \"string\") {\n\t\t\treturn coerceDate(val);\n\t\t}\n\t\tif (type === \"primitive\") {\n\t\t\tif (Array.isArray(val)) {\n\t\t\t\tfor (let i = 0; i < val.length; i++) {\n\t\t\t\t\tconst n = coerceNumber(val[i]);\n\t\t\t\t\tval[i] = typeof n === \"number\" ? n : coerceBoolean(val[i]);\n\t\t\t\t}\n\t\t\t\treturn val;\n\t\t\t}\n\t\t\tconst n = coerceNumber(val);\n\t\t\treturn typeof n === \"number\" ? n : coerceBoolean(val);\n\t\t}\n\t\treturn val;\n\t};\n\n\tif (typeof data !== \"object\" || data === null) {\n\t\tconst root = targets.find((t) => t.path.length === 0);\n\t\tif (root) {\n\t\t\treturn coerceValue(data, root.type) as T;\n\t\t}\n\t\treturn data;\n\t}\n\n\tconst sorted = [...targets].sort((a, b) => a.path.length - b.path.length);\n\n\tconst walk = (current: any, path: string[], type: CoercionTarget[\"type\"]) => {\n\t\tif (!current || typeof current !== \"object\" || path.length === 0) return;\n\n\t\tconst [key, ...rest] = path;\n\n\t\tif (rest.length === 0) {\n\t\t\tif (key === ARRAY_ITEM_MARKER) {\n\t\t\t\tif (Array.isArray(current)) {\n\t\t\t\t\tfor (let i = 0; i < current.length; i++) {\n\t\t\t\t\t\tcurrent[i] = coerceValue(current[i], type);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// biome-ignore lint/suspicious/noPrototypeBuiltins: Object.hasOwn is not supported under current tsconfig lib settings\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(current, key)) {\n\t\t\t\t\tcurrent[key] = coerceValue(current[key], type);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif (key === ARRAY_ITEM_MARKER) {\n\t\t\tif (Array.isArray(current)) {\n\t\t\t\tfor (const item of current) walk(item, rest, type);\n\t\t\t}\n\t\t} else {\n\t\t\twalk(current[key], rest, type);\n\t\t}\n\t};\n\n\tfor (const t of sorted) {\n\t\twalk(data, t.path, t.type);\n\t}\n\treturn data;\n};\n"],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- const e=e=>{if(typeof e==`number`||typeof e!=`string`||!e.trim())return e;if(e.trim()===`NaN`)return NaN;let t=Number(e);return Number.isNaN(t)?e:t},t=e=>e===`true`?!0:e===`false`?!1:e,n=e=>{if(typeof e!=`string`)return e;let t=e.trim();if(t[0]!==`{`&&t[0]!==`[`)return e;try{return JSON.parse(t)}catch{return e}},r=e=>{if(e instanceof Date||typeof e!=`string`||!e.trim())return e;let t=new Date(e);return Number.isNaN(t.getTime())?e:t},i=e=>{let t={};for(let n in e){let r=e[n];r!==``&&(t[n]=r)}return t},a=(e,t=[])=>{let n=[];if(!e||typeof e!=`object`||Array.isArray(e))return n;let r=e;if(`const`in r){let e=typeof r.const;(e===`number`||e===`boolean`)&&n.push({path:[...t],type:`primitive`})}`enum`in r&&Array.isArray(r.enum)&&r.enum.some(e=>typeof e==`number`||typeof e==`boolean`)&&n.push({path:[...t],type:`primitive`});let i=r.type;if(i===`number`||i===`integer`||i===`boolean`)n.push({path:[...t],type:`primitive`});else if(i===`string`&&`format`in r&&(r.format===`date-time`||r.format===`date`))n.push({path:[...t],type:`date`});else if(i===`object`){if(r.properties&&Object.keys(r.properties).length>0){n.push({path:[...t],type:`object`});for(let e in r.properties)n.push(...a(r.properties[e],[...t,e]))}}else i===`array`&&(n.push({path:[...t],type:`array`}),r.items&&(Array.isArray(r.items)?r.items.forEach((e,r)=>{n.push(...a(e,[...t,String(r)]))}):n.push(...a(r.items,[...t,`*`]))));for(let e of[`anyOf`,`allOf`,`oneOf`])if(r[e]&&Array.isArray(r[e]))for(let i of r[e])n.push(...a(i,t));let o=new Set;return n.filter(e=>{let t=e.path.join(`/`)+`:`+e.type;return o.has(t)?!1:o.add(t)})},o=(i,a,o={})=>{let{arrayFormat:s=`comma`}=o,c=e=>{if(s===`json`)try{return JSON.parse(e)}catch{return e}return e.trim()?e.split(`,`).map(e=>e.trim()):[]},l=(i,a)=>{if(a===`array`&&typeof i==`string`)return c(i);if(a===`object`&&typeof i==`string`)return n(i);if(a===`date`&&typeof i==`string`)return r(i);if(a===`primitive`){if(Array.isArray(i)){for(let n=0;n<i.length;n++){let r=e(i[n]);i[n]=typeof r==`number`?r:t(i[n])}return i}let n=e(i);return typeof n==`number`?n:t(i)}return i};if(typeof i!=`object`||!i){let e=a.find(e=>e.path.length===0);return e?l(i,e.type):i}let u=[...a].sort((e,t)=>e.path.length-t.path.length),d=(e,t,n)=>{if(!e||typeof e!=`object`||t.length===0)return;let[r,...i]=t;if(i.length===0){if(r===`*`){if(Array.isArray(e))for(let t=0;t<e.length;t++)e[t]=l(e[t],n)}else Object.prototype.hasOwnProperty.call(e,r)&&(e[r]=l(e[r],n));return}if(r===`*`){if(Array.isArray(e))for(let t of e)d(t,i,n)}else d(e[r],i,n)};for(let e of u)d(i,e.path,e.type);return i};Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return o}});
2
-
3
- // CJS Interop Shim
4
- if (module.exports && module.exports.default) {
5
- Object.assign(module.exports.default, module.exports);
6
- module.exports = module.exports.default;
7
- }
8
-
package/dist/standard.cjs DELETED
@@ -1,8 +0,0 @@
1
- Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require(`./shared-Bx3sbEJf.cjs`),t=require(`./core-BftJnV8f.cjs`);function n(e,n){if(typeof n==`string`)throw new t.t([{path:e,message:`ArkType DSL strings are not supported in "standard" mode. Use a Standard Schema validator (e.g., Zod, Valibot) or import from "arkenv" for ArkType schemas.`}])}function r(e,n){let r=n&&typeof n==`object`&&`~standard`in n&&n[`~standard`];if(!r||typeof r!=`object`||!(`validate`in r)||typeof r.validate!=`function`)throw new t.t([{path:e,message:`Invalid validator: expected a Standard Schema 1.0 validator (must have "~standard" property). Import from "arkenv" to use ArkType schemas.`}])}function i(e){if(!e||typeof e!=`object`||Array.isArray(e))throw new t.t([{path:``,message:`Invalid schema: expected an object mapping in "standard" mode.`}])}function a(e,t){let n={type:`object`,properties:{}},r=!1;for(let i in e){let a=e[i];if(!a){t.push(i);continue}let o=a[`~standard`];if(typeof o?.jsonSchema?.input==`function`)try{let e=o.jsonSchema.input({target:`draft-07`});if(e){n.properties[i]=e,r=!0;continue}}catch{}if(typeof a.jsonSchema?.input==`function`)try{let e=a.jsonSchema.input({target:`draft-07`});if(e){n.properties[i]=e,r=!0;continue}}catch{}if(typeof a.toJSONSchema==`function`)try{let e=a.toJSONSchema();if(e){n.properties[i]=e,r=!0;continue}}catch{}if(typeof a.toStandardJSONSchema?.v1==`function`)try{let e=a.toStandardJSONSchema.v1();if(e){n.properties[i]=e,r=!0;continue}}catch{}t.push(i)}return{jsonSchema:n,hasJsonSchema:r}}function o(e,t){return!t||t.length===0?e:[e,...t.map(e=>typeof e==`object`&&e&&`key`in e?String(e.key):String(e))].join(`.`)}function s(n,r){let{env:i=process.env,onUndeclaredKey:s=`delete`,coerce:c=!0,arrayFormat:l=`comma`,emptyAsUndefined:u=!1}=r,d={},f=[],p=u?e.r(i):i,m=new Set(Object.keys(p)),h={...p},g=[];if(c){let{jsonSchema:t,hasJsonSchema:r}=a(n,g);r&&(h=e.t(h,e.n(t),{arrayFormat:l}))}for(let e in n){let r=n[e],i=h[e];if(!r||typeof r!=`object`||!(`~standard`in r))throw new t.t([{path:e,message:`Invalid schema: expected a Standard Schema 1.0 validator (e.g. Zod, Valibot) in 'standard' mode.`}]);let a=r[`~standard`].validate(i);if(a instanceof Promise)throw new t.t([{path:e,message:`Async validation is not supported. ArkEnv is synchronous.`}]);if(a.issues)for(let t of a.issues){let n=o(e,t.path),r=t.message;c&&g.includes(e)&&(r+=` (Hint: coercion is enabled by default, but the validator for '${e}' lacks Standard JSON Schema support.)`),f.push({path:n,message:r})}else d[e]=a.value;m.delete(e)}if(s!==`delete`)for(let e of m)s===`reject`?f.push({path:e,message:`Undeclared key`}):s===`ignore`&&(d[e]=h[e]);if(f.length>0)throw new t.t(f);return d}function c(e,t){i(e);for(let t in e){let i=e[t];n(t,i),r(t,i)}return s(e,t??{})}exports.arkenv=c,exports.default=c;
2
-
3
- // CJS Interop Shim
4
- if (module.exports && module.exports.default) {
5
- Object.assign(module.exports.default, module.exports);
6
- module.exports = module.exports.default;
7
- }
8
-
@@ -1,92 +0,0 @@
1
- import { i as StandardSchemaV1 } from "./index-CzNfOanV.cjs";
2
-
3
- //#region src/parse-standard.d.ts
4
- /**
5
- * Configuration options for {@link parseStandard}.
6
- */
7
- type ParseStandardConfig = {
8
- /**
9
- * The environment variables to parse. Defaults to `process.env`
10
- */
11
- env?: Record<string, string | undefined>;
12
- /**
13
- * Control how ArkEnv handles environment variables that are not defined in your schema.
14
- *
15
- * Defaults to `'delete'` to ensure your output object only contains
16
- * keys you've explicitly declared.
17
- *
18
- * - `delete` (ArkEnv default): Undeclared keys are allowed on input but stripped from the output.
19
- * - `ignore`: Undeclared keys are allowed and preserved in the output.
20
- * - `reject`: Undeclared keys will cause validation to fail.
21
- *
22
- * @default "delete"
23
- */
24
- onUndeclaredKey?: "ignore" | "delete" | "reject";
25
- /**
26
- * Whether to perform best-effort coercion on the environment variables.
27
- * Coercion requires validators that implement the StandardJSONSchemaV1 spec
28
- * (e.g. Zod, Valibot).
29
- *
30
- * @see https://standard-schema.dev
31
- * @default true
32
- */
33
- coerce?: boolean;
34
- /**
35
- * The format to use for array parsing when coercion is enabled.
36
- *
37
- * - `comma` (default): Strings are split by comma and trimmed.
38
- * - `json`: Strings are parsed as JSON.
39
- *
40
- * @default "comma"
41
- */
42
- arrayFormat?: "comma" | "json";
43
- /**
44
- * Whether to treat empty strings (`""`) as `undefined` before validation.
45
- *
46
- * When enabled, an environment variable set to an empty value (e.g. `PORT=`)
47
- * will be treated as if it were missing, allowing defaults to apply and
48
- * preventing validation errors for numeric or boolean types.
49
- *
50
- * @default false
51
- */
52
- emptyAsUndefined?: boolean;
53
- };
54
- //#endregion
55
- //#region src/standard.d.ts
56
- /**
57
- * Configuration options for the `arkenv/standard` entry's `arkenv`.
58
- */
59
- type StandardEnvConfig = ParseStandardConfig;
60
- /**
61
- * Parse and validate environment variables using Standard Schema 1.0 validators (e.g. Zod, Valibot).
62
- *
63
- * This entry is ArkType-free - ArkType is never imported, even transitively.
64
- * Use this when your project must not depend on ArkType.
65
- *
66
- * @param def An object mapping variable names to Standard Schema validators
67
- * @param config Optional configuration
68
- * @returns The validated environment variables
69
- * @throws An {@link ArkEnvError} if validation fails
70
- *
71
- * @example
72
- * ```ts
73
- * import arkenv from "arkenv/standard";
74
- * import { z } from "zod";
75
- *
76
- * const env = arkenv({
77
- * PORT: z.coerce.number(),
78
- * HOST: z.string(),
79
- * });
80
- * ```
81
- */
82
- declare function arkenv<const T extends Record<string, StandardSchemaV1>>(def: T, config?: StandardEnvConfig): { [K in keyof T]: StandardSchemaV1.InferOutput<T[K]> };
83
- //#endregion
84
- export { StandardEnvConfig, arkenv, arkenv as default };
85
-
86
- // CJS Interop Shim
87
- if (module.exports && module.exports.default) {
88
- Object.assign(module.exports.default, module.exports);
89
- module.exports = module.exports.default;
90
- }
91
-
92
- //# sourceMappingURL=standard.d.cts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"standard.d.cts","names":[],"sources":["../src/parse-standard.ts","../src/standard.ts"],"mappings":";;;;;;KAWY,mBAAA;EAAmB;;;EAI9B,GAAA,GAAM,MAAA;EAAA;;;;;;;;;;ACJP;;EDiBC,eAAA;ECjB+B;;AAwBhC;;;;;;EDEC,MAAA;ECCgB;;;;;;;;EDQhB,WAAA;ECVK;;;;;;;;;EDqBL,gBAAA;AAAA;;;;AA9CD;;KCAY,iBAAA,GAAoB,mBAAA;;;;;;;;;;;;;AAAhC;;;;;AAwBA;;;;;iBAAgB,MAAA,iBAAuB,MAAA,SAAe,gBAAA,EAAA,CACrD,GAAA,EAAK,CAAA,EACL,MAAA,GAAS,iBAAA,iBACO,CAAA,GAAI,gBAAA,CAAiB,WAAA,CAAY,CAAA,CAAE,CAAA"}