@prosopo/dotenv 3.0.49 → 3.0.50

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,5 +1,5 @@
1
1
 
2
- > @prosopo/dotenv@3.0.49 build:cjs
2
+ > @prosopo/dotenv@3.0.50 build:cjs
3
3
  > NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV
4
4
 
5
5
  ViteCommonJSConfig: .
@@ -10,12 +10,15 @@ ViteCommonJSConfig: .
10
10
  ]
11
11
  }
12
12
  { externals: [ '@prosopo/logger', '@prosopo/util' ] }
13
- vite v6.4.1 building SSR bundle for production...
13
+ The plugin "vite-tsconfig-paths" is detected. Vite now supports tsconfig paths resolution natively via the resolve.tsconfigPaths option. You can remove the plugin and set resolve.tsconfigPaths: true in your Vite config instead.
14
+ vite v8.1.5 building ssr environment for production...
14
15
  Bundle build started
15
- transforming...
16
- Build end
17
- ✓ 2 modules transformed.
16
+ 
17
+ ✓ 3 modules transformed.
18
18
  rendering chunks...
19
- dist/cjs/index.cjs 0.22 kB
20
- dist/cjs/env.cjs 2.67 kB
21
- ✓ built in 133ms
19
+ computing gzip size...
20
+ dist/cjs/index.cjs 0.23 kB │ gzip: 0.15 kB
21
+ dist/cjs/_virtual/_rolldown/runtime.cjs 1.00 kB │ gzip: 0.50 kB
22
+ dist/cjs/env.cjs 2.99 kB │ gzip: 1.14 kB
23
+
24
+ ✓ built in 57ms
@@ -1,20 +1,20 @@
1
1
 
2
- > @prosopo/dotenv@3.0.49 build:tsc
2
+ > @prosopo/dotenv@3.0.50 build:tsc
3
3
  > tsc --build --verbose
4
4
 
5
- 1:21:08 PM - Projects in this build:
5
+ 8:58:51 PM - Projects in this build:
6
6
  * ../../dev/config/tsconfig.json
7
7
  * ../util/tsconfig.json
8
8
  * ../logger/tsconfig.json
9
9
  * tsconfig.json
10
10
 
11
- 1:21:08 PM - Project '../../dev/config/tsconfig.json' is up to date because newest input '../../dev/config/src/webpack/webpack.config.ts' is older than output '../../dev/config/tsconfig.tsbuildinfo'
11
+ 8:58:51 PM - Project '../../dev/config/tsconfig.json' is up to date because newest input '../../dev/config/src/webpack/webpack.config.ts' is older than output '../../dev/config/tsconfig.tsbuildinfo'
12
12
 
13
- 1:21:08 PM - Project '../util/tsconfig.json' is up to date because newest input '../util/src/url.ts' is older than output '../util/tsconfig.tsbuildinfo'
13
+ 8:58:52 PM - Project '../util/tsconfig.json' is up to date because newest input '../util/src/url.ts' is older than output '../util/tsconfig.tsbuildinfo'
14
14
 
15
- 1:21:08 PM - Project '../logger/tsconfig.json' is up to date because newest input '../logger/src/index.ts' is older than output '../logger/tsconfig.tsbuildinfo'
15
+ 8:58:52 PM - Project '../logger/tsconfig.json' is up to date because newest input '../logger/src/index.ts' is older than output '../logger/tsconfig.tsbuildinfo'
16
16
 
17
- 1:21:08 PM - Project 'tsconfig.json' is out of date because output file 'tsconfig.tsbuildinfo' does not exist
17
+ 8:58:52 PM - Project 'tsconfig.json' is out of date because output file 'tsconfig.tsbuildinfo' does not exist
18
18
 
19
- 1:21:08 PM - Building project '/home/runner/work/captcha/captcha/packages/dotenv/tsconfig.json'...
19
+ 8:58:52 PM - Building project '/home/runner/work/captcha/captcha/packages/dotenv/tsconfig.json'...
20
20
 
@@ -1,9 +1,9 @@
1
1
 
2
- > @prosopo/dotenv@3.0.49 build
2
+ > @prosopo/dotenv@3.0.50 build
3
3
  > npm run build:cross-env -- --mode ${NODE_ENV:-development}
4
4
 
5
5
 
