@stryke/env 0.20.85 → 0.20.86

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/CHANGELOG.md CHANGED
@@ -2,6 +2,19 @@
2
2
 
3
3
  # Changelog for Stryke - Env
4
4
 
5
+ ## [0.20.86](https://github.com/storm-software/stryke/releases/tag/env%400.20.86) (04/26/2026)
6
+
7
+ ### Miscellaneous
8
+
9
+ - **monorepo:** Update Nx packages to v22.7.0 ([08918e3c](https://github.com/storm-software/stryke/commit/08918e3c))
10
+
11
+ ### Updated Dependencies
12
+
13
+ - Updated **string-format** to **v0.17.12**
14
+ - Updated **convert** to **v0.7.2**
15
+ - Updated **path** to **v0.28.1**
16
+ - Updated **fs** to **v0.33.69**
17
+
5
18
  ## [0.20.85](https://github.com/storm-software/stryke/releases/tag/env%400.20.85) (04/26/2026)
6
19
 
7
20
  ### Updated Dependencies
@@ -69,6 +69,18 @@ function isDevelopmentMode(mode$1) {
69
69
  }
70
70
  /** Detect if `NODE_ENV` environment variable is `dev` or `development` */
71
71
  const isDevelopment = isDevelopmentMode(mode) || isDebug;
72
+ /**
73
+ * Convert a mode string to a standardized mode value of "production", "development", or "test".
74
+ *
75
+ * @param mode - The mode string to convert.
76
+ * @returns The standardized mode value.
77
+ */
78
+ function toMode(mode$1) {
79
+ if (isProductionMode(mode$1)) return "production";
80
+ else if (isTestMode(mode$1)) return "test";
81
+ else if (isDevelopmentMode(mode$1)) return "development";
82
+ return "production";
83
+ }
72
84
  /** Detect if MINIMAL environment variable is set, running in CI or test or TTY is unavailable */
73
85
  const isMinimal = Boolean(process.env.MINIMAL) || require_ci_checks.isCI() || isTest || !hasTTY;
74
86
  /** Detect if process.platform is Windows */
@@ -153,4 +165,5 @@ exports.isTestMode = isTestMode;
153
165
  exports.isWindows = isWindows;
154
166
  exports.nodeMajorVersion = nodeMajorVersion;
155
167
  exports.nodeVersion = nodeVersion;
156
- exports.platform = platform;
168
+ exports.platform = platform;
169
+ exports.toMode = toMode;
@@ -34,6 +34,13 @@ declare const isTest: boolean;
34
34
  declare function isDevelopmentMode(mode: string): boolean;
35
35
  /** Detect if `NODE_ENV` environment variable is `dev` or `development` */
36
36
  declare const isDevelopment: boolean;
37
+ /**
38
+ * Convert a mode string to a standardized mode value of "production", "development", or "test".
39
+ *
40
+ * @param mode - The mode string to convert.
41
+ * @returns The standardized mode value.
42
+ */
43
+ declare function toMode(mode: string): "production" | "development" | "test";
37
44
  /** Detect if MINIMAL environment variable is set, running in CI or test or TTY is unavailable */
38
45
  declare const isMinimal: boolean;
39
46
  /** Detect if process.platform is Windows */
@@ -55,5 +62,5 @@ declare function isHyperlinkSupported(stream?: NodeJS.WriteStream): boolean;
55
62
  declare const nodeVersion: string | null;
56
63
  declare const nodeMajorVersion: number | null;
57
64
  //#endregion
58
- export { hasTTY, isColorSupported, isDebug, isDevelopment, isDevelopmentMode, isHyperlinkSupported, isLinux, isMacOS, isMinimal, isProduction, isProductionMode, isStaging, isTest, isTestMode, isWindows, nodeMajorVersion, nodeVersion, platform };
65
+ export { hasTTY, isColorSupported, isDebug, isDevelopment, isDevelopmentMode, isHyperlinkSupported, isLinux, isMacOS, isMinimal, isProduction, isProductionMode, isStaging, isTest, isTestMode, isWindows, nodeMajorVersion, nodeVersion, platform, toMode };
59
66
  //# sourceMappingURL=environment-checks.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"environment-checks.d.cts","names":[],"sources":["../src/environment-checks.ts"],"sourcesContent":[],"mappings":";;AAqBa,cAAA,QAAQ,EAAA,MAAA,CAAA,QAA0B;AAG/C;AAGa,cAHA,MAGoC,EAAA,OAAA;AAUjD;AAUgB,cApBH,OAoBmB,EAAA,OAAA;AAchC;AAQgB,cAhCH,SAgCa,EAAA,OAAA;AAe1B;AASA;AAOA;AAGA;AAIA;AAGA;AAGa,iBAlEG,gBAAA,CAkEgC,IAAA,EAAA,MAAA,CAAA,EAAA,OAAA;AAGhD;AAkCgB,cAzFH,YAyFuB,EAAA,OAC1B;AA8EV;AAGA;;;;;iBAnKgB,UAAA;;cAeH;;;;;;;iBASG,iBAAA;;cAOH;;cAGA;;cAIA;;cAGA;;cAGA;;cAGA;;;;;;;iBAkCG,oBAAA,UACN,MAAA,CAAO;;cA8EJ;cAGA"}
1
+ {"version":3,"file":"environment-checks.d.cts","names":[],"sources":["../src/environment-checks.ts"],"sourcesContent":[],"mappings":";;AAqBa,cAAA,QAAQ,EAAA,MAAA,CAAA,QAA0B;AAG/C;AAGa,cAHA,MAGoC,EAAA,OAAA;AAUjD;AAUgB,cApBH,OAoBmB,EAAA,OAAA;AAchC;AAQgB,cAhCH,SAgCa,EAAA,OAAA;AAe1B;AASA;AAOA;AAQA;AAaA;AAIA;AAGa,iBAjFG,gBAAA,CAiF+B,IAAA,EAAA,MAAA,CAAA,EAAA,OAAA;AAG/C;AAGa,cAzEA,YA6EF,EAAA,OAAA;AA8BX;AA+EA;AAGA;;;;iBArLgB,UAAA;;cAeH;;;;;;;iBASG,iBAAA;;cAOH;;;;;;;iBAQG,MAAA;;cAaH;;cAIA;;cAGA;;cAGA;;cAGA;;;;;;;iBAkCG,oBAAA,UACN,MAAA,CAAO;;cA8EJ;cAGA"}
@@ -34,6 +34,13 @@ declare const isTest: boolean;
34
34
  declare function isDevelopmentMode(mode: string): boolean;
35
35
  /** Detect if `NODE_ENV` environment variable is `dev` or `development` */
36
36
  declare const isDevelopment: boolean;
37
+ /**
38
+ * Convert a mode string to a standardized mode value of "production", "development", or "test".
39
+ *
40
+ * @param mode - The mode string to convert.
41
+ * @returns The standardized mode value.
42
+ */
43
+ declare function toMode(mode: string): "production" | "development" | "test";
37
44
  /** Detect if MINIMAL environment variable is set, running in CI or test or TTY is unavailable */
38
45
  declare const isMinimal: boolean;
39
46
  /** Detect if process.platform is Windows */
@@ -55,5 +62,5 @@ declare function isHyperlinkSupported(stream?: NodeJS.WriteStream): boolean;
55
62
  declare const nodeVersion: string | null;
56
63
  declare const nodeMajorVersion: number | null;
57
64
  //#endregion
58
- export { hasTTY, isColorSupported, isDebug, isDevelopment, isDevelopmentMode, isHyperlinkSupported, isLinux, isMacOS, isMinimal, isProduction, isProductionMode, isStaging, isTest, isTestMode, isWindows, nodeMajorVersion, nodeVersion, platform };
65
+ export { hasTTY, isColorSupported, isDebug, isDevelopment, isDevelopmentMode, isHyperlinkSupported, isLinux, isMacOS, isMinimal, isProduction, isProductionMode, isStaging, isTest, isTestMode, isWindows, nodeMajorVersion, nodeVersion, platform, toMode };
59
66
  //# sourceMappingURL=environment-checks.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"environment-checks.d.mts","names":[],"sources":["../src/environment-checks.ts"],"sourcesContent":[],"mappings":";;AAqBa,cAAA,QAAQ,EAAA,MAAA,CAAA,QAA0B;AAG/C;AAGa,cAHA,MAGoC,EAAA,OAAA;AAUjD;AAUgB,cApBH,OAoBmB,EAAA,OAAA;AAchC;AAQgB,cAhCH,SAgCa,EAAA,OAAA;AAe1B;AASA;AAOA;AAGA;AAIA;AAGA;AAGa,iBAlEG,gBAAA,CAkEgC,IAAA,EAAA,MAAA,CAAA,EAAA,OAAA;AAGhD;AAkCgB,cAzFH,YAyFuB,EAAA,OAC1B;AA8EV;AAGA;;;;;iBAnKgB,UAAA;;cAeH;;;;;;;iBASG,iBAAA;;cAOH;;cAGA;;cAIA;;cAGA;;cAGA;;cAGA;;;;;;;iBAkCG,oBAAA,UACN,MAAA,CAAO;;cA8EJ;cAGA"}
1
+ {"version":3,"file":"environment-checks.d.mts","names":[],"sources":["../src/environment-checks.ts"],"sourcesContent":[],"mappings":";;AAqBa,cAAA,QAAQ,EAAA,MAAA,CAAA,QAA0B;AAG/C;AAGa,cAHA,MAGoC,EAAA,OAAA;AAUjD;AAUgB,cApBH,OAoBmB,EAAA,OAAA;AAchC;AAQgB,cAhCH,SAgCa,EAAA,OAAA;AAe1B;AASA;AAOA;AAQA;AAaA;AAIA;AAGa,iBAjFG,gBAAA,CAiF+B,IAAA,EAAA,MAAA,CAAA,EAAA,OAAA;AAG/C;AAGa,cAzEA,YA6EF,EAAA,OAAA;AA8BX;AA+EA;AAGA;;;;iBArLgB,UAAA;;cAeH;;;;;;;iBASG,iBAAA;;cAOH;;;;;;;iBAQG,MAAA;;cAaH;;cAIA;;cAGA;;cAGA;;cAGA;;;;;;;iBAkCG,oBAAA,UACN,MAAA,CAAO;;cA8EJ;cAGA"}
@@ -69,6 +69,18 @@ function isDevelopmentMode(mode$1) {
69
69
  }
70
70
  /** Detect if `NODE_ENV` environment variable is `dev` or `development` */
71
71
  const isDevelopment = isDevelopmentMode(mode) || isDebug;
72
+ /**
73
+ * Convert a mode string to a standardized mode value of "production", "development", or "test".
74
+ *
75
+ * @param mode - The mode string to convert.
76
+ * @returns The standardized mode value.
77
+ */
78
+ function toMode(mode$1) {
79
+ if (isProductionMode(mode$1)) return "production";
80
+ else if (isTestMode(mode$1)) return "test";
81
+ else if (isDevelopmentMode(mode$1)) return "development";
82
+ return "production";
83
+ }
72
84
  /** Detect if MINIMAL environment variable is set, running in CI or test or TTY is unavailable */
73
85
  const isMinimal = Boolean(process.env.MINIMAL) || isCI() || isTest || !hasTTY;
74
86
  /** Detect if process.platform is Windows */
@@ -136,5 +148,5 @@ const nodeVersion = (process?.versions?.node || "").replace(/^v/, "") || null;
136
148
  const nodeMajorVersion = Number(nodeVersion?.split(".")[0]) || null;
137
149
 
138
150
  //#endregion
139
- export { hasTTY, isColorSupported, isDebug, isDevelopment, isDevelopmentMode, isHyperlinkSupported, isLinux, isMacOS, isMinimal, isProduction, isProductionMode, isStaging, isTest, isTestMode, isWindows, nodeMajorVersion, nodeVersion, platform };
151
+ export { hasTTY, isColorSupported, isDebug, isDevelopment, isDevelopmentMode, isHyperlinkSupported, isLinux, isMacOS, isMinimal, isProduction, isProductionMode, isStaging, isTest, isTestMode, isWindows, nodeMajorVersion, nodeVersion, platform, toMode };
140
152
  //# sourceMappingURL=environment-checks.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"environment-checks.mjs","names":["mode"],"sources":["../src/environment-checks.ts"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Stryke\n\n This code was released as part of the Stryke project. Stryke\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/stryke.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/stryke\n Documentation: https://docs.stormsoftware.com/projects/stryke\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport { isCI } from \"./ci-checks\";\n\n/** Value of process.platform */\nexport const platform = process?.platform || \"\";\n\n/** Detect if stdout.TTY is available */\nexport const hasTTY = Boolean(process?.stdout && process?.stdout.isTTY);\n\n/** Detect if `DEBUG` environment variable is set */\nexport const isDebug = Boolean(process.env.DEBUG);\n\n/** Detect the `NODE_ENV` environment variable */\nconst mode =\n process.env.STORM_MODE ||\n process.env.NEXT_PUBLIC_VERCEL_ENV ||\n process.env.NODE_ENV ||\n \"production\";\n\n/** Detect if the application is running in a staging environment */\nexport const isStaging = [\"stg\", \"stage\", \"staging\"].includes(\n mode?.toLowerCase()\n);\n\n/**\n * Check if the current environment is production.\n *\n * @param mode - The mode string to check.\n * @returns Whether the environment is production\n */\nexport function isProductionMode(mode: string) {\n return [\n \"prd\",\n \"prod\",\n \"production\",\n\n \"preprod\",\n\n \"preproduction\",\n \"uat\"\n ].includes(mode?.toLowerCase()?.replace(/[\\s\\-_]/g, \"\"));\n}\n\n/** Detect if `NODE_ENV` environment variable is `production` */\nexport const isProduction = isProductionMode(mode);\n\n/**\n * Check if the current environment is test.\n *\n * @param mode - The mode string to check.\n * @returns Whether the environment is test\n */\nexport function isTestMode(mode: string) {\n return [\n \"tst\",\n \"test\",\n \"testing\",\n \"stg\",\n \"stage\",\n \"staging\",\n \"qa\",\n\n \"qualityassurance\"\n ].includes(mode?.toLowerCase()?.replace(/[\\s\\-_]/g, \"\"));\n}\n\n/** Detect if `NODE_ENV` environment variable is `test` */\nexport const isTest =\n isTestMode(mode) || isStaging || Boolean(process.env.TEST);\n\n/**\n * Check if the current environment is development.\n *\n * @param mode - The mode string to check.\n * @returns Whether the environment is development\n */\nexport function isDevelopmentMode(mode: string) {\n return [\"dev\", \"development\", \"int\", \"integration\"].includes(\n mode?.toLowerCase()?.replace(/[\\s\\-_]/g, \"\")\n );\n}\n\n/** Detect if `NODE_ENV` environment variable is `dev` or `development` */\nexport const isDevelopment = isDevelopmentMode(mode) || isDebug;\n\n/** Detect if MINIMAL environment variable is set, running in CI or test or TTY is unavailable */\nexport const isMinimal =\n Boolean(process.env.MINIMAL) || isCI() || isTest || !hasTTY;\n\n/** Detect if process.platform is Windows */\nexport const isWindows = /^win/i.test(platform);\n\n/** Detect if process.platform is Linux */\nexport const isLinux = /^linux/i.test(platform);\n\n/** Detect if process.platform is macOS (darwin kernel) */\nexport const isMacOS = /^darwin/i.test(platform);\n\n/** Color Support */\nexport const isColorSupported =\n !process.env.NO_COLOR &&\n (Boolean(process.env.FORCE_COLOR) ||\n ((hasTTY || isWindows) && process.env.TERM !== \"dumb\") ||\n isCI());\n\nfunction parseVersion(versionString = \"\") {\n if (/^\\d{3,4}$/.test(versionString)) {\n const match = /(\\d{1,2})(\\d{2})/.exec(versionString) ?? [];\n\n return {\n major: 0,\n minor: Number.parseInt(match[1]!, 10),\n patch: Number.parseInt(match[2]!, 10)\n };\n }\n\n const versions = (versionString ?? \"\")\n .split(\".\")\n .map(n => Number.parseInt(n, 10));\n\n return {\n major: versions[0],\n minor: versions[1],\n patch: versions[2]\n };\n}\n\n/**\n * Check if the current environment supports hyperlinks in the terminal.\n *\n * @param stream - The stream to check for TTY support (default: process.stdout)\n * @returns Whether hyperlinks are supported\n */\nexport function isHyperlinkSupported(\n stream: NodeJS.WriteStream = process.stdout\n): boolean {\n if (process.env.FORCE_HYPERLINK) {\n return !(\n process.env.FORCE_HYPERLINK.length > 0 &&\n Number.parseInt(process.env.FORCE_HYPERLINK, 10) === 0\n );\n }\n\n // Netlify does not run a TTY, it does not need `supportsColor` check\n if (process.env.NETLIFY) {\n return true;\n } else if (!isColorSupported) {\n return false;\n } else if (stream && !stream.isTTY) {\n return false;\n } else if (\"WT_SESSION\" in process.env) {\n return true;\n } else if (process.platform === \"win32\") {\n return false;\n } else if (isCI()) {\n return false;\n } else if (process.env.TEAMCITY_VERSION) {\n return false;\n } else if (process.env.TERM_PROGRAM) {\n const version = parseVersion(process.env.TERM_PROGRAM_VERSION);\n\n switch (process.env.TERM_PROGRAM) {\n case \"iTerm.app\": {\n if (version.major === 3) {\n return version.minor !== undefined && version.minor >= 1;\n }\n\n return version.major !== undefined && version.major > 3;\n }\n case \"WezTerm\": {\n return version.major !== undefined && version.major >= 20_200_620;\n }\n case \"vscode\": {\n // Cursor forked VS Code and supports hyperlinks in 0.x.x\n if (process.env.CURSOR_TRACE_ID) {\n return true;\n }\n\n return (\n version.minor !== undefined &&\n version.major !== undefined &&\n (version.major > 1 || (version.major === 1 && version.minor >= 72))\n );\n }\n case \"ghostty\": {\n return true;\n }\n }\n }\n\n if (process.env.VTE_VERSION) {\n // 0.50.0 was supposed to support hyperlinks, but throws a segfault\n if (process.env.VTE_VERSION === \"0.50.0\") {\n return false;\n }\n\n const version = parseVersion(process.env.VTE_VERSION);\n\n return (\n (version.major !== undefined && version.major > 0) ||\n (version.minor !== undefined && version.minor >= 50)\n );\n }\n\n if (process.env.TERM === \"alacritty\") {\n return true;\n }\n\n return false;\n}\n\n/** Node.js versions */\nexport const nodeVersion =\n (process?.versions?.node || \"\").replace(/^v/, \"\") || null;\n\nexport const nodeMajorVersion = Number(nodeVersion?.split(\".\")[0]) || null;\n"],"mappings":"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"}
1
+ {"version":3,"file":"environment-checks.mjs","names":["mode"],"sources":["../src/environment-checks.ts"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Stryke\n\n This code was released as part of the Stryke project. Stryke\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/stryke.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/stryke\n Documentation: https://docs.stormsoftware.com/projects/stryke\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport { isCI } from \"./ci-checks\";\n\n/** Value of process.platform */\nexport const platform = process?.platform || \"\";\n\n/** Detect if stdout.TTY is available */\nexport const hasTTY = Boolean(process?.stdout && process?.stdout.isTTY);\n\n/** Detect if `DEBUG` environment variable is set */\nexport const isDebug = Boolean(process.env.DEBUG);\n\n/** Detect the `NODE_ENV` environment variable */\nconst mode =\n process.env.STORM_MODE ||\n process.env.NEXT_PUBLIC_VERCEL_ENV ||\n process.env.NODE_ENV ||\n \"production\";\n\n/** Detect if the application is running in a staging environment */\nexport const isStaging = [\"stg\", \"stage\", \"staging\"].includes(\n mode?.toLowerCase()\n);\n\n/**\n * Check if the current environment is production.\n *\n * @param mode - The mode string to check.\n * @returns Whether the environment is production\n */\nexport function isProductionMode(mode: string) {\n return [\n \"prd\",\n \"prod\",\n \"production\",\n\n \"preprod\",\n\n \"preproduction\",\n \"uat\"\n ].includes(mode?.toLowerCase()?.replace(/[\\s\\-_]/g, \"\"));\n}\n\n/** Detect if `NODE_ENV` environment variable is `production` */\nexport const isProduction = isProductionMode(mode);\n\n/**\n * Check if the current environment is test.\n *\n * @param mode - The mode string to check.\n * @returns Whether the environment is test\n */\nexport function isTestMode(mode: string) {\n return [\n \"tst\",\n \"test\",\n \"testing\",\n \"stg\",\n \"stage\",\n \"staging\",\n \"qa\",\n\n \"qualityassurance\"\n ].includes(mode?.toLowerCase()?.replace(/[\\s\\-_]/g, \"\"));\n}\n\n/** Detect if `NODE_ENV` environment variable is `test` */\nexport const isTest =\n isTestMode(mode) || isStaging || Boolean(process.env.TEST);\n\n/**\n * Check if the current environment is development.\n *\n * @param mode - The mode string to check.\n * @returns Whether the environment is development\n */\nexport function isDevelopmentMode(mode: string) {\n return [\"dev\", \"development\", \"int\", \"integration\"].includes(\n mode?.toLowerCase()?.replace(/[\\s\\-_]/g, \"\")\n );\n}\n\n/** Detect if `NODE_ENV` environment variable is `dev` or `development` */\nexport const isDevelopment = isDevelopmentMode(mode) || isDebug;\n\n/**\n * Convert a mode string to a standardized mode value of \"production\", \"development\", or \"test\".\n *\n * @param mode - The mode string to convert.\n * @returns The standardized mode value.\n */\nexport function toMode(mode: string): \"production\" | \"development\" | \"test\" {\n if (isProductionMode(mode)) {\n return \"production\";\n } else if (isTestMode(mode)) {\n return \"test\";\n } else if (isDevelopmentMode(mode)) {\n return \"development\";\n }\n\n return \"production\";\n}\n\n/** Detect if MINIMAL environment variable is set, running in CI or test or TTY is unavailable */\nexport const isMinimal =\n Boolean(process.env.MINIMAL) || isCI() || isTest || !hasTTY;\n\n/** Detect if process.platform is Windows */\nexport const isWindows = /^win/i.test(platform);\n\n/** Detect if process.platform is Linux */\nexport const isLinux = /^linux/i.test(platform);\n\n/** Detect if process.platform is macOS (darwin kernel) */\nexport const isMacOS = /^darwin/i.test(platform);\n\n/** Color Support */\nexport const isColorSupported =\n !process.env.NO_COLOR &&\n (Boolean(process.env.FORCE_COLOR) ||\n ((hasTTY || isWindows) && process.env.TERM !== \"dumb\") ||\n isCI());\n\nfunction parseVersion(versionString = \"\") {\n if (/^\\d{3,4}$/.test(versionString)) {\n const match = /(\\d{1,2})(\\d{2})/.exec(versionString) ?? [];\n\n return {\n major: 0,\n minor: Number.parseInt(match[1]!, 10),\n patch: Number.parseInt(match[2]!, 10)\n };\n }\n\n const versions = (versionString ?? \"\")\n .split(\".\")\n .map(n => Number.parseInt(n, 10));\n\n return {\n major: versions[0],\n minor: versions[1],\n patch: versions[2]\n };\n}\n\n/**\n * Check if the current environment supports hyperlinks in the terminal.\n *\n * @param stream - The stream to check for TTY support (default: process.stdout)\n * @returns Whether hyperlinks are supported\n */\nexport function isHyperlinkSupported(\n stream: NodeJS.WriteStream = process.stdout\n): boolean {\n if (process.env.FORCE_HYPERLINK) {\n return !(\n process.env.FORCE_HYPERLINK.length > 0 &&\n Number.parseInt(process.env.FORCE_HYPERLINK, 10) === 0\n );\n }\n\n // Netlify does not run a TTY, it does not need `supportsColor` check\n if (process.env.NETLIFY) {\n return true;\n } else if (!isColorSupported) {\n return false;\n } else if (stream && !stream.isTTY) {\n return false;\n } else if (\"WT_SESSION\" in process.env) {\n return true;\n } else if (process.platform === \"win32\") {\n return false;\n } else if (isCI()) {\n return false;\n } else if (process.env.TEAMCITY_VERSION) {\n return false;\n } else if (process.env.TERM_PROGRAM) {\n const version = parseVersion(process.env.TERM_PROGRAM_VERSION);\n\n switch (process.env.TERM_PROGRAM) {\n case \"iTerm.app\": {\n if (version.major === 3) {\n return version.minor !== undefined && version.minor >= 1;\n }\n\n return version.major !== undefined && version.major > 3;\n }\n case \"WezTerm\": {\n return version.major !== undefined && version.major >= 20_200_620;\n }\n case \"vscode\": {\n // Cursor forked VS Code and supports hyperlinks in 0.x.x\n if (process.env.CURSOR_TRACE_ID) {\n return true;\n }\n\n return (\n version.minor !== undefined &&\n version.major !== undefined &&\n (version.major > 1 || (version.major === 1 && version.minor >= 72))\n );\n }\n case \"ghostty\": {\n return true;\n }\n }\n }\n\n if (process.env.VTE_VERSION) {\n // 0.50.0 was supposed to support hyperlinks, but throws a segfault\n if (process.env.VTE_VERSION === \"0.50.0\") {\n return false;\n }\n\n const version = parseVersion(process.env.VTE_VERSION);\n\n return (\n (version.major !== undefined && version.major > 0) ||\n (version.minor !== undefined && version.minor >= 50)\n );\n }\n\n if (process.env.TERM === \"alacritty\") {\n return true;\n }\n\n return false;\n}\n\n/** Node.js versions */\nexport const nodeVersion =\n (process?.versions?.node || \"\").replace(/^v/, \"\") || null;\n\nexport const nodeMajorVersion = Number(nodeVersion?.split(\".\")[0]) || null;\n"],"mappings":";;;;AAqBA,MAAa,WAAW,SAAS,YAAY;;AAG7C,MAAa,SAAS,QAAQ,SAAS,UAAU,SAAS,OAAO,MAAM;;AAGvE,MAAa,UAAU,QAAQ,QAAQ,IAAI,MAAM;;AAGjD,MAAM,OACJ,QAAQ,IAAI,cACZ,QAAQ,IAAI,0BACZ,QAAQ,IAAI,YACZ;;AAGF,MAAa,YAAY;CAAC;CAAO;CAAS;CAAU,CAAC,SACnD,MAAM,aAAa,CACpB;;;;;;;AAQD,SAAgB,iBAAiB,QAAc;AAC7C,QAAO;EACL;EACA;EACA;EAEA;EAEA;EACA;EACD,CAAC,SAASA,QAAM,aAAa,EAAE,QAAQ,YAAY,GAAG,CAAC;;;AAI1D,MAAa,eAAe,iBAAiB,KAAK;;;;;;;AAQlD,SAAgB,WAAW,QAAc;AACvC,QAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACD,CAAC,SAASA,QAAM,aAAa,EAAE,QAAQ,YAAY,GAAG,CAAC;;;AAI1D,MAAa,SACX,WAAW,KAAK,IAAI,aAAa,QAAQ,QAAQ,IAAI,KAAK;;;;;;;AAQ5D,SAAgB,kBAAkB,QAAc;AAC9C,QAAO;EAAC;EAAO;EAAe;EAAO;EAAc,CAAC,SAClDA,QAAM,aAAa,EAAE,QAAQ,YAAY,GAAG,CAC7C;;;AAIH,MAAa,gBAAgB,kBAAkB,KAAK,IAAI;;;;;;;AAQxD,SAAgB,OAAO,QAAqD;AAC1E,KAAI,iBAAiBA,OAAK,CACxB,QAAO;UACE,WAAWA,OAAK,CACzB,QAAO;UACE,kBAAkBA,OAAK,CAChC,QAAO;AAGT,QAAO;;;AAIT,MAAa,YACX,QAAQ,QAAQ,IAAI,QAAQ,IAAI,MAAM,IAAI,UAAU,CAAC;;AAGvD,MAAa,YAAY,QAAQ,KAAK,SAAS;;AAG/C,MAAa,UAAU,UAAU,KAAK,SAAS;;AAG/C,MAAa,UAAU,WAAW,KAAK,SAAS;;AAGhD,MAAa,mBACX,CAAC,QAAQ,IAAI,aACZ,QAAQ,QAAQ,IAAI,YAAY,KAC7B,UAAU,cAAc,QAAQ,IAAI,SAAS,UAC/C,MAAM;AAEV,SAAS,aAAa,gBAAgB,IAAI;AACxC,KAAI,YAAY,KAAK,cAAc,EAAE;EACnC,MAAM,QAAQ,mBAAmB,KAAK,cAAc,IAAI,EAAE;AAE1D,SAAO;GACL,OAAO;GACP,OAAO,OAAO,SAAS,MAAM,IAAK,GAAG;GACrC,OAAO,OAAO,SAAS,MAAM,IAAK,GAAG;GACtC;;CAGH,MAAM,YAAY,iBAAiB,IAChC,MAAM,IAAI,CACV,KAAI,MAAK,OAAO,SAAS,GAAG,GAAG,CAAC;AAEnC,QAAO;EACL,OAAO,SAAS;EAChB,OAAO,SAAS;EAChB,OAAO,SAAS;EACjB;;;;;;;;AASH,SAAgB,qBACd,SAA6B,QAAQ,QAC5B;AACT,KAAI,QAAQ,IAAI,gBACd,QAAO,EACL,QAAQ,IAAI,gBAAgB,SAAS,KACrC,OAAO,SAAS,QAAQ,IAAI,iBAAiB,GAAG,KAAK;AAKzD,KAAI,QAAQ,IAAI,QACd,QAAO;UACE,CAAC,iBACV,QAAO;UACE,UAAU,CAAC,OAAO,MAC3B,QAAO;UACE,gBAAgB,QAAQ,IACjC,QAAO;UACE,QAAQ,aAAa,QAC9B,QAAO;UACE,MAAM,CACf,QAAO;UACE,QAAQ,IAAI,iBACrB,QAAO;UACE,QAAQ,IAAI,cAAc;EACnC,MAAM,UAAU,aAAa,QAAQ,IAAI,qBAAqB;AAE9D,UAAQ,QAAQ,IAAI,cAApB;GACE,KAAK;AACH,QAAI,QAAQ,UAAU,EACpB,QAAO,QAAQ,UAAU,UAAa,QAAQ,SAAS;AAGzD,WAAO,QAAQ,UAAU,UAAa,QAAQ,QAAQ;GAExD,KAAK,UACH,QAAO,QAAQ,UAAU,UAAa,QAAQ,SAAS;GAEzD,KAAK;AAEH,QAAI,QAAQ,IAAI,gBACd,QAAO;AAGT,WACE,QAAQ,UAAU,UAClB,QAAQ,UAAU,WACjB,QAAQ,QAAQ,KAAM,QAAQ,UAAU,KAAK,QAAQ,SAAS;GAGnE,KAAK,UACH,QAAO;;;AAKb,KAAI,QAAQ,IAAI,aAAa;AAE3B,MAAI,QAAQ,IAAI,gBAAgB,SAC9B,QAAO;EAGT,MAAM,UAAU,aAAa,QAAQ,IAAI,YAAY;AAErD,SACG,QAAQ,UAAU,UAAa,QAAQ,QAAQ,KAC/C,QAAQ,UAAU,UAAa,QAAQ,SAAS;;AAIrD,KAAI,QAAQ,IAAI,SAAS,YACvB,QAAO;AAGT,QAAO;;;AAIT,MAAa,eACV,SAAS,UAAU,QAAQ,IAAI,QAAQ,MAAM,GAAG,IAAI;AAEvD,MAAa,mBAAmB,OAAO,aAAa,MAAM,IAAI,CAAC,GAAG,IAAI"}
package/dist/index.cjs CHANGED
@@ -45,4 +45,5 @@ exports.platform = require_environment_checks.platform;
45
45
  exports.provider = require_providers.provider;
46
46
  exports.providerInfo = require_providers.providerInfo;
47
47
  exports.runtime = require_runtime_checks.runtime;
48
- exports.runtimeInfo = require_runtime_checks.runtimeInfo;
48
+ exports.runtimeInfo = require_runtime_checks.runtimeInfo;
49
+ exports.toMode = require_environment_checks.toMode;
package/dist/index.d.cts CHANGED
@@ -1,8 +1,8 @@
1
1
  import { isCI, isInteractive } from "./ci-checks.cjs";
2
- import { hasTTY, isColorSupported, isDebug, isDevelopment, isDevelopmentMode, isHyperlinkSupported, isLinux, isMacOS, isMinimal, isProduction, isProductionMode, isStaging, isTest, isTestMode, isWindows, nodeMajorVersion, nodeVersion, platform } from "./environment-checks.cjs";
2
+ import { hasTTY, isColorSupported, isDebug, isDevelopment, isDevelopmentMode, isHyperlinkSupported, isLinux, isMacOS, isMinimal, isProduction, isProductionMode, isStaging, isTest, isTestMode, isWindows, nodeMajorVersion, nodeVersion, platform, toMode } from "./environment-checks.cjs";
3
3
  import { EnvPaths, GetEnvPathsOptions, getEnvPaths } from "./get-env-paths.cjs";
4
4
  import { DotenvParseOutput, ENV_PREFIXES } from "./types.cjs";
5
5
  import { getEnvFilesForMode, loadClientEnv, loadEnv, loadEnvFile, loadServerEnv } from "./load-env.cjs";
6
6
  import { ProviderInfo, ProviderName, provider, providerInfo } from "./providers.cjs";
7
7
  import { RuntimeInfo, RuntimeName, isBun, isDeno, isEdgeLight, isFastly, isNetlify, isNode, isRuntimeClient, isRuntimeServer, isWorkerd, runtime, runtimeInfo } from "./runtime-checks.cjs";
8
- export { DotenvParseOutput, ENV_PREFIXES, EnvPaths, GetEnvPathsOptions, ProviderInfo, ProviderName, RuntimeInfo, RuntimeName, getEnvFilesForMode, getEnvPaths, hasTTY, isBun, isCI, isColorSupported, isDebug, isDeno, isDevelopment, isDevelopmentMode, isEdgeLight, isFastly, isHyperlinkSupported, isInteractive, isLinux, isMacOS, isMinimal, isNetlify, isNode, isProduction, isProductionMode, isRuntimeClient, isRuntimeServer, isStaging, isTest, isTestMode, isWindows, isWorkerd, loadClientEnv, loadEnv, loadEnvFile, loadServerEnv, nodeMajorVersion, nodeVersion, platform, provider, providerInfo, runtime, runtimeInfo };
8
+ export { DotenvParseOutput, ENV_PREFIXES, EnvPaths, GetEnvPathsOptions, ProviderInfo, ProviderName, RuntimeInfo, RuntimeName, getEnvFilesForMode, getEnvPaths, hasTTY, isBun, isCI, isColorSupported, isDebug, isDeno, isDevelopment, isDevelopmentMode, isEdgeLight, isFastly, isHyperlinkSupported, isInteractive, isLinux, isMacOS, isMinimal, isNetlify, isNode, isProduction, isProductionMode, isRuntimeClient, isRuntimeServer, isStaging, isTest, isTestMode, isWindows, isWorkerd, loadClientEnv, loadEnv, loadEnvFile, loadServerEnv, nodeMajorVersion, nodeVersion, platform, provider, providerInfo, runtime, runtimeInfo, toMode };
package/dist/index.d.mts CHANGED
@@ -1,8 +1,8 @@
1
1
  import { isCI, isInteractive } from "./ci-checks.mjs";
2
- import { hasTTY, isColorSupported, isDebug, isDevelopment, isDevelopmentMode, isHyperlinkSupported, isLinux, isMacOS, isMinimal, isProduction, isProductionMode, isStaging, isTest, isTestMode, isWindows, nodeMajorVersion, nodeVersion, platform } from "./environment-checks.mjs";
2
+ import { hasTTY, isColorSupported, isDebug, isDevelopment, isDevelopmentMode, isHyperlinkSupported, isLinux, isMacOS, isMinimal, isProduction, isProductionMode, isStaging, isTest, isTestMode, isWindows, nodeMajorVersion, nodeVersion, platform, toMode } from "./environment-checks.mjs";
3
3
  import { EnvPaths, GetEnvPathsOptions, getEnvPaths } from "./get-env-paths.mjs";
4
4
  import { DotenvParseOutput, ENV_PREFIXES } from "./types.mjs";
5
5
  import { getEnvFilesForMode, loadClientEnv, loadEnv, loadEnvFile, loadServerEnv } from "./load-env.mjs";
6
6
  import { ProviderInfo, ProviderName, provider, providerInfo } from "./providers.mjs";
7
7
  import { RuntimeInfo, RuntimeName, isBun, isDeno, isEdgeLight, isFastly, isNetlify, isNode, isRuntimeClient, isRuntimeServer, isWorkerd, runtime, runtimeInfo } from "./runtime-checks.mjs";
8
- export { DotenvParseOutput, ENV_PREFIXES, EnvPaths, GetEnvPathsOptions, ProviderInfo, ProviderName, RuntimeInfo, RuntimeName, getEnvFilesForMode, getEnvPaths, hasTTY, isBun, isCI, isColorSupported, isDebug, isDeno, isDevelopment, isDevelopmentMode, isEdgeLight, isFastly, isHyperlinkSupported, isInteractive, isLinux, isMacOS, isMinimal, isNetlify, isNode, isProduction, isProductionMode, isRuntimeClient, isRuntimeServer, isStaging, isTest, isTestMode, isWindows, isWorkerd, loadClientEnv, loadEnv, loadEnvFile, loadServerEnv, nodeMajorVersion, nodeVersion, platform, provider, providerInfo, runtime, runtimeInfo };
8
+ export { DotenvParseOutput, ENV_PREFIXES, EnvPaths, GetEnvPathsOptions, ProviderInfo, ProviderName, RuntimeInfo, RuntimeName, getEnvFilesForMode, getEnvPaths, hasTTY, isBun, isCI, isColorSupported, isDebug, isDeno, isDevelopment, isDevelopmentMode, isEdgeLight, isFastly, isHyperlinkSupported, isInteractive, isLinux, isMacOS, isMinimal, isNetlify, isNode, isProduction, isProductionMode, isRuntimeClient, isRuntimeServer, isStaging, isTest, isTestMode, isWindows, isWorkerd, loadClientEnv, loadEnv, loadEnvFile, loadServerEnv, nodeMajorVersion, nodeVersion, platform, provider, providerInfo, runtime, runtimeInfo, toMode };
package/dist/index.mjs CHANGED
@@ -1,9 +1,9 @@
1
1
  import { isCI, isInteractive } from "./ci-checks.mjs";
2
- import { hasTTY, isColorSupported, isDebug, isDevelopment, isDevelopmentMode, isHyperlinkSupported, isLinux, isMacOS, isMinimal, isProduction, isProductionMode, isStaging, isTest, isTestMode, isWindows, nodeMajorVersion, nodeVersion, platform } from "./environment-checks.mjs";
2
+ import { hasTTY, isColorSupported, isDebug, isDevelopment, isDevelopmentMode, isHyperlinkSupported, isLinux, isMacOS, isMinimal, isProduction, isProductionMode, isStaging, isTest, isTestMode, isWindows, nodeMajorVersion, nodeVersion, platform, toMode } from "./environment-checks.mjs";
3
3
  import { getEnvPaths } from "./get-env-paths.mjs";
4
4
  import { ENV_PREFIXES } from "./types.mjs";
5
5
  import { getEnvFilesForMode, loadClientEnv, loadEnv, loadEnvFile, loadServerEnv } from "./load-env.mjs";
6
6
  import { provider, providerInfo } from "./providers.mjs";
7
7
  import { isBun, isDeno, isEdgeLight, isFastly, isNetlify, isNode, isRuntimeClient, isRuntimeServer, isWorkerd, runtime, runtimeInfo } from "./runtime-checks.mjs";
8
8
 
9
- export { ENV_PREFIXES, getEnvFilesForMode, getEnvPaths, hasTTY, isBun, isCI, isColorSupported, isDebug, isDeno, isDevelopment, isDevelopmentMode, isEdgeLight, isFastly, isHyperlinkSupported, isInteractive, isLinux, isMacOS, isMinimal, isNetlify, isNode, isProduction, isProductionMode, isRuntimeClient, isRuntimeServer, isStaging, isTest, isTestMode, isWindows, isWorkerd, loadClientEnv, loadEnv, loadEnvFile, loadServerEnv, nodeMajorVersion, nodeVersion, platform, provider, providerInfo, runtime, runtimeInfo };
9
+ export { ENV_PREFIXES, getEnvFilesForMode, getEnvPaths, hasTTY, isBun, isCI, isColorSupported, isDebug, isDeno, isDevelopment, isDevelopmentMode, isEdgeLight, isFastly, isHyperlinkSupported, isInteractive, isLinux, isMacOS, isMinimal, isNetlify, isNode, isProduction, isProductionMode, isRuntimeClient, isRuntimeServer, isStaging, isTest, isTestMode, isWindows, isWorkerd, loadClientEnv, loadEnv, loadEnvFile, loadServerEnv, nodeMajorVersion, nodeVersion, platform, provider, providerInfo, runtime, runtimeInfo, toMode };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stryke/env",
3
- "version": "0.20.85",
3
+ "version": "0.20.86",
4
4
  "private": false,
5
5
  "description": "A package containing utility functions to handle environment specific processes",
6
6
  "repository": {
@@ -43,13 +43,13 @@
43
43
  "types": "./dist/index.d.cts",
44
44
  "dependencies": {
45
45
  "@dotenvx/dotenvx": "1.35.0",
46
- "@stryke/convert": "^0.7.1",
47
- "@stryke/fs": "^0.33.68",
48
- "@stryke/path": "^0.28.0",
49
- "@stryke/string-format": "^0.17.11",
46
+ "@stryke/convert": "^0.7.2",
47
+ "@stryke/fs": "^0.33.69",
48
+ "@stryke/path": "^0.28.1",
49
+ "@stryke/string-format": "^0.17.12",
50
50
  "defu": "^6.1.7"
51
51
  },
52
52
  "devDependencies": { "@types/node": "^24.12.2", "tsdown": "^0.17.2" },
53
53
  "publishConfig": { "access": "public" },
54
- "gitHead": "b5ad57036344bd65a3e0945111b387e23a82c8ba"
54
+ "gitHead": "d934face11e0511f16942786bd609d4cec659ec6"
55
55
  }