@willbooster/shared-lib-node 8.0.5 → 8.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/env.cjs +1 -1
- package/dist/env.cjs.map +1 -1
- package/dist/env.d.ts +2 -2
- package/dist/env.js +1 -1
- package/dist/env.js.map +1 -1
- package/package.json +10 -10
package/dist/env.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var e=require("node:fs"),n=require("node:path"),o=require("dotenv"),t=require("dotenv-expand");function
|
|
1
|
+
"use strict";var e=require("node:fs"),n=require("node:path"),o=require("dotenv"),t=require("dotenv-expand");function s(o,s){let r=(o.env??[]).map(e=>n.resolve(s,e.toString()));const i=o.cascadeEnv??(o.cascadeNodeEnv?process.env.NODE_ENV||"development":o.autoCascadeEnv?process.env.WB_ENV||process.env.NODE_ENV||"development":void 0);if("string"==typeof i){if(0===r.length&&(r.push(n.join(s,".env")),o.includeRootEnv)){const o=n.resolve(s,"..","..");e.existsSync(n.join(o,"package.json"))&&r.push(n.join(o,".env"))}r=r.flatMap(e=>i?[`${e}.${i}.local`,`${e}.local`,`${e}.${i}`,e]:[`${e}.local`,e])}r=r.filter(n=>e.existsSync(n)).map(e=>n.relative(s,e)),o.verbose&&(console.info(`WB_ENV: ${process.env.WB_ENV}, NODE_ENV: ${process.env.NODE_ENV}`),console.info("Reading env files:",r.join(", ")));const c=[],v={};for(const e of r){const t=[];for(const[o,r]of Object.entries(a(n.join(s,e))))o in v||(v[o]=r,t.push(o));c.push([e,t]),o.verbose&&t.length>0&&console.info(`Read ${t.length} environment variables from ${e}`)}if(o.verbose||console.info(`Read: ${c.map(([e,n])=>`${e} (${n.join(", ")})`).join(", ")}`),o.checkEnv){const e=Object.keys(a(n.join(s,o.checkEnv))).filter(e=>!(e in v));if(e.length>0)throw new Error(`Missing environment variables in [${r.join(", ")}]: [${e.join(", ")}]`)}return[t.expand({parsed:v,processEnv:{}}).parsed??v,c]}const r=new Map;function a(e){const t=r.get(e);if(t)return t;const s=o.config({path:n.resolve(e),processEnv:{}}).parsed??{};return r.set(e,s),s}exports.readAndApplyEnvironmentVariables=function(e,n){const[o]=s(e,n);return Object.assign(process.env,o),o},exports.readEnvironmentVariables=s,exports.removeNpmAndYarnEnvironmentVariables=function(e){e.PATH&&e.BERRY_BIN_FOLDER&&(e.PATH=e.PATH.replace(`${e.BERRY_BIN_FOLDER}:`,"").replaceAll(/\/private\/var\/folders\/[^:]+:/g,"").replaceAll(/\/var\/tmp\/[^:]+:/g,"").replaceAll(/\/tmp\/[^:]+:/g,""));for(const n of Object.keys(e)){const o=n.toUpperCase();(o.startsWith("NPM_")||o.startsWith("YARN_")||o.startsWith("BERRY_")||"PROJECT_CWD"===o||"INIT_CWD"===o)&&delete e[n]}},exports.yargsOptionsBuilderForEnv={env:{description:".env files to be loaded.",type:"array"},"cascade-env":{description:"Environment to load cascading .env files (e.g., `.env`, `.env.<environment>`, `.env.local` and `.env.<environment>.local`). Preferred over `cascade-node-env` and `auto-cascade-env`.",type:"string"},"cascade-node-env":{description:'Same with --cascade-env=<NODE_ENV || "development">. Preferred over `auto-cascade-env`.',type:"boolean"},"auto-cascade-env":{description:'Same with --cascade-env=<WB_ENV || NODE_ENV || "development">.',type:"boolean",default:!0},"include-root-env":{description:"Include .env files in root directory if the project is in a monorepo and --env option is not used.",type:"boolean",default:!0},"check-env":{description:"Check whether the keys of the loaded .env files are same with the given .env file.",type:"string",default:".env.example"},verbose:{description:"Whether to show verbose information",type:"boolean",alias:"v"}};
|
|
2
2
|
//# sourceMappingURL=env.cjs.map
|
package/dist/env.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.cjs","sources":["../src/env.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nimport { config } from 'dotenv';\nimport { expand } from 'dotenv-expand';\nimport type { ArgumentsCamelCase, InferredOptionTypes } from 'yargs';\n\nexport const yargsOptionsBuilderForEnv = {\n env: {\n description: '.env files to be loaded.',\n type: 'array',\n },\n 'cascade-env': {\n description:\n 'Environment to load cascading .env files (e.g., `.env`, `.env.<environment>`, `.env.local` and `.env.<environment>.local`). Preferred over `cascade-node-env` and `auto-cascade-env`.',\n type: 'string',\n },\n 'cascade-node-env': {\n description: 'Same with --cascade-env=<NODE_ENV || \"development\">. Preferred over `auto-cascade-env`.',\n type: 'boolean',\n },\n 'auto-cascade-env': {\n description: 'Same with --cascade-env=<WB_ENV || NODE_ENV || \"development\">.',\n type: 'boolean',\n default: true,\n },\n 'include-root-env': {\n description: 'Include .env files in root directory if the project is in a monorepo and --env option is not used.',\n type: 'boolean',\n default: true,\n },\n 'check-env': {\n description: 'Check whether the keys of the loaded .env files are same with the given .env file.',\n type: 'string',\n default: '.env.example',\n },\n verbose: {\n description: 'Whether to show verbose information',\n type: 'boolean',\n alias: 'v',\n },\n} as const;\n\nexport type EnvReaderOptions = Partial<ArgumentsCamelCase<InferredOptionTypes<typeof yargsOptionsBuilderForEnv>>>;\n\n/**\n * This function reads environment variables from `.env` files.\n * Note it does not assign them in `process.env`.\n * @return [envVars, [envPaths,
|
|
1
|
+
{"version":3,"file":"env.cjs","sources":["../src/env.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nimport { config } from 'dotenv';\nimport { expand } from 'dotenv-expand';\nimport type { ArgumentsCamelCase, InferredOptionTypes } from 'yargs';\n\nexport const yargsOptionsBuilderForEnv = {\n env: {\n description: '.env files to be loaded.',\n type: 'array',\n },\n 'cascade-env': {\n description:\n 'Environment to load cascading .env files (e.g., `.env`, `.env.<environment>`, `.env.local` and `.env.<environment>.local`). Preferred over `cascade-node-env` and `auto-cascade-env`.',\n type: 'string',\n },\n 'cascade-node-env': {\n description: 'Same with --cascade-env=<NODE_ENV || \"development\">. Preferred over `auto-cascade-env`.',\n type: 'boolean',\n },\n 'auto-cascade-env': {\n description: 'Same with --cascade-env=<WB_ENV || NODE_ENV || \"development\">.',\n type: 'boolean',\n default: true,\n },\n 'include-root-env': {\n description: 'Include .env files in root directory if the project is in a monorepo and --env option is not used.',\n type: 'boolean',\n default: true,\n },\n 'check-env': {\n description: 'Check whether the keys of the loaded .env files are same with the given .env file.',\n type: 'string',\n default: '.env.example',\n },\n verbose: {\n description: 'Whether to show verbose information',\n type: 'boolean',\n alias: 'v',\n },\n} as const;\n\nexport type EnvReaderOptions = Partial<ArgumentsCamelCase<InferredOptionTypes<typeof yargsOptionsBuilderForEnv>>>;\n\n/**\n * This function reads environment variables from `.env` files.\n * Note it does not assign them in `process.env`.\n * @return [envVars, [envPaths, envVarNames][]]\n * */\nexport function readEnvironmentVariables(\n argv: EnvReaderOptions,\n cwd: string\n): [Record<string, string>, [string, string[]][]] {\n let envPaths = (argv.env ?? []).map((envPath) => path.resolve(cwd, envPath.toString()));\n const cascade =\n argv.cascadeEnv ??\n (argv.cascadeNodeEnv\n ? process.env.NODE_ENV || 'development'\n : argv.autoCascadeEnv\n ? process.env.WB_ENV || process.env.NODE_ENV || 'development'\n : undefined);\n if (typeof cascade === 'string') {\n if (envPaths.length === 0) {\n envPaths.push(path.join(cwd, '.env'));\n if (argv.includeRootEnv) {\n const rootPath = path.resolve(cwd, '..', '..');\n if (fs.existsSync(path.join(rootPath, 'package.json'))) {\n envPaths.push(path.join(rootPath, '.env'));\n }\n }\n }\n envPaths = envPaths.flatMap((envPath) =>\n cascade\n ? [`${envPath}.${cascade}.local`, `${envPath}.local`, `${envPath}.${cascade}`, envPath]\n : [`${envPath}.local`, envPath]\n );\n }\n envPaths = envPaths.filter((envPath) => fs.existsSync(envPath)).map((envPath) => path.relative(cwd, envPath));\n if (argv.verbose) {\n console.info(`WB_ENV: ${process.env.WB_ENV}, NODE_ENV: ${process.env.NODE_ENV}`);\n console.info('Reading env files:', envPaths.join(', '));\n }\n\n const envPathAndEnvVarCountPairs: [string, string[]][] = [];\n const envVars: Record<string, string> = {};\n for (const envPath of envPaths) {\n const keys: string[] = [];\n for (const [key, value] of Object.entries(readEnvFile(path.join(cwd, envPath)))) {\n if (!(key in envVars)) {\n envVars[key] = value;\n keys.push(key);\n }\n }\n envPathAndEnvVarCountPairs.push([envPath, keys]);\n if (argv.verbose && keys.length > 0) {\n console.info(`Read ${keys.length} environment variables from ${envPath}`);\n }\n }\n if (!argv.verbose) {\n console.info(\n `Read: ${envPathAndEnvVarCountPairs.map(([envPath, keys]) => `${envPath} (${keys.join(', ')})`).join(', ')}`\n );\n }\n\n if (argv.checkEnv) {\n const exampleKeys = Object.keys(readEnvFile(path.join(cwd, argv.checkEnv)));\n const missingKeys = exampleKeys.filter((key) => !(key in envVars));\n if (missingKeys.length > 0) {\n throw new Error(`Missing environment variables in [${envPaths.join(', ')}]: [${missingKeys.join(', ')}]`);\n }\n }\n return [expand({ parsed: envVars, processEnv: {} }).parsed ?? envVars, envPathAndEnvVarCountPairs];\n}\n\n/**\n * This function read environment variables from `.env` files and assign them in `process.env`.\n * */\nexport function readAndApplyEnvironmentVariables(\n argv: EnvReaderOptions,\n cwd: string\n): Record<string, string | undefined> {\n const [envVars] = readEnvironmentVariables(argv, cwd);\n Object.assign(process.env, envVars);\n return envVars;\n}\n\nconst cachedEnvVars = new Map<string, Record<string, string>>();\n\nfunction readEnvFile(filePath: string): Record<string, string> {\n const cached = cachedEnvVars.get(filePath);\n if (cached) return cached;\n\n const parsed = config({ path: path.resolve(filePath), processEnv: {} }).parsed ?? {};\n cachedEnvVars.set(filePath, parsed);\n return parsed;\n}\n\n/**\n * This function removes environment variables related to npm and yarn from the given environment variables.\n * */\nexport function removeNpmAndYarnEnvironmentVariables(envVars: Record<string, string | undefined>): void {\n // Remove npm & yarn environment variables from process.env\n if (envVars.PATH && envVars.BERRY_BIN_FOLDER) {\n envVars.PATH = envVars.PATH.replace(`${envVars.BERRY_BIN_FOLDER}:`, '')\n // Temporary directory in macOS\n .replaceAll(/\\/private\\/var\\/folders\\/[^:]+:/g, '')\n // Temporary directories in Linux\n .replaceAll(/\\/var\\/tmp\\/[^:]+:/g, '')\n .replaceAll(/\\/tmp\\/[^:]+:/g, '');\n }\n for (const key of Object.keys(envVars)) {\n const upperKey = key.toUpperCase();\n if (\n upperKey.startsWith('NPM_') ||\n upperKey.startsWith('YARN_') ||\n upperKey.startsWith('BERRY_') ||\n upperKey === 'PROJECT_CWD' ||\n upperKey === 'INIT_CWD'\n ) {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete envVars[key];\n }\n }\n}\n"],"names":["readEnvironmentVariables","argv","cwd","envPaths","env","map","envPath","path","resolve","toString","cascade","cascadeEnv","cascadeNodeEnv","process","NODE_ENV","autoCascadeEnv","WB_ENV","undefined","length","push","join","includeRootEnv","rootPath","fs","existsSync","flatMap","filter","relative","verbose","console","info","envPathAndEnvVarCountPairs","envVars","keys","key","value","Object","entries","readEnvFile","checkEnv","missingKeys","Error","expand","parsed","processEnv","cachedEnvVars","Map","filePath","cached","get","config","set","assign","PATH","BERRY_BIN_FOLDER","replace","replaceAll","upperKey","toUpperCase","startsWith","description","type","default","alias"],"mappings":"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"}
|
package/dist/env.d.ts
CHANGED
|
@@ -37,9 +37,9 @@ export type EnvReaderOptions = Partial<ArgumentsCamelCase<InferredOptionTypes<ty
|
|
|
37
37
|
/**
|
|
38
38
|
* This function reads environment variables from `.env` files.
|
|
39
39
|
* Note it does not assign them in `process.env`.
|
|
40
|
-
* @return [envVars, [envPaths,
|
|
40
|
+
* @return [envVars, [envPaths, envVarNames][]]
|
|
41
41
|
* */
|
|
42
|
-
export declare function readEnvironmentVariables(argv: EnvReaderOptions, cwd: string): [Record<string, string>, [string,
|
|
42
|
+
export declare function readEnvironmentVariables(argv: EnvReaderOptions, cwd: string): [Record<string, string>, [string, string[]][]];
|
|
43
43
|
/**
|
|
44
44
|
* This function read environment variables from `.env` files and assign them in `process.env`.
|
|
45
45
|
* */
|
package/dist/env.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import e from"node:fs";import n from"node:path";import{config as o}from"dotenv";import{expand as t}from"dotenv-expand";const s={env:{description:".env files to be loaded.",type:"array"},"cascade-env":{description:"Environment to load cascading .env files (e.g., `.env`, `.env.<environment>`, `.env.local` and `.env.<environment>.local`). Preferred over `cascade-node-env` and `auto-cascade-env`.",type:"string"},"cascade-node-env":{description:'Same with --cascade-env=<NODE_ENV || "development">. Preferred over `auto-cascade-env`.',type:"boolean"},"auto-cascade-env":{description:'Same with --cascade-env=<WB_ENV || NODE_ENV || "development">.',type:"boolean",default:!0},"include-root-env":{description:"Include .env files in root directory if the project is in a monorepo and --env option is not used.",type:"boolean",default:!0},"check-env":{description:"Check whether the keys of the loaded .env files are same with the given .env file.",type:"string",default:".env.example"},verbose:{description:"Whether to show verbose information",type:"boolean",alias:"v"}};function r(o,s){let r=(o.env??[]).map(e=>n.resolve(s,e.toString()));const i=o.cascadeEnv??(o.cascadeNodeEnv?process.env.NODE_ENV||"development":o.autoCascadeEnv?process.env.WB_ENV||process.env.NODE_ENV||"development":void 0);if("string"==typeof i){if(0===r.length&&(r.push(n.join(s,".env")),o.includeRootEnv)){const o=n.resolve(s,"..","..");e.existsSync(n.join(o,"package.json"))&&r.push(n.join(o,".env"))}r=r.flatMap(e=>i?[`${e}.${i}.local`,`${e}.local`,`${e}.${i}`,e]:[`${e}.local`,e])}r=r.filter(n=>e.existsSync(n)).map(e=>n.relative(s,e)),o.verbose&&(console.info(`WB_ENV: ${process.env.WB_ENV}, NODE_ENV: ${process.env.NODE_ENV}`),console.info("Reading env files:",r.join(", ")));const a=[],v={};for(const e of r){
|
|
1
|
+
import e from"node:fs";import n from"node:path";import{config as o}from"dotenv";import{expand as t}from"dotenv-expand";const s={env:{description:".env files to be loaded.",type:"array"},"cascade-env":{description:"Environment to load cascading .env files (e.g., `.env`, `.env.<environment>`, `.env.local` and `.env.<environment>.local`). Preferred over `cascade-node-env` and `auto-cascade-env`.",type:"string"},"cascade-node-env":{description:'Same with --cascade-env=<NODE_ENV || "development">. Preferred over `auto-cascade-env`.',type:"boolean"},"auto-cascade-env":{description:'Same with --cascade-env=<WB_ENV || NODE_ENV || "development">.',type:"boolean",default:!0},"include-root-env":{description:"Include .env files in root directory if the project is in a monorepo and --env option is not used.",type:"boolean",default:!0},"check-env":{description:"Check whether the keys of the loaded .env files are same with the given .env file.",type:"string",default:".env.example"},verbose:{description:"Whether to show verbose information",type:"boolean",alias:"v"}};function r(o,s){let r=(o.env??[]).map(e=>n.resolve(s,e.toString()));const i=o.cascadeEnv??(o.cascadeNodeEnv?process.env.NODE_ENV||"development":o.autoCascadeEnv?process.env.WB_ENV||process.env.NODE_ENV||"development":void 0);if("string"==typeof i){if(0===r.length&&(r.push(n.join(s,".env")),o.includeRootEnv)){const o=n.resolve(s,"..","..");e.existsSync(n.join(o,"package.json"))&&r.push(n.join(o,".env"))}r=r.flatMap(e=>i?[`${e}.${i}.local`,`${e}.local`,`${e}.${i}`,e]:[`${e}.local`,e])}r=r.filter(n=>e.existsSync(n)).map(e=>n.relative(s,e)),o.verbose&&(console.info(`WB_ENV: ${process.env.WB_ENV}, NODE_ENV: ${process.env.NODE_ENV}`),console.info("Reading env files:",r.join(", ")));const a=[],v={};for(const e of r){const t=[];for(const[o,r]of Object.entries(c(n.join(s,e))))o in v||(v[o]=r,t.push(o));a.push([e,t]),o.verbose&&t.length>0&&console.info(`Read ${t.length} environment variables from ${e}`)}if(o.verbose||console.info(`Read: ${a.map(([e,n])=>`${e} (${n.join(", ")})`).join(", ")}`),o.checkEnv){const e=Object.keys(c(n.join(s,o.checkEnv))).filter(e=>!(e in v));if(e.length>0)throw new Error(`Missing environment variables in [${r.join(", ")}]: [${e.join(", ")}]`)}return[t({parsed:v,processEnv:{}}).parsed??v,a]}function i(e,n){const[o]=r(e,n);return Object.assign(process.env,o),o}const a=new Map;function c(e){const t=a.get(e);if(t)return t;const s=o({path:n.resolve(e),processEnv:{}}).parsed??{};return a.set(e,s),s}function v(e){e.PATH&&e.BERRY_BIN_FOLDER&&(e.PATH=e.PATH.replace(`${e.BERRY_BIN_FOLDER}:`,"").replaceAll(/\/private\/var\/folders\/[^:]+:/g,"").replaceAll(/\/var\/tmp\/[^:]+:/g,"").replaceAll(/\/tmp\/[^:]+:/g,""));for(const n of Object.keys(e)){const o=n.toUpperCase();(o.startsWith("NPM_")||o.startsWith("YARN_")||o.startsWith("BERRY_")||"PROJECT_CWD"===o||"INIT_CWD"===o)&&delete e[n]}}export{i as readAndApplyEnvironmentVariables,r as readEnvironmentVariables,v as removeNpmAndYarnEnvironmentVariables,s as yargsOptionsBuilderForEnv};
|
|
2
2
|
//# sourceMappingURL=env.js.map
|
package/dist/env.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.js","sources":["../src/env.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nimport { config } from 'dotenv';\nimport { expand } from 'dotenv-expand';\nimport type { ArgumentsCamelCase, InferredOptionTypes } from 'yargs';\n\nexport const yargsOptionsBuilderForEnv = {\n env: {\n description: '.env files to be loaded.',\n type: 'array',\n },\n 'cascade-env': {\n description:\n 'Environment to load cascading .env files (e.g., `.env`, `.env.<environment>`, `.env.local` and `.env.<environment>.local`). Preferred over `cascade-node-env` and `auto-cascade-env`.',\n type: 'string',\n },\n 'cascade-node-env': {\n description: 'Same with --cascade-env=<NODE_ENV || \"development\">. Preferred over `auto-cascade-env`.',\n type: 'boolean',\n },\n 'auto-cascade-env': {\n description: 'Same with --cascade-env=<WB_ENV || NODE_ENV || \"development\">.',\n type: 'boolean',\n default: true,\n },\n 'include-root-env': {\n description: 'Include .env files in root directory if the project is in a monorepo and --env option is not used.',\n type: 'boolean',\n default: true,\n },\n 'check-env': {\n description: 'Check whether the keys of the loaded .env files are same with the given .env file.',\n type: 'string',\n default: '.env.example',\n },\n verbose: {\n description: 'Whether to show verbose information',\n type: 'boolean',\n alias: 'v',\n },\n} as const;\n\nexport type EnvReaderOptions = Partial<ArgumentsCamelCase<InferredOptionTypes<typeof yargsOptionsBuilderForEnv>>>;\n\n/**\n * This function reads environment variables from `.env` files.\n * Note it does not assign them in `process.env`.\n * @return [envVars, [envPaths,
|
|
1
|
+
{"version":3,"file":"env.js","sources":["../src/env.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nimport { config } from 'dotenv';\nimport { expand } from 'dotenv-expand';\nimport type { ArgumentsCamelCase, InferredOptionTypes } from 'yargs';\n\nexport const yargsOptionsBuilderForEnv = {\n env: {\n description: '.env files to be loaded.',\n type: 'array',\n },\n 'cascade-env': {\n description:\n 'Environment to load cascading .env files (e.g., `.env`, `.env.<environment>`, `.env.local` and `.env.<environment>.local`). Preferred over `cascade-node-env` and `auto-cascade-env`.',\n type: 'string',\n },\n 'cascade-node-env': {\n description: 'Same with --cascade-env=<NODE_ENV || \"development\">. Preferred over `auto-cascade-env`.',\n type: 'boolean',\n },\n 'auto-cascade-env': {\n description: 'Same with --cascade-env=<WB_ENV || NODE_ENV || \"development\">.',\n type: 'boolean',\n default: true,\n },\n 'include-root-env': {\n description: 'Include .env files in root directory if the project is in a monorepo and --env option is not used.',\n type: 'boolean',\n default: true,\n },\n 'check-env': {\n description: 'Check whether the keys of the loaded .env files are same with the given .env file.',\n type: 'string',\n default: '.env.example',\n },\n verbose: {\n description: 'Whether to show verbose information',\n type: 'boolean',\n alias: 'v',\n },\n} as const;\n\nexport type EnvReaderOptions = Partial<ArgumentsCamelCase<InferredOptionTypes<typeof yargsOptionsBuilderForEnv>>>;\n\n/**\n * This function reads environment variables from `.env` files.\n * Note it does not assign them in `process.env`.\n * @return [envVars, [envPaths, envVarNames][]]\n * */\nexport function readEnvironmentVariables(\n argv: EnvReaderOptions,\n cwd: string\n): [Record<string, string>, [string, string[]][]] {\n let envPaths = (argv.env ?? []).map((envPath) => path.resolve(cwd, envPath.toString()));\n const cascade =\n argv.cascadeEnv ??\n (argv.cascadeNodeEnv\n ? process.env.NODE_ENV || 'development'\n : argv.autoCascadeEnv\n ? process.env.WB_ENV || process.env.NODE_ENV || 'development'\n : undefined);\n if (typeof cascade === 'string') {\n if (envPaths.length === 0) {\n envPaths.push(path.join(cwd, '.env'));\n if (argv.includeRootEnv) {\n const rootPath = path.resolve(cwd, '..', '..');\n if (fs.existsSync(path.join(rootPath, 'package.json'))) {\n envPaths.push(path.join(rootPath, '.env'));\n }\n }\n }\n envPaths = envPaths.flatMap((envPath) =>\n cascade\n ? [`${envPath}.${cascade}.local`, `${envPath}.local`, `${envPath}.${cascade}`, envPath]\n : [`${envPath}.local`, envPath]\n );\n }\n envPaths = envPaths.filter((envPath) => fs.existsSync(envPath)).map((envPath) => path.relative(cwd, envPath));\n if (argv.verbose) {\n console.info(`WB_ENV: ${process.env.WB_ENV}, NODE_ENV: ${process.env.NODE_ENV}`);\n console.info('Reading env files:', envPaths.join(', '));\n }\n\n const envPathAndEnvVarCountPairs: [string, string[]][] = [];\n const envVars: Record<string, string> = {};\n for (const envPath of envPaths) {\n const keys: string[] = [];\n for (const [key, value] of Object.entries(readEnvFile(path.join(cwd, envPath)))) {\n if (!(key in envVars)) {\n envVars[key] = value;\n keys.push(key);\n }\n }\n envPathAndEnvVarCountPairs.push([envPath, keys]);\n if (argv.verbose && keys.length > 0) {\n console.info(`Read ${keys.length} environment variables from ${envPath}`);\n }\n }\n if (!argv.verbose) {\n console.info(\n `Read: ${envPathAndEnvVarCountPairs.map(([envPath, keys]) => `${envPath} (${keys.join(', ')})`).join(', ')}`\n );\n }\n\n if (argv.checkEnv) {\n const exampleKeys = Object.keys(readEnvFile(path.join(cwd, argv.checkEnv)));\n const missingKeys = exampleKeys.filter((key) => !(key in envVars));\n if (missingKeys.length > 0) {\n throw new Error(`Missing environment variables in [${envPaths.join(', ')}]: [${missingKeys.join(', ')}]`);\n }\n }\n return [expand({ parsed: envVars, processEnv: {} }).parsed ?? envVars, envPathAndEnvVarCountPairs];\n}\n\n/**\n * This function read environment variables from `.env` files and assign them in `process.env`.\n * */\nexport function readAndApplyEnvironmentVariables(\n argv: EnvReaderOptions,\n cwd: string\n): Record<string, string | undefined> {\n const [envVars] = readEnvironmentVariables(argv, cwd);\n Object.assign(process.env, envVars);\n return envVars;\n}\n\nconst cachedEnvVars = new Map<string, Record<string, string>>();\n\nfunction readEnvFile(filePath: string): Record<string, string> {\n const cached = cachedEnvVars.get(filePath);\n if (cached) return cached;\n\n const parsed = config({ path: path.resolve(filePath), processEnv: {} }).parsed ?? {};\n cachedEnvVars.set(filePath, parsed);\n return parsed;\n}\n\n/**\n * This function removes environment variables related to npm and yarn from the given environment variables.\n * */\nexport function removeNpmAndYarnEnvironmentVariables(envVars: Record<string, string | undefined>): void {\n // Remove npm & yarn environment variables from process.env\n if (envVars.PATH && envVars.BERRY_BIN_FOLDER) {\n envVars.PATH = envVars.PATH.replace(`${envVars.BERRY_BIN_FOLDER}:`, '')\n // Temporary directory in macOS\n .replaceAll(/\\/private\\/var\\/folders\\/[^:]+:/g, '')\n // Temporary directories in Linux\n .replaceAll(/\\/var\\/tmp\\/[^:]+:/g, '')\n .replaceAll(/\\/tmp\\/[^:]+:/g, '');\n }\n for (const key of Object.keys(envVars)) {\n const upperKey = key.toUpperCase();\n if (\n upperKey.startsWith('NPM_') ||\n upperKey.startsWith('YARN_') ||\n upperKey.startsWith('BERRY_') ||\n upperKey === 'PROJECT_CWD' ||\n upperKey === 'INIT_CWD'\n ) {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete envVars[key];\n }\n }\n}\n"],"names":["yargsOptionsBuilderForEnv","env","description","type","default","verbose","alias","readEnvironmentVariables","argv","cwd","envPaths","map","envPath","path","resolve","toString","cascade","cascadeEnv","cascadeNodeEnv","process","NODE_ENV","autoCascadeEnv","WB_ENV","undefined","length","push","join","includeRootEnv","rootPath","fs","existsSync","flatMap","filter","relative","console","info","envPathAndEnvVarCountPairs","envVars","keys","key","value","Object","entries","readEnvFile","checkEnv","missingKeys","Error","expand","parsed","processEnv","readAndApplyEnvironmentVariables","assign","cachedEnvVars","Map","filePath","cached","get","config","set","removeNpmAndYarnEnvironmentVariables","PATH","BERRY_BIN_FOLDER","replace","replaceAll","upperKey","toUpperCase","startsWith"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@willbooster/shared-lib-node",
|
|
3
|
-
"version": "8.0
|
|
3
|
+
"version": "8.1.0",
|
|
4
4
|
"description": "Shared library for WillBooster Node.js projects",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"scripts": {
|
|
34
34
|
"build": "build-ts lib",
|
|
35
35
|
"check-all-for-ai": "yarn check-for-ai && yarn test",
|
|
36
|
-
"check-for-ai": "yarn install > /dev/null && yarn format > /dev/null 2> /dev/null || true && yarn lint-fix --quiet
|
|
36
|
+
"check-for-ai": "yarn install > /dev/null && yarn format > /dev/null 2> /dev/null || true && yarn typecheck && yarn lint-fix --quiet",
|
|
37
37
|
"cleanup": "yarn format && yarn lint-fix",
|
|
38
38
|
"format": "sort-package-json && yarn prettify",
|
|
39
39
|
"lint": "eslint --color",
|
|
@@ -49,14 +49,14 @@
|
|
|
49
49
|
"tree-kill": "1.2.2"
|
|
50
50
|
},
|
|
51
51
|
"devDependencies": {
|
|
52
|
-
"@types/bun": "1.3.
|
|
52
|
+
"@types/bun": "1.3.6",
|
|
53
53
|
"@types/eslint": "9.6.1",
|
|
54
54
|
"@types/micromatch": "4.0.10",
|
|
55
|
-
"@types/node": "24.10.
|
|
55
|
+
"@types/node": "24.10.9",
|
|
56
56
|
"@willbooster/eslint-config-ts": "11.4.12",
|
|
57
57
|
"@willbooster/prettier-config": "10.2.4",
|
|
58
|
-
"build-ts": "17.0.
|
|
59
|
-
"eslint": "9.39.
|
|
58
|
+
"build-ts": "17.0.14",
|
|
59
|
+
"eslint": "9.39.2",
|
|
60
60
|
"eslint-config-flat-gitignore": "2.1.0",
|
|
61
61
|
"eslint-config-prettier": "10.1.8",
|
|
62
62
|
"eslint-import-resolver-typescript": "4.4.4",
|
|
@@ -68,12 +68,12 @@
|
|
|
68
68
|
"globals": "16.5.0",
|
|
69
69
|
"lint-staged": "16.2.7",
|
|
70
70
|
"micromatch": "4.0.8",
|
|
71
|
-
"prettier": "3.
|
|
72
|
-
"prettier-plugin-java": "2.
|
|
71
|
+
"prettier": "3.8.0",
|
|
72
|
+
"prettier-plugin-java": "2.8.1",
|
|
73
73
|
"sort-package-json": "3.6.0",
|
|
74
74
|
"typescript": "5.9.3",
|
|
75
|
-
"typescript-eslint": "8.
|
|
76
|
-
"vitest": "4.0.
|
|
75
|
+
"typescript-eslint": "8.53.0",
|
|
76
|
+
"vitest": "4.0.17"
|
|
77
77
|
},
|
|
78
78
|
"publishConfig": {
|
|
79
79
|
"access": "public"
|