6
- > @prosopo/dotenv@3.0.49 build:cross-env
6
+ > @prosopo/dotenv@3.0.50 build:cross-env
7
7
  > vite build --config vite.esm.config.ts --mode production
8
8
 
9
9
  ViteEsmConfig: .
@@ -13,13 +13,16 @@ ViteEsmConfig: .
13
13
  '/home/runner/work/captcha/captcha/packages/util/tsconfig.json'
14
14
  ]
15
15
  }
16
+ The plugin "vite-tsconfig-paths" is detected. Vite now supports tsconfig paths resolution natively via the resolve.tsconfigPaths option. You can remove the plugin and set resolve.tsconfigPaths: true in your Vite config instead.
16
17
  { externals: [ '@prosopo/logger', '@prosopo/util' ] }
17
- vite v6.4.1 building SSR bundle for production...
18
+ vite v8.1.5 building ssr environment for production...
18
19
  Bundle build started
19
- transforming...
20
- Build end
21
- ✓ 2 modules transformed.
20
+ 
21
+ ✓ 3 modules transformed.
22
22
  rendering chunks...
23
- dist/index.js 0.10 kB
24
- dist/env.js 2.20 kB
25
- ✓ built in 134ms
23
+ computing gzip size...
24
+ dist/_virtual/_rolldown/runtime.js 0.04 kB │ gzip: 0.06 kB
25
+ dist/index.js 0.13 kB │ gzip: 0.10 kB
26
+ dist/env.js 2.44 kB │ gzip: 1.03 kB
27
+
28
+ ✓ built in 73ms
package/CHANGELOG.md CHANGED
@@ -1,5 +1,28 @@
1
1
  # @prosopo/dotenv
2
2
 
3
+ ## 3.0.50
4
+ ### Patch Changes
5
+
6
+ - 4cd9035: test(dotenv): add vitest type tests for the env API
7
+
8
+ Runtime tests cannot catch a published signature that silently widens. These
9
+ pin the parts consumers depend on: `getEnv` and `getEnvFile` returning a plain
10
+ `string` rather than `string | undefined` (both already default the absent
11
+ case away, so a nullable return would push work back onto every caller),
12
+ `loadEnv` returning the resolved path rather than void, and the optional
13
+ positional arguments of `loadEnv`/`getEnvFile` in order.
14
+ - 8fba211: test(dotenv): add unit test suite covering env discovery and loading
15
+
16
+ Adds 47 unit tests for `getEnv`, `getEnvFile` and `loadEnv`, reaching 100%
17
+ statement, branch, function and line coverage, and wires the package into
18
+ `turbo run test` so it runs in CI.
19
+
20
+ Also fixes `getEnvFile` so that a `NODE_ENV` sanitising to the empty string
21
+ (e.g. `"!!!"`) falls back to the unsuffixed `.env` rather than searching for
22
+ the never-created `.env.` filename.
23
+ - e14fce6: chore(deps): bump vite to 6.4.3 and mongoose to 8.24.1, and adjust types for the mongoose 8.24 Document/ObjectId changes
24
+ - @prosopo/logger@2.0.4
25
+
3
26
  ## 3.0.49
4
27
  ### Patch Changes
5
28
 
