arkenv 0.7.2 → 0.7.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
  </a>
5
5
  <br />
6
6
  <a href="https://github.com/yamcodes/arkenv/actions/workflows/tests.yml?query=branch%3Amain"><img alt="Tests Status" src="https://github.com/yamcodes/arkenv/actions/workflows/tests.yml/badge.svg?event=push&branch=main"></a>
7
- <img alt="npm bundle size" src="https://img.shields.io/bundlephobia/minzip/arkenv">
7
+ <a href="https://bundlephobia.com/package/arkenv"><img alt="npm bundle size" src="https://img.shields.io/bundlephobia/minzip/arkenv"></a>
8
8
  <a href="https://www.typescriptlang.org/"><img alt="TypeScript" src="https://img.shields.io/badge/TypeScript-3178C6?style=flat&logo=typescript&logoColor=white"></a>
9
9
  <a href="https://arktype.io/"><img alt="Powered By ArkType" src="https://custom-icon-badges.demolab.com/badge/ArkType-0d1526?logo=arktype2&logoColor=e9eef9"></a>
10
10
  <a href="https://nodejs.org/en"><img alt="Node.js" src="https://img.shields.io/badge/Node.js-339933?style=flat&logo=node.js&logoColor=white"></a>
@@ -110,7 +110,7 @@ bun add arkenv arktype
110
110
  ## Requirements
111
111
 