@@ -0,0 +1,3 @@
1
+ import "node:module";
2
+ //#endregion
3
+ export {};
@@ -0,0 +1,23 @@
1
+ //#region \0rolldown/runtime.js
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __copyProps = (to, from, except, desc) => {
9
+ if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
10
+ key = keys[i];
11
+ if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
12
+ get: ((k) => from[k]).bind(null, key),
13
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
14
+ });
15
+ }
16
+ return to;
17
+ };
18
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
19
+ value: mod,
20
+ enumerable: true
21
+ }) : target, mod));
22
+ //#endregion
23
+ exports.__toESM = __toESM;
package/dist/cjs/env.cjs CHANGED
@@ -1,73 +1,81 @@
1
- "use strict";
2
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const fs = require("node:fs");
4
- const path = require("node:path");
5
- const node_url = require("node:url");
6
- const logger$1 = require("@prosopo/logger");
7
- const dotenv = require("dotenv");
8
- var _documentCurrentScript = typeof document !== "undefined" ? document.currentScript : null;
9
- const __filename$1 = node_url.fileURLToPath(typeof document === "undefined" ? require("url").pathToFileURL(__filename).href : _documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === "SCRIPT" && _documentCurrentScript.src || new URL("env.cjs", document.baseURI).href);
10
- const __dirname$1 = path.dirname(__filename$1);
11
- const logger = logger$1.getLogger(
12
- logger$1.parseLogLevel(process.env.PROSOPO_LOG_LEVEL, logger$1.LogLevel.enum.info),
13
- "dotenv"
14
- );
1
+ const require_runtime = require("./_virtual/_rolldown/runtime.cjs");
2
+ let node_fs = require("node:fs");
3
+ node_fs = require_runtime.__toESM(node_fs, 1);
4
+ let node_path = require("node:path");
5
+ node_path = require_runtime.__toESM(node_path, 1);
6
+ let node_url = require("node:url");
7
+ let _prosopo_logger = require("@prosopo/logger");
8
+ let dotenv = require("dotenv");
9
+ dotenv = require_runtime.__toESM(dotenv, 1);
10
+ //#region src/env.ts
11
+ var __filename$1 = (0, node_url.fileURLToPath)(require("url").pathToFileURL(__filename).href);
12
+ var __dirname$1 = node_path.default.dirname(__filename$1);
13
+ var logger = (0, _prosopo_logger.getLogger)((0, _prosopo_logger.parseLogLevel)(process.env.PROSOPO_LOG_LEVEL, _prosopo_logger.LogLevel.enum.info), "dotenv");
15
14
  function getEnv() {
16
- if (process.env.NODE_ENV) {
17
- return process.env.NODE_ENV.replace(/\W/g, "");
18
- }
19
- return "development";
15
+ if (process.env.NODE_ENV) return process.env.NODE_ENV.replace(/\W/g, "");
16
+ return "development";
20
17
  }
21
18
  function loadEnv(rootDir, filename, filePath, nodeEnv, override = false) {
22
- const envPath = getEnvFile(
23
- path.resolve(rootDir || "."),
24
- filename,
25
- filePath,
26
- nodeEnv
27
- );
28
- const args = { path: envPath, override };
29
- logger.debug(() => ({
30
- data: { envPath },
31
- msg: "Loading env"
32
- }));
33
- dotenv.config(args);
34
- return envPath;
19
+ const envPath = getEnvFile(node_path.default.resolve(rootDir || "."), filename, filePath, nodeEnv);
20
+ const args = {
21
+ path: envPath,
22
+ override
23
+ };
24
+ logger.debug(() => ({
25
+ data: { envPath },
26
+ msg: "Loading env"
27
+ }));
28
+ dotenv.default.config(args);
29
+ return envPath;
35
30
  }