112
112
  - TypeScript >= 5.1 and [anything else required by ArkType](https://arktype.io/docs/intro/setup#installation)
113
- - [Node.js 22 LTS](https://github.com/yamcodes/arkenv/tree/main/examples/basic), [Bun 1.2](https://github.com/yamcodes/arkenv/tree/main/examples/with-bun), and [Vite 7](https://github.com/yamcodes/arkenv/tree/main/examples/with-vite-react-ts) are tested. Older versions may work but aren't officially supported
113
+ - Tested on [Node.js **LTS** and **Current**](https://github.com/yamcodes/arkenv/tree/main/examples/basic), [Bun 1.2](https://github.com/yamcodes/arkenv/tree/main/examples/with-bun), and [Vite from **2.9.18** to **7.x**](https://github.com/yamcodes/arkenv/tree/main/examples/with-vite-react-ts). Older versions may work but are not officially supported
114
114
 
115
115
  ## Plugins
116
116
 
package/dist/index.cjs CHANGED
@@ -1,113 +1,4 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
-
20
- // src/index.ts
21
- var index_exports = {};
22
- __export(index_exports, {
23
- ArkEnvError: () => ArkEnvError,
24
- createEnv: () => createEnv,
25
- default: () => index_default,
26
- type: () => type4
27
- });
28
- module.exports = __toCommonJS(index_exports);
29
-
30
- // src/create-env.ts
31
- var import_arktype3 = require("arktype");
32
-
33
- // src/errors.ts
34
- var import_node_util = require("util");
35
-
36
- // src/utils.ts
37
- var indent = (str, amt = 2, { dontDetectNewlines = false } = {}) => {
38
- const detectNewlines = !dontDetectNewlines;
39
- if (detectNewlines) {
40
- return str.split("\n").map((line) => `${" ".repeat(amt)}${line}`).join("\n");
41
- }
42
- return `${" ".repeat(amt)}${str}`;
43
- };
44
-
45
- // src/errors.ts
46
- var formatErrors = (errors) => Object.entries(errors.byPath).map(([path, error]) => {
47
- const messageWithoutPath = error.message.startsWith(path) ? error.message.slice(path.length) : error.message;
48
- const valueMatch = messageWithoutPath.match(/\(was "([^"]+)"\)/);
49
- const formattedMessage = valueMatch ? messageWithoutPath.replace(
50
- `(was "${valueMatch[1]}")`,
51
- `(was ${(0, import_node_util.styleText)("cyan", `"${valueMatch[1]}"`)})`
52
- ) : messageWithoutPath;
53
- return `${(0, import_node_util.styleText)("yellow", path)}${formattedMessage}`;
54
- }).join("\n");
55
- var ArkEnvError = class extends Error {
56
- constructor(errors, message = "Errors found while validating environment variables") {
57
- super(`${(0, import_node_util.styleText)("red", message)}
58
- ${indent(formatErrors(errors))}
59
- `);
60
- this.name = "ArkEnvError";
61
- }
62
- };
63
-
64
- // src/scope.ts
65
- var import_arktype2 = require("arktype");
66
-
67
- // src/types.ts
68
- var import_arktype = require("arktype");
69
- var port = (0, import_arktype.type)("string", "=>", (data, ctx) => {
70
- const asNumber = Number.parseInt(data, 10);
71
- const isInteger = Number.isInteger(asNumber);
72
- const isBetween = 0 <= asNumber && asNumber <= 65535;
73
- if (!isInteger || !isBetween) {
74
- ctx.mustBe("an integer between 0 and 65535");
75
- }
76
- return asNumber;
77
- });
78
- var host = (0, import_arktype.type)("string.ip | 'localhost'");
79
-
80
- // src/scope.ts
81
- var $ = (0, import_arktype2.scope)({
82
- string: import_arktype2.type.module({
83
- ...import_arktype2.type.keywords.string,
84
- host
85
- }),
86
- number: import_arktype2.type.module({
87
- ...import_arktype2.type.keywords.number,
88
- port
89
- })
90
- });
91
-
92
- // src/create-env.ts
93
- function createEnv(def, env = process.env) {
94
- const schema = $.type.raw(def);
95
- const validatedEnv = schema(env);
96
- if (validatedEnv instanceof import_arktype3.type.errors) {
97
- throw new ArkEnvError(validatedEnv);
98
- }
99
- return validatedEnv;
100
- }
101
-
102
- // src/type.ts
103
- var type4 = $.type;
104
-
105
- // src/index.ts
106
- var arkenv = createEnv;
107
- var index_default = arkenv;
108
- // Annotate the CommonJS export names for ESM import in node:
109
- 0 && (module.exports = {
110
- ArkEnvError,
111
- createEnv,
112
- type
113
- });
1
+ Object.defineProperty(exports,`__esModule`,{value:!0});var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,a)=>(a=n==null?{}:e(i(n)),o(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));let c=require(`arktype`);c=s(c);const l={red:`\x1B[31m`,yellow:`\x1B[33m`,cyan:`\x1B[36m`,reset:`\x1B[0m`},u=()=>typeof process<`u`&&process.versions!=null&&process.versions.node!=null,d=()=>!!(!u()||process.env.NO_COLOR!==void 0||process.env.CI!==void 0||process.stdout&&!process.stdout.isTTY),f=(e,t)=>u()&&!d()?`${l[e]}${t}${l.reset}`:t,p=(e,t=2,{dontDetectNewlines:n=!1}={})=>n?`${` `.repeat(t)}${e}`:e.split(`
2
+ `).map(e=>`${` `.repeat(t)}${e}`).join(`
3
+ `),m=e=>Object.entries(e.byPath).map(([e,t])=>{let n=t.message.startsWith(e)?t.message.slice(e.length):t.message,r=n.match(/\(was "([^"]+)"\)/),i=r?n.replace(`(was "${r[1]}")`,`(was ${f(`cyan`,`"${r[1]}"`)})`):n;return`${f(`yellow`,e)}${i}`}).join(`
4
+ `);var h=class extends Error{constructor(e,t=`Errors found while validating environment variables`){super(`${f(`red`,t)}\n${p(m(e))}\n`),this.name=`ArkEnvError`}};const g=(0,c.type)(`string`,`=>`,(e,t)=>{let n=Number.parseInt(e,10);return(!Number.isInteger(n)||!(0<=n&&n<=65535))&&t.mustBe(`an integer between 0 and 65535`),n}),_=(0,c.type)(`string.ip | 'localhost'`),v=(0,c.type)(`'true' | 'false' | true | false`,`=>`,e=>e===`true`||e===!0),y=(0,c.scope)({string:c.type.module({...c.type.keywords.string,host:_}),number:c.type.module({...c.type.keywords.number,port:g}),boolean:v});function b(e,t=process.env){let n=y.type.raw(e)(t);if(n instanceof c.type.errors)throw new h(n);return n}const x=y.type,S=b;var C=S;exports.ArkEnvError=h,exports.createEnv=b,exports.default=C,exports.type=x;
package/dist/index.d.cts CHANGED
@@ -1,84 +1,87 @@
1
- import * as arktype from 'arktype';
2
- import { type as type$1, distill, ArkErrors } from 'arktype';
3
- import * as arktype_internal_attributes_ts from 'arktype/internal/attributes.ts';
4
- import * as arktype_internal_keywords_string_ts from 'arktype/internal/keywords/string.ts';
5
- import * as arktype_internal_type_ts from 'arktype/internal/type.ts';
1
+ import * as arktype16 from "arktype";
2
+ import { ArkErrors, distill, type as type$1 } from "arktype";
3
+ import * as arktype_internal_keywords_string_ts10 from "arktype/internal/keywords/string.ts";
4
+ import * as arktype_internal_attributes_ts5 from "arktype/internal/attributes.ts";
5
+ import * as arktype_internal_type_ts0 from "arktype/internal/type.ts";
6
6
 
7
+ //#region src/scope.d.ts
7
8
  /**
8
9
  * The root scope for the ArkEnv library, containing extensions to the ArkType scopes with ArkEnv-specific types like `string.host` and `number.port`.
9
10
  */
10
- declare const $: arktype.Scope<{
11
- string: arktype.Submodule<{
12
- root: string;
13
- " arkInferred": string;
14
- trim: arktype.Submodule<arktype_internal_keywords_string_ts.trim.$ & {
15
- " arkInferred": (In: string) => arktype_internal_attributes_ts.To<string>;
16
- }>;
17
- normalize: arktype.Submodule<arktype_internal_keywords_string_ts.normalize.$ & {
18
- " arkInferred": (In: string) => arktype_internal_attributes_ts.To<string>;
19
- }>;
20
- alpha: string;
21
- alphanumeric: string;
22
- hex: string;
23
- base64: arktype.Submodule<{
24
- root: string;
25
- url: string;
26
- } & {
27
- " arkInferred": string;
28
- }>;
29
- capitalize: arktype.Submodule<arktype_internal_keywords_string_ts.capitalize.$ & {
30
- " arkInferred": (In: string) => arktype_internal_attributes_ts.To<string>;
31
- }>;
32
- creditCard: string;
33
- date: arktype.Submodule<arktype_internal_keywords_string_ts.stringDate.$ & {
34
- " arkInferred": string;
35
- }>;
36
- digits: string;
37
- email: string;
38
- integer: arktype.Submodule<arktype_internal_keywords_string_ts.stringInteger.$ & {
39
- " arkInferred": string;
40
- }>;
41
- ip: arktype.Submodule<arktype_internal_keywords_string_ts.ip.$ & {
42
- " arkInferred": string;
43
- }>;
44
- json: arktype.Submodule<arktype_internal_keywords_string_ts.stringJson.$ & {
45
- " arkInferred": string;
46
- }>;
47
- lower: arktype.Submodule<arktype_internal_keywords_string_ts.lower.$ & {
48
- " arkInferred": (In: string) => arktype_internal_attributes_ts.To<string>;
49
- }>;
50
- numeric: arktype.Submodule<arktype_internal_keywords_string_ts.stringNumeric.$ & {
51
- " arkInferred": string;
52
- }>;
53
- regex: string;
54
- semver: string;
55
- upper: arktype.Submodule<{
56
- root: (In: string) => arktype_internal_attributes_ts.To<string>;
57
- preformatted: string;
58
- } & {
59
- " arkInferred": (In: string) => arktype_internal_attributes_ts.To<string>;
60
- }>;
61
- url: arktype.Submodule<arktype_internal_keywords_string_ts.url.$ & {
62
- " arkInferred": string;
63
- }>;
64
- uuid: arktype.Submodule<arktype_internal_keywords_string_ts.uuid.$ & {
65
- " arkInferred": string;
66
- }>;
67
- host: string;
68
- }>;
69
- number: arktype.Submodule<{
70
- NaN: number;
71
- Infinity: number;
72
- root: number;
73
- " arkInferred": number;
74
- integer: number;
75
- epoch: number;
76
- safe: number;
77
- NegativeInfinity: number;
78
- port: (In: string) => arktype.Out<number>;
11
+ declare const $: arktype16.Scope<{
12
+ string: arktype16.Submodule<{
13
+ trim: arktype16.Submodule<arktype_internal_keywords_string_ts10.trim.$ & {
14
+ " arkInferred": (In: string) => arktype_internal_attributes_ts5.To<string>;
79
15
  }>;
16
+ normalize: arktype16.Submodule<arktype_internal_keywords_string_ts10.normalize.$ & {
17
+ " arkInferred": (In: string) => arktype_internal_attributes_ts5.To<string>;
18
+ }>;
19
+ root: string;
20
+ alpha: string;
21
+ alphanumeric: string;
22
+ hex: string;
23
+ base64: arktype16.Submodule<{
24
+ root: string;
25
+ url: string;
26
+ } & {
27
+ " arkInferred": string;
28
+ }>;
29
+ capitalize: arktype16.Submodule<arktype_internal_keywords_string_ts10.capitalize.$ & {
30
+ " arkInferred": (In: string) => arktype_internal_attributes_ts5.To<string>;
31
+ }>;
32
+ creditCard: string;
33
+ date: arktype16.Submodule<arktype_internal_keywords_string_ts10.stringDate.$ & {
34
+ " arkInferred": string;
35
+ }>;
36
+ digits: string;
37
+ email: string;
38
+ integer: arktype16.Submodule<arktype_internal_keywords_string_ts10.stringInteger.$ & {
39
+ " arkInferred": string;
40
+ }>;
41
+ ip: arktype16.Submodule<arktype_internal_keywords_string_ts10.ip.$ & {
42
+ " arkInferred": string;
43
+ }>;
44
+ json: arktype16.Submodule<arktype_internal_keywords_string_ts10.stringJson.$ & {
45
+ " arkInferred": string;
46
+ }>;
47
+ lower: arktype16.Submodule<arktype_internal_keywords_string_ts10.lower.$ & {
48
+ " arkInferred": (In: string) => arktype_internal_attributes_ts5.To<string>;
49
+ }>;
50
+ numeric: arktype16.Submodule<arktype_internal_keywords_string_ts10.stringNumeric.$ & {
51
+ " arkInferred": string;
52
+ }>;
53
+ regex: string;
54
+ semver: string;
55
+ upper: arktype16.Submodule<{
56
+ root: (In: string) => arktype_internal_attributes_ts5.To<string>;
57
+ preformatted: string;
58
+ } & {
59
+ " arkInferred": (In: string) => arktype_internal_attributes_ts5.To<string>;
60
+ }>;
61
+ url: arktype16.Submodule<arktype_internal_keywords_string_ts10.url.$ & {
62
+ " arkInferred": string;
63
+ }>;
64
+ uuid: arktype16.Submodule<arktype_internal_keywords_string_ts10.uuid.$ & {
65
+ " arkInferred": string;
66
+ }>;
67
+ " arkInferred": string;
68
+ host: string;
69
+ }>;
70
+ number: arktype16.Submodule<{
71
+ NaN: number;
72
+ Infinity: number;
73
+ root: number;
74
+ integer: number;
75
+ " arkInferred": number;
76
+ epoch: number;
77
+ safe: number;
78
+ NegativeInfinity: number;
79
+ port: (In: string) => arktype16.Out<number>;
80
+ }>;
81
+ boolean: (In: boolean | "false" | "true") => arktype16.Out<boolean>;
80
82
  }>;
81
-
83
+ //#endregion
84
+ //#region src/create-env.d.ts
82
85
  type RuntimeEnvironment = Record<string, string | undefined>;
83
86
  type EnvSchema<def> = type$1.validate<def, (typeof $)["t"]>;
84
87
  /**
@@ -93,88 +96,92 @@ type EnvSchema<def> = type$1.validate<def, (typeof $)["t"]>;
93
96
  * @throws An {@link ArkEnvError | error} if the environment variables are invalid.
94
97
  */
95
98
  declare function createEnv<const T extends Record<string, unknown>>(def: EnvSchema<T>, env?: RuntimeEnvironment): distill.Out<type$1.infer<T, (typeof $)["t"]>>;
96
-
97
- declare const type: arktype_internal_type_ts.TypeParser<{
98
- string: arktype.Submodule<{
99
- root: string;
100
- " arkInferred": string;
101
- trim: arktype.Submodule<arktype_internal_keywords_string_ts.trim.$ & {
102
- " arkInferred": (In: string) => arktype_internal_attributes_ts.To<string>;
103
- }>;
104
- normalize: arktype.Submodule<arktype_internal_keywords_string_ts.normalize.$ & {
105
- " arkInferred": (In: string) => arktype_internal_attributes_ts.To<string>;
106
- }>;
107
- alpha: string;
108
- alphanumeric: string;
109
- hex: string;
110
- base64: arktype.Submodule<{
111
- root: string;
112
- url: string;
113
- } & {
114
- " arkInferred": string;
115
- }>;
116
- capitalize: arktype.Submodule<arktype_internal_keywords_string_ts.capitalize.$ & {
117
- " arkInferred": (In: string) => arktype_internal_attributes_ts.To<string>;
118
- }>;
119
- creditCard: string;
120
- date: arktype.Submodule<arktype_internal_keywords_string_ts.stringDate.$ & {
121
- " arkInferred": string;
122
- }>;
123
- digits: string;
124
- email: string;
125
- integer: arktype.Submodule<arktype_internal_keywords_string_ts.stringInteger.$ & {
126
- " arkInferred": string;
127
- }>;
128
- ip: arktype.Submodule<arktype_internal_keywords_string_ts.ip.$ & {
129
- " arkInferred": string;
130
- }>;
131
- json: arktype.Submodule<arktype_internal_keywords_string_ts.stringJson.$ & {
132
- " arkInferred": string;
133
- }>;
134
- lower: arktype.Submodule<arktype_internal_keywords_string_ts.lower.$ & {
135
- " arkInferred": (In: string) => arktype_internal_attributes_ts.To<string>;
136
- }>;
137
- numeric: arktype.Submodule<arktype_internal_keywords_string_ts.stringNumeric.$ & {
138
- " arkInferred": string;
139
- }>;
140
- regex: string;
141
- semver: string;
142
- upper: arktype.Submodule<{
143
- root: (In: string) => arktype_internal_attributes_ts.To<string>;
144
- preformatted: string;
145
- } & {
146
- " arkInferred": (In: string) => arktype_internal_attributes_ts.To<string>;
147
- }>;
148
- url: arktype.Submodule<arktype_internal_keywords_string_ts.url.$ & {
149
- " arkInferred": string;
150
- }>;
151
- uuid: arktype.Submodule<arktype_internal_keywords_string_ts.uuid.$ & {
152
- " arkInferred": string;
153
- }>;
154
- host: string;
155
- }>;
156
- number: arktype.Submodule<{
157
- NaN: number;
158
- Infinity: number;
159
- root: number;
160
- " arkInferred": number;
161
- integer: number;
162
- epoch: number;
163
- safe: number;
164
- NegativeInfinity: number;
165
- port: (In: string) => arktype.Out<number>;
99
+ //#endregion
100
+ //#region src/type.d.ts
101
+ declare const type: arktype_internal_type_ts0.TypeParser<{
102
+ string: arktype16.Submodule<{
103
+ trim: arktype16.Submodule<arktype_internal_keywords_string_ts10.trim.$ & {
104
+ " arkInferred": (In: string) => arktype_internal_attributes_ts5.To<string>;
105
+ }>;
106
+ normalize: arktype16.Submodule<arktype_internal_keywords_string_ts10.normalize.$ & {
107
+ " arkInferred": (In: string) => arktype_internal_attributes_ts5.To<string>;
166
108
  }>;
109
+ root: string;
110
+ alpha: string;
111
+ alphanumeric: string;
112
+ hex: string;
113
+ base64: arktype16.Submodule<{
114
+ root: string;
115
+ url: string;
116
+ } & {
117
+ " arkInferred": string;
118
+ }>;
119
+ capitalize: arktype16.Submodule<arktype_internal_keywords_string_ts10.capitalize.$ & {
120
+ " arkInferred": (In: string) => arktype_internal_attributes_ts5.To<string>;
121
+ }>;
122
+ creditCard: string;
123
+ date: arktype16.Submodule<arktype_internal_keywords_string_ts10.stringDate.$ & {
124
+ " arkInferred": string;
125
+ }>;
126
+ digits: string;
127
+ email: string;
128
+ integer: arktype16.Submodule<arktype_internal_keywords_string_ts10.stringInteger.$ & {
129
+ " arkInferred": string;
130
+ }>;
131
+ ip: arktype16.Submodule<arktype_internal_keywords_string_ts10.ip.$ & {
132
+ " arkInferred": string;
133
+ }>;
134
+ json: arktype16.Submodule<arktype_internal_keywords_string_ts10.stringJson.$ & {
135
+ " arkInferred": string;
136
+ }>;
137
+ lower: arktype16.Submodule<arktype_internal_keywords_string_ts10.lower.$ & {
138
+ " arkInferred": (In: string) => arktype_internal_attributes_ts5.To<string>;
139
+ }>;
140
+ numeric: arktype16.Submodule<arktype_internal_keywords_string_ts10.stringNumeric.$ & {
141
+ " arkInferred": string;
142
+ }>;
143
+ regex: string;
144
+ semver: string;
145
+ upper: arktype16.Submodule<{
146
+ root: (In: string) => arktype_internal_attributes_ts5.To<string>;
147
+ preformatted: string;
148
+ } & {
149
+ " arkInferred": (In: string) => arktype_internal_attributes_ts5.To<string>;
150
+ }>;
151
+ url: arktype16.Submodule<arktype_internal_keywords_string_ts10.url.$ & {
152
+ " arkInferred": string;
153
+ }>;
154
+ uuid: arktype16.Submodule<arktype_internal_keywords_string_ts10.uuid.$ & {
155
+ " arkInferred": string;
156
+ }>;
157
+ " arkInferred": string;
158
+ host: string;
159
+ }>;
160
+ number: arktype16.Submodule<{
161
+ NaN: number;
162
+ Infinity: number;
163
+ root: number;
164
+ integer: number;
165
+ " arkInferred": number;
166
+ epoch: number;
167
+ safe: number;
168
+ NegativeInfinity: number;
169
+ port: (In: string) => arktype16.Out<number>;
170
+ }>;
171
+ boolean: (In: boolean | "false" | "true") => arktype16.Out<boolean>;
167
172
  }>;
168
-
173
+ //#endregion
174
+ //#region src/errors.d.ts
169
175
  declare class ArkEnvError extends Error {
170
- constructor(errors: ArkErrors, message?: string);
176
+ constructor(errors: ArkErrors, message?: string);
171
177
  }
172
-
178
+ //#endregion
179
+ //#region src/index.d.ts
173
180
  /**
174
181
  * `arkenv`'s main export, an alias for {@link createEnv}
175
182
  *
176
183
  * {@link https://arkenv.js.org | ArkEnv} is a typesafe environment variables parser powered by {@link https://arktype.io | ArkType}, TypeScript's 1:1 validator.
177
184
  */
178
185
  declare const arkenv: typeof createEnv;
179
-
180
- export { ArkEnvError, type EnvSchema, createEnv, arkenv as default, type };
186
+ //#endregion
187
+ export { ArkEnvError, type EnvSchema, createEnv, arkenv as default, type };
package/dist/index.d.ts CHANGED
@@ -1,84 +1,87 @@
1
- import * as arktype from 'arktype';
2
- import { type as type$1, distill, ArkErrors } from 'arktype';
3
- import * as arktype_internal_attributes_ts from 'arktype/internal/attributes.ts';
4
- import * as arktype_internal_keywords_string_ts from 'arktype/internal/keywords/string.ts';
5
- import * as arktype_internal_type_ts from 'arktype/internal/type.ts';
1
+ import * as arktype16 from "arktype";
2
+ import { ArkErrors, distill, type as type$1 } from "arktype";
3
+ import * as arktype_internal_keywords_string_ts10 from "arktype/internal/keywords/string.ts";
4
+ import * as arktype_internal_attributes_ts5 from "arktype/internal/attributes.ts";
5
+ import * as arktype_internal_type_ts0 from "arktype/internal/type.ts";
6
6
 
7
+ //#region src/scope.d.ts
7
8
  /**
8
9
  * The root scope for the ArkEnv library, containing extensions to the ArkType scopes with ArkEnv-specific types like `string.host` and `number.port`.
9
10
  */
10
- declare const $: arktype.Scope<{
11
- string: arktype.Submodule<{
12
- root: string;
13
- " arkInferred": string;
14
- trim: arktype.Submodule<arktype_internal_keywords_string_ts.trim.$ & {
15
- " arkInferred": (In: string) => arktype_internal_attributes_ts.To<string>;
16
- }>;
17
- normalize: arktype.Submodule<arktype_internal_keywords_string_ts.normalize.$ & {
18
- " arkInferred": (In: string) => arktype_internal_attributes_ts.To<string>;
19
- }>;
20
- alpha: string;
21
- alphanumeric: string;
22
- hex: string;
23
- base64: arktype.Submodule<{
24
- root: string;
25
- url: string;
26
- } & {
27
- " arkInferred": string;
28
- }>;
29
- capitalize: arktype.Submodule<arktype_internal_keywords_string_ts.capitalize.$ & {
30
- " arkInferred": (In: string) => arktype_internal_attributes_ts.To<string>;
31
- }>;
32
- creditCard: string;
33
- date: arktype.Submodule<arktype_internal_keywords_string_ts.stringDate.$ & {
34
- " arkInferred": string;
35
- }>;
36
- digits: string;
37
- email: string;
38
- integer: arktype.Submodule<arktype_internal_keywords_string_ts.stringInteger.$ & {
39
- " arkInferred": string;
40
- }>;
41
- ip: arktype.Submodule<arktype_internal_keywords_string_ts.ip.$ & {
42
- " arkInferred": string;
43
- }>;
44
- json: arktype.Submodule<arktype_internal_keywords_string_ts.stringJson.$ & {
45
- " arkInferred": string;
46
- }>;
47
- lower: arktype.Submodule<arktype_internal_keywords_string_ts.lower.$ & {
48
- " arkInferred": (In: string) => arktype_internal_attributes_ts.To<string>;
49
- }>;
50
- numeric: arktype.Submodule<arktype_internal_keywords_string_ts.stringNumeric.$ & {
51
- " arkInferred": string;
52
- }>;
53
- regex: string;
54
- semver: string;
55
- upper: arktype.Submodule<{
56
- root: (In: string) => arktype_internal_attributes_ts.To<string>;
57
- preformatted: string;
58
- } & {
59
- " arkInferred": (In: string) => arktype_internal_attributes_ts.To<string>;
60
- }>;
61
- url: arktype.Submodule<arktype_internal_keywords_string_ts.url.$ & {
62
- " arkInferred": string;
63
- }>;
64
- uuid: arktype.Submodule<arktype_internal_keywords_string_ts.uuid.$ & {
65
- " arkInferred": string;
66
- }>;
67
- host: string;
68
- }>;
69
- number: arktype.Submodule<{
70
- NaN: number;
71
- Infinity: number;
72
- root: number;
73
- " arkInferred": number;
74
- integer: number;
75
- epoch: number;
76
- safe: number;
77
- NegativeInfinity: number;
78
- port: (In: string) => arktype.Out<number>;
11
+ declare const $: arktype16.Scope<{
12
+ string: arktype16.Submodule<{
13
+ trim: arktype16.Submodule<arktype_internal_keywords_string_ts10.trim.$ & {
14
+ " arkInferred": (In: string) => arktype_internal_attributes_ts5.To<string>;
79
15
  }>;
16
+ normalize: arktype16.Submodule<arktype_internal_keywords_string_ts10.normalize.$ & {
17
+ " arkInferred": (In: string) => arktype_internal_attributes_ts5.To<string>;
18
+ }>;
19
+ root: string;
20
+ alpha: string;
21
+ alphanumeric: string;
22
+ hex: string;
23
+ base64: arktype16.Submodule<{
24
+ root: string;
25
+ url: string;
26
+ } & {
27
+ " arkInferred": string;
28
+ }>;
29
+ capitalize: arktype16.Submodule<arktype_internal_keywords_string_ts10.capitalize.$ & {
30
+ " arkInferred": (In: string) => arktype_internal_attributes_ts5.To<string>;
31
+ }>;
32
+ creditCard: string;
33
+ date: arktype16.Submodule<arktype_internal_keywords_string_ts10.stringDate.$ & {
34
+ " arkInferred": string;
35
+ }>;
36
+ digits: string;
37
+ email: string;
38
+ integer: arktype16.Submodule<arktype_internal_keywords_string_ts10.stringInteger.$ & {
39
+ " arkInferred": string;
40
+ }>;
41
+ ip: arktype16.Submodule<arktype_internal_keywords_string_ts10.ip.$ & {
42
+ " arkInferred": string;
43
+ }>;
44
+ json: arktype16.Submodule<arktype_internal_keywords_string_ts10.stringJson.$ & {
45
+ " arkInferred": string;
46
+ }>;
47
+ lower: arktype16.Submodule<arktype_internal_keywords_string_ts10.lower.$ & {
48
+ " arkInferred": (In: string) => arktype_internal_attributes_ts5.To<string>;
49
+ }>;
50
+ numeric: arktype16.Submodule<arktype_internal_keywords_string_ts10.stringNumeric.$ & {
51
+ " arkInferred": string;
52
+ }>;
53
+ regex: string;
54
+ semver: string;
55
+ upper: arktype16.Submodule<{
56
+ root: (In: string) => arktype_internal_attributes_ts5.To<string>;
57
+ preformatted: string;
58
+ } & {
59
+ " arkInferred": (In: string) => arktype_internal_attributes_ts5.To<string>;
60
+ }>;
61
+ url: arktype16.Submodule<arktype_internal_keywords_string_ts10.url.$ & {
62
+ " arkInferred": string;
63
+ }>;
64
+ uuid: arktype16.Submodule<arktype_internal_keywords_string_ts10.uuid.$ & {
65
+ " arkInferred": string;
66
+ }>;
67
+ " arkInferred": string;
68
+ host: string;
69
+ }>;
70
+ number: arktype16.Submodule<{
71
+ NaN: number;
72
+ Infinity: number;
73
+ root: number;
74
+ integer: number;
75
+ " arkInferred": number;
76
+ epoch: number;
77
+ safe: number;
78
+ NegativeInfinity: number;
79
+ port: (In: string) => arktype16.Out<number>;
80
+ }>;
81
+ boolean: (In: boolean | "false" | "true") => arktype16.Out<boolean>;
80
82
  }>;
81
-
83
+ //#endregion
84
+ //#region src/create-env.d.ts
82
85
  type RuntimeEnvironment = Record<string, string | undefined>;
83
86
  type EnvSchema<def> = type$1.validate<def, (typeof $)["t"]>;
84
87
  /**
@@ -93,88 +96,92 @@ type EnvSchema<def> = type$1.validate<def, (typeof $)["t"]>;
93
96
  * @throws An {@link ArkEnvError | error} if the environment variables are invalid.
94
97
  */
95
98
  declare function createEnv<const T extends Record<string, unknown>>(def: EnvSchema<T>, env?: RuntimeEnvironment): distill.Out<type$1.infer<T, (typeof $)["t"]>>;
96
-
97
- declare const type: arktype_internal_type_ts.TypeParser<{
98
- string: arktype.Submodule<{
99
- root: string;
100
- " arkInferred": string;
101
- trim: arktype.Submodule<arktype_internal_keywords_string_ts.trim.$ & {
102
- " arkInferred": (In: string) => arktype_internal_attributes_ts.To<string>;
103
- }>;
104
- normalize: arktype.Submodule<arktype_internal_keywords_string_ts.normalize.$ & {
105
- " arkInferred": (In: string) => arktype_internal_attributes_ts.To<string>;
106
- }>;
107
- alpha: string;
108
- alphanumeric: string;
109
- hex: string;
110
- base64: arktype.Submodule<{
111
- root: string;
112
- url: string;
113
- } & {
114
- " arkInferred": string;
115
- }>;
116
- capitalize: arktype.Submodule<arktype_internal_keywords_string_ts.capitalize.$ & {
117
- " arkInferred": (In: string) => arktype_internal_attributes_ts.To<string>;
118
- }>;
119
- creditCard: string;
120
- date: arktype.Submodule<arktype_internal_keywords_string_ts.stringDate.$ & {
121
- " arkInferred": string;
122
- }>;
123
- digits: string;
124
- email: string;
125
- integer: arktype.Submodule<arktype_internal_keywords_string_ts.stringInteger.$ & {
126
- " arkInferred": string;
127
- }>;
128
- ip: arktype.Submodule<arktype_internal_keywords_string_ts.ip.$ & {
129
- " arkInferred": string;
130
- }>;
131
- json: arktype.Submodule<arktype_internal_keywords_string_ts.stringJson.$ & {
132
- " arkInferred": string;
133
- }>;
134
- lower: arktype.Submodule<arktype_internal_keywords_string_ts.lower.$ & {
135
- " arkInferred": (In: string) => arktype_internal_attributes_ts.To<string>;
136
- }>;
137
- numeric: arktype.Submodule<arktype_internal_keywords_string_ts.stringNumeric.$ & {
138
- " arkInferred": string;
139
- }>;
140
- regex: string;
141
- semver: string;
142
- upper: arktype.Submodule<{
143
- root: (In: string) => arktype_internal_attributes_ts.To<string>;
144
- preformatted: string;
145
- } & {
146
- " arkInferred": (In: string) => arktype_internal_attributes_ts.To<string>;
147
- }>;
148
- url: arktype.Submodule<arktype_internal_keywords_string_ts.url.$ & {
149
- " arkInferred": string;
150
- }>;
151
- uuid: arktype.Submodule<arktype_internal_keywords_string_ts.uuid.$ & {
152
- " arkInferred": string;
153
- }>;
154
- host: string;
155
- }>;
156
- number: arktype.Submodule<{
157
- NaN: number;
158
- Infinity: number;
159
- root: number;
160
- " arkInferred": number;
161
- integer: number;
162
- epoch: number;
163
- safe: number;
164
- NegativeInfinity: number;
165
- port: (In: string) => arktype.Out<number>;
99
+ //#endregion
100
+ //#region src/type.d.ts
101
+ declare const type: arktype_internal_type_ts0.TypeParser<{
102
+ string: arktype16.Submodule<{
103
+ trim: arktype16.Submodule<arktype_internal_keywords_string_ts10.trim.$ & {
104
+ " arkInferred": (In: string) => arktype_internal_attributes_ts5.To<string>;
105
+ }>;
106
+ normalize: arktype16.Submodule<arktype_internal_keywords_string_ts10.normalize.$ & {
107
+ " arkInferred": (In: string) => arktype_internal_attributes_ts5.To<string>;
166
108
  }>;
109
+ root: string;
110
+ alpha: string;
111
+ alphanumeric: string;
112
+ hex: string;
113
+ base64: arktype16.Submodule<{
114
+ root: string;
115
+ url: string;
116
+ } & {
117
+ " arkInferred": string;
118
+ }>;
119
+ capitalize: arktype16.Submodule<arktype_internal_keywords_string_ts10.capitalize.$ & {
120
+ " arkInferred": (In: string) => arktype_internal_attributes_ts5.To<string>;
121
+ }>;
122
+ creditCard: string;
123
+ date: arktype16.Submodule<arktype_internal_keywords_string_ts10.stringDate.$ & {
124
+ " arkInferred": string;
125
+ }>;
126
+ digits: string;
127
+ email: string;
128
+ integer: arktype16.Submodule<arktype_internal_keywords_string_ts10.stringInteger.$ & {
129
+ " arkInferred": string;
130
+ }>;
131
+ ip: arktype16.Submodule<arktype_internal_keywords_string_ts10.ip.$ & {
132
+ " arkInferred": string;
133
+ }>;
134
+ json: arktype16.Submodule<arktype_internal_keywords_string_ts10.stringJson.$ & {
135
+ " arkInferred": string;
136
+ }>;
137
+ lower: arktype16.Submodule<arktype_internal_keywords_string_ts10.lower.$ & {
138
+ " arkInferred": (In: string) => arktype_internal_attributes_ts5.To<string>;
139
+ }>;
140
+ numeric: arktype16.Submodule<arktype_internal_keywords_string_ts10.stringNumeric.$ & {
141
+ " arkInferred": string;
142
+ }>;
143
+ regex: string;
144
+ semver: string;
145
+ upper: arktype16.Submodule<{
146
+ root: (In: string) => arktype_internal_attributes_ts5.To<string>;
147
+ preformatted: string;
148
+ } & {
149
+ " arkInferred": (In: string) => arktype_internal_attributes_ts5.To<string>;
150
+ }>;
151
+ url: arktype16.Submodule<arktype_internal_keywords_string_ts10.url.$ & {
152
+ " arkInferred": string;
153
+ }>;
154
+ uuid: arktype16.Submodule<arktype_internal_keywords_string_ts10.uuid.$ & {
155
+ " arkInferred": string;
156
+ }>;
157
+ " arkInferred": string;
158
+ host: string;
159
+ }>;
160
+ number: arktype16.Submodule<{
161
+ NaN: number;
162
+ Infinity: number;
163
+ root: number;
164
+ integer: number;
165
+ " arkInferred": number;
166
+ epoch: number;
167
+ safe: number;
168
+ NegativeInfinity: number;
169
+ port: (In: string) => arktype16.Out<number>;
170
+ }>;
171
+ boolean: (In: boolean | "false" | "true") => arktype16.Out<boolean>;
167
172
  }>;
168
-
173
+ //#endregion
174
+ //#region src/errors.d.ts
169
175
  declare class ArkEnvError extends Error {
170
- constructor(errors: ArkErrors, message?: string);
176
+ constructor(errors: ArkErrors, message?: string);
171
177
  }
172
-
178
+ //#endregion
179
+ //#region src/index.d.ts
173
180
  /**
174
181
  * `arkenv`'s main export, an alias for {@link createEnv}
175
182
  *
176
183
  * {@link https://arkenv.js.org | ArkEnv} is a typesafe environment variables parser powered by {@link https://arktype.io | ArkType}, TypeScript's 1:1 validator.
177
184
  */
178
185
  declare const arkenv: typeof createEnv;
179
-
180
- export { ArkEnvError, type EnvSchema, createEnv, arkenv as default, type };
186
+ //#endregion
187
+ export { ArkEnvError, type EnvSchema, createEnv, arkenv as default, type };
package/dist/index.js CHANGED
@@ -1,84 +1,4 @@
1
- // src/create-env.ts
2
- import { type as type3 } from "arktype";
3
-
4
- // src/errors.ts
5
- import { styleText } from "util";
6
-
7
- // src/utils.ts
8
- var indent = (str, amt = 2, { dontDetectNewlines = false } = {}) => {
9
- const detectNewlines = !dontDetectNewlines;
10
- if (detectNewlines) {
11
- return str.split("\n").map((line) => `${" ".repeat(amt)}${line}`).join("\n");
12
- }
13
- return `${" ".repeat(amt)}${str}`;
14
- };
15
-
16
- // src/errors.ts
17
- var formatErrors = (errors) => Object.entries(errors.byPath).map(([path, error]) => {
18
- const messageWithoutPath = error.message.startsWith(path) ? error.message.slice(path.length) : error.message;
19
- const valueMatch = messageWithoutPath.match(/\(was "([^"]+)"\)/);
20
- const formattedMessage = valueMatch ? messageWithoutPath.replace(
21
- `(was "${valueMatch[1]}")`,
22
- `(was ${styleText("cyan", `"${valueMatch[1]}"`)})`
23
- ) : messageWithoutPath;
24
- return `${styleText("yellow", path)}${formattedMessage}`;
25
- }).join("\n");
26
- var ArkEnvError = class extends Error {
27
- constructor(errors, message = "Errors found while validating environment variables") {
28
- super(`${styleText("red", message)}
29
- ${indent(formatErrors(errors))}
30
- `);
31
- this.name = "ArkEnvError";
32
- }
33
- };
34
-
35
- // src/scope.ts
36
- import { scope, type as type2 } from "arktype";
37
-
38
- // src/types.ts
39
- import { type } from "arktype";
40
- var port = type("string", "=>", (data, ctx) => {
41
- const asNumber = Number.parseInt(data, 10);
42
- const isInteger = Number.isInteger(asNumber);
43
- const isBetween = 0 <= asNumber && asNumber <= 65535;
44
- if (!isInteger || !isBetween) {
45
- ctx.mustBe("an integer between 0 and 65535");
46
- }
47
- return asNumber;
48
- });
49
- var host = type("string.ip | 'localhost'");
50
-
51
- // src/scope.ts
52
- var $ = scope({
53
- string: type2.module({
54
- ...type2.keywords.string,
55
- host
56
- }),
57
- number: type2.module({
58
- ...type2.keywords.number,
59
- port
60
- })
61
- });
62
-
63
- // src/create-env.ts
64
- function createEnv(def, env = process.env) {
65
- const schema = $.type.raw(def);
66
- const validatedEnv = schema(env);
67
- if (validatedEnv instanceof type3.errors) {
68
- throw new ArkEnvError(validatedEnv);
69
- }
70
- return validatedEnv;
71
- }
72
-
73
- // src/type.ts
74
- var type4 = $.type;
75
-
76
- // src/index.ts
77
- var arkenv = createEnv;
78
- var index_default = arkenv;
79
- export {
80
- ArkEnvError,
81
- createEnv,
82
- index_default as default,
83
- type4 as type
84
- };
1
+ import{scope as e,type as t}from"arktype";const n={red:`\x1B[31m`,yellow:`\x1B[33m`,cyan:`\x1B[36m`,reset:`\x1B[0m`},r=()=>typeof process<`u`&&process.versions!=null&&process.versions.node!=null,i=()=>!!(!r()||process.env.NO_COLOR!==void 0||process.env.CI!==void 0||process.stdout&&!process.stdout.isTTY),a=(e,t)=>r()&&!i()?`${n[e]}${t}${n.reset}`:t,o=(e,t=2,{dontDetectNewlines:n=!1}={})=>n?`${` `.repeat(t)}${e}`:e.split(`
2
+ `).map(e=>`${` `.repeat(t)}${e}`).join(`
3
+ `),s=e=>Object.entries(e.byPath).map(([e,t])=>{let n=t.message.startsWith(e)?t.message.slice(e.length):t.message,r=n.match(/\(was "([^"]+)"\)/),i=r?n.replace(`(was "${r[1]}")`,`(was ${a(`cyan`,`"${r[1]}"`)})`):n;return`${a(`yellow`,e)}${i}`}).join(`
4
+ `);var c=class extends Error{constructor(e,t=`Errors found while validating environment variables`){super(`${a(`red`,t)}\n${o(s(e))}\n`),this.name=`ArkEnvError`}};const l=t(`string`,`=>`,(e,t)=>{let n=Number.parseInt(e,10);return(!Number.isInteger(n)||!(0<=n&&n<=65535))&&t.mustBe(`an integer between 0 and 65535`),n}),u=t(`string.ip | 'localhost'`),d=t(`'true' | 'false' | true | false`,`=>`,e=>e===`true`||e===!0),f=e({string:t.module({...t.keywords.string,host:u}),number:t.module({...t.keywords.number,port:l}),boolean:d});function p(e,n=process.env){let r=f.type.raw(e)(n);if(r instanceof t.errors)throw new c(r);return r}const m=f.type;var h=p;export{c as ArkEnvError,p as createEnv,h as default,m as type};
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "arkenv",
3
3
  "type": "module",
4
- "version": "0.7.2",
4
+ "version": "0.7.4",
5
5
  "main": "./dist/index.cjs",
6
6
  "module": "./dist/index.js",
7
7
  "types": "./dist/index.d.ts",
@@ -31,20 +31,33 @@
31
31
  "bugs": "https://github.com/yamcodes/arkenv/labels/arkenv",
32
32
  "author": "Yam Borodetsky <yam@yam.codes>",
33
33
  "devDependencies": {
34
- "@ark/schema": "^0.49.0",
35
- "@types/node": "24.6.2",
36
- "tsup": "^8.5.0",
37
- "typescript": "^5.9.3"
34
+ "@ark/schema": "0.53.0",
35
+ "@size-limit/esbuild-why": "11.2.0",
36
+ "@size-limit/preset-small-lib": "11.2.0",
37
+ "@types/node": "24.10.0",
38
+ "arktype": "2.1.25",
39
+ "size-limit": "11.2.0",
40
+ "tsdown": "0.15.12",
41
+ "typescript": "5.9.3",
42
+ "vitest": "4.0.4"
38
43
  },
39
44
  "peerDependencies": {
40
45
  "arktype": "^2.1.22"
41
46
  },
47
+ "size-limit": [
48
+ {
49
+ "path": "dist/index.js",
50
+ "limit": "2 kB",
51
+ "import": "*"
52
+ }
53
+ ],
42
54
  "scripts": {
43
- "build": "rimraf dist && tsup",
55
+ "build": "tsdown",
56
+ "size": "size-limit",
44
57
  "test:once": "pnpm test",
45
58
  "typecheck": "tsc --noEmit",
46
59
  "clean": "rimraf dist node_modules",
47
- "test": "pnpm -w test --project arkenv",
60
+ "test": "vitest",
48
61
  "fix": "pnpm -w run fix"
49
62
  }
50
63
  }