36
- function getEnvFile(rootDir, filename = ".env", filepath = path.join(__dirname$1, "../.."), nodeEnv) {
37
- const env = nodeEnv || getEnv();
38
- const fileNameFull = `${filename}.${env}`;
39
- let searchPath = path.resolve(rootDir || ".");
40
- logger.debug(() => ({
41
- data: { fileName: fileNameFull, searchPath },
42
- msg: "Searching"
43
- }));
44
- let levelCount = 0;
45
- while (!fs.existsSync(path.join(searchPath, fileNameFull))) {
46
- if (fs.existsSync(path.join(searchPath, "package.json"))) {
47
- const pkgJson = JSON.parse(
48
- fs.readFileSync(path.join(searchPath, "package.json"), "utf8")
49
- );
50
- if (pkgJson.name === "@prosopo/captcha-private") {
51
- logger.debug(() => ({
52
- data: { fileName: fileNameFull },
53
- msg: "Reached the workspace root package.json, stopping search."
54
- }));
55
- break;
56
- }
57
- }
58
- searchPath = path.resolve(searchPath, "..");
59
- levelCount += 1;
60
- if (levelCount > 10) {
61
- logger.debug(() => ({
62
- data: { fileName: fileNameFull, levelCount },
63
- msg: "Checked directories above, stopping search."
64
- }));
65
- break;
66
- }
67
- }
68
- const foundPath = path.join(searchPath, fileNameFull);
69
- return fs.existsSync(foundPath) ? foundPath : path.join(rootDir || filepath, fileNameFull);
31
+ /**
32
+ * Get the path to the .env file. Search up directories until `${filename}.${env}`
33
+ * is found — or, when `env` sanitises to the empty string, plain `filename`.
34
+ * If not found, look in the root directory, if specified, or 2 directories up from this file.
35
+ * @param rootDir
36
+ * @param filename
37
+ * @param filepath
38
+ * @param nodeEnv Environment override
39
+ */
40
+ function getEnvFile(rootDir, filename = ".env", filepath = node_path.default.join(__dirname$1, "../.."), nodeEnv) {
41
+ const env = nodeEnv || getEnv();
42
+ const fileNameFull = env ? `${filename}.${env}` : filename;
43
+ let searchPath = node_path.default.resolve(rootDir || ".");
44
+ logger.debug(() => ({
45
+ data: {
46
+ fileName: fileNameFull,
47
+ searchPath
48
+ },
49
+ msg: "Searching"
50
+ }));
51
+ let levelCount = 0;
52
+ while (!node_fs.default.existsSync(node_path.default.join(searchPath, fileNameFull))) {
53
+ if (node_fs.default.existsSync(node_path.default.join(searchPath, "package.json"))) {
54
+ if (JSON.parse(node_fs.default.readFileSync(node_path.default.join(searchPath, "package.json"), "utf8")).name === "@prosopo/captcha-private") {
55
+ logger.debug(() => ({
56
+ data: { fileName: fileNameFull },
57
+ msg: "Reached the workspace root package.json, stopping search."
58
+ }));
59
+ break;
60
+ }
61
+ }
62
+ searchPath = node_path.default.resolve(searchPath, "..");
63
+ levelCount += 1;
64
+ if (levelCount > 10) {
65
+ logger.debug(() => ({
66
+ data: {
67
+ fileName: fileNameFull,
68
+ levelCount
69
+ },
70
+ msg: "Checked directories above, stopping search."
71
+ }));
72
+ break;
73
+ }
74
+ }
75
+ const foundPath = node_path.default.join(searchPath, fileNameFull);
76
+ return node_fs.default.existsSync(foundPath) ? foundPath : node_path.default.join(rootDir || filepath, fileNameFull);
70
77
  }
78
+ //#endregion
71
79
  exports.getEnv = getEnv;
72
80
  exports.getEnvFile = getEnvFile;
73
81
  exports.loadEnv = loadEnv;
@@ -1,6 +1,5 @@
1
- "use strict";
2
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const env = require("./env.cjs");
4
- exports.getEnv = env.getEnv;
5
- exports.getEnvFile = env.getEnvFile;
6
- exports.loadEnv = env.loadEnv;
2
+ const require_env = require("./env.cjs");
3
+ exports.getEnv = require_env.getEnv;
4
+ exports.getEnvFile = require_env.getEnvFile;
5
+ exports.loadEnv = require_env.loadEnv;
package/dist/env.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AA2BA,wBAAgB,MAAM,WAKrB;AAED,wBAAgB,OAAO,CACtB,OAAO,CAAC,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,MAAM,EACjB,QAAQ,CAAC,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,MAAM,EAChB,QAAQ,UAAQ,GACd,MAAM,CAcR;AAUD,wBAAgB,UAAU,CACzB,OAAO,CAAC,EAAE,MAAM,EAChB,QAAQ,SAAS,EACjB,QAAQ,SAAgC,EACxC,OAAO,CAAC,EAAE,MAAM,UA0ChB"}
1
+ {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AA2BA,wBAAgB,MAAM,WAKrB;AAED,wBAAgB,OAAO,CACtB,OAAO,CAAC,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,MAAM,EACjB,QAAQ,CAAC,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,MAAM,EAChB,QAAQ,UAAQ,GACd,MAAM,CAcR;AAWD,wBAAgB,UAAU,CACzB,OAAO,CAAC,EAAE,MAAM,EAChB,QAAQ,SAAS,EACjB,QAAQ,SAAgC,EACxC,OAAO,CAAC,EAAE,MAAM,UA6ChB"}
package/dist/env.js CHANGED
@@ -1,72 +1,75 @@
1
1
  import fs from "node:fs";
2
2
  import path from "node:path";
3
3
  import { fileURLToPath } from "node:url";
4
- import { getLogger, parseLogLevel, LogLevel } from "@prosopo/logger";
4
+ import { LogLevel, getLogger, parseLogLevel } from "@prosopo/logger";
5
5
  import dotenv from "dotenv";
6
- const __filename = fileURLToPath(import.meta.url);
7
- const __dirname = path.dirname(__filename);
8
- const logger = getLogger(
9
- parseLogLevel(process.env.PROSOPO_LOG_LEVEL, LogLevel.enum.info),
10
- "dotenv"
11
- );
6
+ //#region src/env.ts
7
+ var __filename = fileURLToPath(import.meta.url);
8
+ var __dirname = path.dirname(__filename);
9
+ var logger = getLogger(parseLogLevel(process.env.PROSOPO_LOG_LEVEL, LogLevel.enum.info), "dotenv");
12
10
  function getEnv() {
13
- if (process.env.NODE_ENV) {
14
- return process.env.NODE_ENV.replace(/\W/g, "");
15
- }
16
- return "development";
11
+ if (process.env.NODE_ENV) return process.env.NODE_ENV.replace(/\W/g, "");
12
+ return "development";
17
13
  }
18
14
  function loadEnv(rootDir, filename, filePath, nodeEnv, override = false) {
19
- const envPath = getEnvFile(
20
- path.resolve(rootDir || "."),
21
- filename,
22
- filePath,
23
- nodeEnv
24
- );
25
- const args = { path: envPath, override };
26
- logger.debug(() => ({
27
- data: { envPath },
28
- msg: "Loading env"
29
- }));
30
- dotenv.config(args);
31
- return envPath;
15
+ const envPath = getEnvFile(path.resolve(rootDir || "."), filename, filePath, nodeEnv);
16
+ const args = {
17
+ path: envPath,
18
+ override
19
+ };
20
+ logger.debug(() => ({
21
+ data: { envPath },
22
+ msg: "Loading env"
23
+ }));
24
+ dotenv.config(args);
25
+ return envPath;
32
26
  }
27
+ /**
28
+ * Get the path to the .env file. Search up directories until `${filename}.${env}`
29
+ * is found — or, when `env` sanitises to the empty string, plain `filename`.
30
+ * If not found, look in the root directory, if specified, or 2 directories up from this file.
31
+ * @param rootDir
32
+ * @param filename
33
+ * @param filepath
34
+ * @param nodeEnv Environment override
35
+ */
33
36
  function getEnvFile(rootDir, filename = ".env", filepath = path.join(__dirname, "../.."), nodeEnv) {
34
- const env = nodeEnv || getEnv();
35
- const fileNameFull = `${filename}.${env}`;
36
- let searchPath = path.resolve(rootDir || ".");
37
- logger.debug(() => ({
38
- data: { fileName: fileNameFull, searchPath },
39
- msg: "Searching"
40
- }));
41
- let levelCount = 0;
42
- while (!fs.existsSync(path.join(searchPath, fileNameFull))) {
43
- if (fs.existsSync(path.join(searchPath, "package.json"))) {
44
- const pkgJson = JSON.parse(
45
- fs.readFileSync(path.join(searchPath, "package.json"), "utf8")
46
- );
47
- if (pkgJson.name === "@prosopo/captcha-private") {
48
- logger.debug(() => ({
49
- data: { fileName: fileNameFull },
50
- msg: "Reached the workspace root package.json, stopping search."
51
- }));
52
- break;
53
- }
54
- }
55
- searchPath = path.resolve(searchPath, "..");
56
- levelCount += 1;
57
- if (levelCount > 10) {
58
- logger.debug(() => ({
59
- data: { fileName: fileNameFull, levelCount },
60
- msg: "Checked directories above, stopping search."
61
- }));
62
- break;
63
- }
64
- }
65
- const foundPath = path.join(searchPath, fileNameFull);
66
- return fs.existsSync(foundPath) ? foundPath : path.join(rootDir || filepath, fileNameFull);
37
+ const env = nodeEnv || getEnv();
38
+ const fileNameFull = env ? `${filename}.${env}` : filename;
39
+ let searchPath = path.resolve(rootDir || ".");
40
+ logger.debug(() => ({
41
+ data: {
42
+ fileName: fileNameFull,
43
+ searchPath
44
+ },
45
+ msg: "Searching"
46
+ }));
47
+ let levelCount = 0;
48
+ while (!fs.existsSync(path.join(searchPath, fileNameFull))) {
49
+ if (fs.existsSync(path.join(searchPath, "package.json"))) {
50
+ if (JSON.parse(fs.readFileSync(path.join(searchPath, "package.json"), "utf8")).name === "@prosopo/captcha-private") {
51
+ logger.debug(() => ({
52
+ data: { fileName: fileNameFull },
53
+ msg: "Reached the workspace root package.json, stopping search."
54
+ }));
55
+ break;
56
+ }
57
+ }
58
+ searchPath = path.resolve(searchPath, "..");
59
+ levelCount += 1;
60
+ if (levelCount > 10) {
61
+ logger.debug(() => ({
62
+ data: {
63
+ fileName: fileNameFull,
64
+ levelCount
65
+ },
66
+ msg: "Checked directories above, stopping search."
67
+ }));
68
+ break;
69
+ }
70
+ }
71
+ const foundPath = path.join(searchPath, fileNameFull);
72
+ return fs.existsSync(foundPath) ? foundPath : path.join(rootDir || filepath, fileNameFull);
67
73
  }
68
- export {
69
- getEnv,
70
- getEnvFile,
71
- loadEnv
72
- };
74
+ //#endregion
75
+ export { getEnv, getEnvFile, loadEnv };
package/dist/env.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"env.js","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAC3C,MAAM,MAAM,GAAG,SAAS,CACvB,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAChE,QAAQ,CACR,CAAC;AAEF,MAAM,UAAU,MAAM;IACrB,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC1B,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,aAAa,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,OAAO,CACtB,OAAgB,EAChB,QAAiB,EACjB,QAAiB,EACjB,OAAgB,EAChB,QAAQ,GAAG,KAAK;IAEhB,MAAM,OAAO,GAAG,UAAU,CACzB,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,GAAG,CAAC,EAC5B,QAAQ,EACR,QAAQ,EACR,OAAO,CACP,CAAC;IACF,MAAM,IAAI,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;IACzC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;QACnB,IAAI,EAAE,EAAE,OAAO,EAAE;QACjB,GAAG,EAAE,aAAa;KAClB,CAAC,CAAC,CAAC;IACJ,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACpB,OAAO,OAAO,CAAC;AAChB,CAAC;AAUD,MAAM,UAAU,UAAU,CACzB,OAAgB,EAChB,QAAQ,GAAG,MAAM,EACjB,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,EACxC,OAAgB;IAEhB,MAAM,GAAG,GAAG,OAAO,IAAI,MAAM,EAAE,CAAC;IAChC,MAAM,YAAY,GAAG,GAAG,QAAQ,IAAI,GAAG,EAAE,CAAC;IAE1C,IAAI,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,GAAG,CAAC,CAAC;IAE9C,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;QACnB,IAAI,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE;QACxD,GAAG,EAAE,WAAW;KAChB,CAAC,CAAC,CAAC;IAEJ,IAAI,UAAU,GAAG,CAAC,CAAC;IAEnB,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC;QAC5D,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC;YAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CACzB,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAC9D,CAAC;YACF,IAAI,OAAO,CAAC,IAAI,KAAK,0BAA0B,EAAE,CAAC;gBACjD,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;oBACnB,IAAI,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE;oBAChC,GAAG,EAAE,2DAA2D;iBAChE,CAAC,CAAC,CAAC;gBACJ,MAAM;YACP,CAAC;QACF,CAAC;QACD,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAC5C,UAAU,IAAI,CAAC,CAAC;QAChB,IAAI,UAAU,GAAG,EAAE,EAAE,CAAC;YACrB,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;gBACnB,IAAI,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE;gBAC5C,GAAG,EAAE,6CAA6C;aAClD,CAAC,CAAC,CAAC;YACJ,MAAM;QACP,CAAC;IACF,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IACtD,OAAO,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;QAC9B,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,QAAQ,EAAE,YAAY,CAAC,CAAC;AACjD,CAAC"}
1
+ {"version":3,"file":"env.js","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,6 +1,3 @@
1
+ import "./_virtual/_rolldown/runtime.js";
1
2
  import { getEnv, getEnvFile, loadEnv } from "./env.js";
2
- export {
3
- getEnv,
4
- getEnvFile,
5
- loadEnv
6
- };
3
+ export { getEnv, getEnvFile, loadEnv };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=env.test-d.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.test-d.d.ts","sourceRoot":"","sources":["../../src/tests/env.test-d.ts"],"names":[],"mappings":""}
@@ -0,0 +1,50 @@
1
+ import { describe, expectTypeOf, it } from "vitest";
2
+ import { getEnv, getEnvFile, loadEnv } from "../index.js";
3
+ describe("getEnv", () => {
4
+ it("always yields a string, since it falls back to development", () => {
5
+ expectTypeOf(getEnv).returns.toEqualTypeOf();
6
+ });
7
+ it("takes no arguments: it reads process.env directly", () => {
8
+ expectTypeOf(getEnv).parameters.toEqualTypeOf();
9
+ });
10
+ });
11
+ describe("loadEnv", () => {
12
+ it("returns the resolved env path rather than void", () => {
13
+ expectTypeOf(loadEnv).returns.toEqualTypeOf();
14
+ });
15
+ it("is callable with no arguments at all", () => {
16
+ expectTypeOf(loadEnv).toBeCallableWith();
17
+ });
18
+ it("takes every argument as optional, in order", () => {
19
+ expectTypeOf(loadEnv).parameters.toEqualTypeOf();
20
+ });
21
+ it("accepts a partially specified call", () => {
22
+ expectTypeOf(loadEnv).toBeCallableWith("/root");
23
+ expectTypeOf(loadEnv).toBeCallableWith("/root", ".env");
24
+ expectTypeOf(loadEnv).toBeCallableWith("/root", ".env", "/root/.env", "test", true);
25
+ });
26
+ it("keeps override a boolean, not a truthy anything", () => {
27
+ loadEnv("/root", ".env", "/root/.env", "test", "yes");
28
+ });
29
+ it("rejects a numeric root directory", () => {
30
+ loadEnv(1);
31
+ });
32
+ });
33
+ describe("getEnvFile", () => {
34
+ it("always resolves to a path string", () => {
35
+ expectTypeOf(getEnvFile).returns.toEqualTypeOf();
36
+ });
37
+ it("is callable with no arguments, defaulting filename and search root", () => {
38
+ expectTypeOf(getEnvFile).toBeCallableWith();
39
+ });
40
+ it("takes four optional positional arguments", () => {
41
+ expectTypeOf(getEnvFile).parameters.toEqualTypeOf();
42
+ });
43
+ it("accepts an explicit nodeEnv override in last position", () => {
44
+ expectTypeOf(getEnvFile).toBeCallableWith("/root", ".env", "/fallback", "production");
45
+ });
46
+ it("rejects an extra argument", () => {
47
+ getEnvFile("/root", ".env", "/fallback", "production", true);
48
+ });
49
+ });
50
+ //# sourceMappingURL=env.test-d.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.test-d.js","sourceRoot":"","sources":["../../src/tests/env.test-d.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAIpD,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE1D,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;IACvB,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QAGrE,YAAY,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,aAAa,EAAU,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC5D,YAAY,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,aAAa,EAAM,CAAC;IACrD,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;IACxB,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QAEzD,YAAY,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,aAAa,EAAU,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC/C,YAAY,CAAC,OAAO,CAAC,CAAC,gBAAgB,EAAE,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACrD,YAAY,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,aAAa,EAQ3C,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC7C,YAAY,CAAC,OAAO,CAAC,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAChD,YAAY,CAAC,OAAO,CAAC,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACxD,YAAY,CAAC,OAAO,CAAC,CAAC,gBAAgB,CACrC,OAAO,EACP,MAAM,EACN,YAAY,EACZ,MAAM,EACN,IAAI,CACJ,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QAE1D,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAE3C,OAAO,CAAC,CAAC,CAAC,CAAC;IACZ,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC3B,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAG3C,YAAY,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,aAAa,EAAU,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oEAAoE,EAAE,GAAG,EAAE;QAC7E,YAAY,CAAC,UAAU,CAAC,CAAC,gBAAgB,EAAE,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QACnD,YAAY,CAAC,UAAU,CAAC,CAAC,UAAU,CAAC,aAAa,EAO9C,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAChE,YAAY,CAAC,UAAU,CAAC,CAAC,gBAAgB,CACxC,OAAO,EACP,MAAM,EACN,WAAW,EACX,YAAY,CACZ,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QAEpC,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=env.unit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.unit.test.d.ts","sourceRoot":"","sources":["../../src/tests/env.unit.test.ts"],"names":[],"mappings":""}