@willbooster/shared-lib-node 4.1.2 → 5.0.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 CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";var e=require("node:path"),n=require("dotenv");exports.loadEnvironmentVariables=function(o,t,a){let r=(o.env??[]).map((n=>e.resolve(a??t,n.toString())));const s=o.cascadeEnv??(o.cascadeNodeEnv?process.env.NODE_ENV||"development":o.autoCascadeEnv?process.env.WB_ENV||process.env.NODE_ENV||"development":void 0);"string"==typeof s&&(0===r.length&&r.push(e.join(t,".env")),r=r.flatMap((e=>s?[`${e}.${s}.local`,`${e}.local`,`${e}.${s}`,e]:[`${e}.local`,e]))),r=r.map((n=>e.relative(t,n))),o.verbose&&(console.info(`WB_ENV: ${process.env.WB_ENV}, NODE_ENV: ${process.env.NODE_ENV}`),console.info("Loading env files:",r));let c={};const i={...process.env};for(const o of r){c={...n.config({path:e.join(t,o)}).parsed,...c};let a=0;for(const[e,n]of Object.entries(c))i[e]!==n&&(i[e]=n,a++);a>0&&console.info(`Loaded ${a} environment variables:`,o)}if(o.checkEnv){const a=Object.keys(n.config({path:e.join(t,o.checkEnv)}).parsed||{}).filter((e=>!(e in c)));if(a.length>0)throw new Error(`Missing environment variables in [${r.join(", ")}]: [${a.join(", ")}]`)}return c},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},"check-env":{description:"Check whether the keys of the loaded .env files are same with the given .env file.",type:"string",default:".env.example"}};
1
+ "use strict";var e=require("node:fs"),n=require("node:path"),o=require("dotenv");function t(o,t,r=!0){let a=(o.env??[]).map((e=>n.resolve(t,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===a.length&&(a.push(n.join(t,".env")),o.includeRootEnv)){const o=n.resolve(t,"..","..");e.existsSync(n.join(o,"package.json"))&&a.push(n.join(o,".env"))}a=a.flatMap((e=>i?[`${e}.${i}.local`,`${e}.local`,`${e}.${i}`,e]:[`${e}.local`,e]))}a=a.map((e=>n.relative(t,e))),o.verbose&&(console.info(`WB_ENV: ${process.env.WB_ENV}, NODE_ENV: ${process.env.NODE_ENV}`),console.info("Reading env files:",a));let c={};const v={...process.env};for(const e of a){c={...s(n.join(t,e),r),...c};let o=0;for(const[e,n]of Object.entries(c))v[e]!==n&&(v[e]=n,o++);o>0&&console.info(`Read ${o} environment variables:`,e)}if(o.checkEnv){const e=Object.keys(s(n.join(t,o.checkEnv),r)||{}).filter((e=>!(e in c)));if(e.length>0)throw new Error(`Missing environment variables in [${a.join(", ")}]: [${e.join(", ")}]`)}return c}const r=new Map;function s(e,t=!0){const s=t&&r.get(e);if(s)return s;const a=o.config({path:n.resolve(e),processEnv:{}}).parsed??{};return t&&r.set(e,a),a}exports.readAndApplyEnvironmentVariables=function(e,n,o=!0){const r=t(e,n,o);return Object.assign(process.env,r),r},exports.readEnvironmentVariables=t,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 path from 'node:path';\n\nimport { config } from 'dotenv';\n\ninterface Options {\n env?: (string | number)[];\n cascadeEnv?: string;\n cascadeNodeEnv?: boolean;\n autoCascadeEnv?: boolean;\n checkEnv?: string;\n verbose?: boolean;\n}\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 '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} as const;\n\n/**\n * This function loads environment variables from `.env` files.\n * */\nexport function loadEnvironmentVariables(argv: Options, cwd: string, orgCwd?: string): Record<string, string> {\n let envPaths = (argv.env ?? []).map((envPath) => path.resolve(orgCwd ?? 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) envPaths.push(path.join(cwd, '.env'));\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.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('Loading env files:', envPaths);\n }\n\n let envVars: Record<string, string> = {};\n const orgEnvVars = { ...process.env };\n for (const envPath of envPaths) {\n envVars = { ...config({ path: path.join(cwd, envPath) }).parsed, ...envVars };\n let count = 0;\n for (const [key, value] of Object.entries(envVars)) {\n if (orgEnvVars[key] !== value) {\n orgEnvVars[key] = value;\n count++;\n }\n }\n if (count > 0) {\n console.info(`Loaded ${count} environment variables:`, envPath);\n }\n }\n\n if (argv.checkEnv) {\n const exampleKeys = Object.keys(config({ path: path.join(cwd, argv.checkEnv) }).parsed || {});\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 envVars;\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 delete envVars[key];\n }\n }\n}\n"],"names":["argv","cwd","orgCwd","envPaths","env","map","envPath","path","resolve","toString","cascade","cascadeEnv","cascadeNodeEnv","process","NODE_ENV","autoCascadeEnv","WB_ENV","undefined","length","push","join","flatMap","relative","verbose","console","info","envVars","orgEnvVars","config","parsed","count","key","value","Object","entries","checkEnv","missingKeys","keys","filter","Error","PATH","BERRY_BIN_FOLDER","replace","replaceAll","upperKey","toUpperCase","startsWith","description","type","default"],"mappings":"6FA0CO,SAAkCA,EAAeC,EAAaC,GACnE,IAAIC,GAAYH,EAAKI,KAAO,IAAIC,KAAKC,GAAYC,EAAKC,QAAQN,GAAUD,EAAKK,EAAQG,cACrF,MAAMC,EACJV,EAAKW,aACJX,EAAKY,eACFC,QAAQT,IAAIU,UAAY,cACxBd,EAAKe,eACLF,QAAQT,IAAIY,QAAUH,QAAQT,IAAIU,UAAY,mBAC9CG,GACiB,iBAAZP,IACe,IAApBP,EAASe,QAAcf,EAASgB,KAAKZ,EAAKa,KAAKnB,EAAK,SACxDE,EAAWA,EAASkB,SAASf,GAC3BI,EACI,CAAE,GAAEJ,KAAWI,UAAkB,GAAEJ,UAAkB,GAAEA,KAAWI,IAAWJ,GAC7E,CAAE,GAAEA,UAAiBA,MAG7BH,EAAWA,EAASE,KAAKC,GAAYC,EAAKe,SAASrB,EAAKK,KACpDN,EAAKuB,UACPC,QAAQC,KAAM,WAAUZ,QAAQT,IAAIY,qBAAqBH,QAAQT,IAAIU,YACrEU,QAAQC,KAAK,qBAAsBtB,IAGrC,IAAIuB,EAAkC,CAAA,EACtC,MAAMC,EAAa,IAAKd,QAAQT,KAChC,IAAK,MAAME,KAAWH,EAAU,CAC9BuB,EAAU,IAAKE,SAAO,CAAErB,KAAMA,EAAKa,KAAKnB,EAAKK,KAAYuB,UAAWH,GACpE,IAAII,EAAQ,EACZ,IAAK,MAAOC,EAAKC,KAAUC,OAAOC,QAAQR,GACpCC,EAAWI,KAASC,IACtBL,EAAWI,GAAOC,EAClBF,KAGAA,EAAQ,GACVN,QAAQC,KAAM,UAASK,2BAAgCxB,EAE3D,CAEA,GAAIN,EAAKmC,SAAU,CACjB,MACMC,EADcH,OAAOI,KAAKT,SAAO,CAAErB,KAAMA,EAAKa,KAAKnB,EAAKD,EAAKmC,YAAaN,QAAU,CAAA,GAC1DS,QAAQP,KAAUA,KAAOL,KACzD,GAAIU,EAAYlB,OAAS,EACvB,MAAM,IAAIqB,MAAO,qCAAoCpC,EAASiB,KAAK,YAAYgB,EAAYhB,KAAK,SAEpG,CACA,OAAOM,CACT,+CAKO,SAA8CA,GAE/CA,EAAQc,MAAQd,EAAQe,mBAC1Bf,EAAQc,KAAOd,EAAQc,KAAKE,QAAS,GAAEhB,EAAQe,oBAAqB,IAEjEE,WAAW,mCAAoC,IAE/CA,WAAW,sBAAuB,IAClCA,WAAW,iBAAkB,KAElC,IAAK,MAAMZ,KAAOE,OAAOI,KAAKX,GAAU,CACtC,MAAMkB,EAAWb,EAAIc,eAEnBD,EAASE,WAAW,SACpBF,EAASE,WAAW,UACpBF,EAASE,WAAW,WACP,gBAAbF,GACa,aAAbA,WAEOlB,EAAQK,EAEnB,CACF,oCAvGyC,CACvC3B,IAAK,CACH2C,YAAa,2BACbC,KAAM,SAER,cAAe,CACbD,YACE,wLACFC,KAAM,UAER,mBAAoB,CAClBD,YAAa,0FACbC,KAAM,WAER,mBAAoB,CAClBD,YAAa,iEACbC,KAAM,UACNC,SAAS,GAEX,YAAa,CACXF,YAAa,qFACbC,KAAM,SACNC,QAAS"}
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 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. Note it does not assign them in `process.env`.\n * */\nexport function readEnvironmentVariables(\n argv: EnvReaderOptions,\n cwd: string,\n cacheEnabled = true\n): Record<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.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);\n }\n\n let envVars: Record<string, string> = {};\n const orgEnvVars = { ...process.env };\n for (const envPath of envPaths) {\n envVars = { ...readEnvFile(path.join(cwd, envPath), cacheEnabled), ...envVars };\n let count = 0;\n for (const [key, value] of Object.entries(envVars)) {\n if (orgEnvVars[key] !== value) {\n orgEnvVars[key] = value;\n count++;\n }\n }\n if (count > 0) {\n console.info(`Read ${count} environment variables:`, envPath);\n }\n }\n\n if (argv.checkEnv) {\n const exampleKeys = Object.keys(readEnvFile(path.join(cwd, argv.checkEnv), cacheEnabled) || {});\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 envVars;\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 cacheEnabled = true\n): Record<string, string | undefined> {\n const envVars = readEnvironmentVariables(argv, cwd, cacheEnabled);\n Object.assign(process.env, envVars);\n return envVars;\n}\n\nconst cachedEnvVars = new Map<string, Record<string, string>>();\n\nfunction readEnvFile(filePath: string, cacheEnabled = true): Record<string, string> {\n const cached = cacheEnabled && cachedEnvVars.get(filePath);\n if (cached) return cached;\n\n const parsed = config({ path: path.resolve(filePath), processEnv: {} }).parsed ?? {};\n if (cacheEnabled) {\n cachedEnvVars.set(filePath, parsed);\n }\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 delete envVars[key];\n }\n }\n}\n"],"names":["readEnvironmentVariables","argv","cwd","cacheEnabled","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","relative","verbose","console","info","envVars","orgEnvVars","readEnvFile","count","key","value","Object","entries","checkEnv","missingKeys","keys","filter","Error","cachedEnvVars","Map","filePath","cached","get","parsed","config","processEnv","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
@@ -1,11 +1,4 @@
1
- interface Options {
2
- env?: (string | number)[];
3
- cascadeEnv?: string;
4
- cascadeNodeEnv?: boolean;
5
- autoCascadeEnv?: boolean;
6
- checkEnv?: string;
7
- verbose?: boolean;
8
- }
1
+ import type { ArgumentsCamelCase, InferredOptionTypes } from 'yargs';
9
2
  export declare const yargsOptionsBuilderForEnv: {
10
3
  readonly env: {
11
4
  readonly description: ".env files to be loaded.";
@@ -24,18 +17,32 @@ export declare const yargsOptionsBuilderForEnv: {
24
17
  readonly type: "boolean";
25
18
  readonly default: true;
26
19
  };
20
+ readonly 'include-root-env': {
21
+ readonly description: "Include .env files in root directory if the project is in a monorepo and --env option is not used.";
22
+ readonly type: "boolean";
23
+ readonly default: true;
24
+ };
27
25
  readonly 'check-env': {
28
26
  readonly description: "Check whether the keys of the loaded .env files are same with the given .env file.";
29
27
  readonly type: "string";
30
28
  readonly default: ".env.example";
31
29
  };
30
+ readonly verbose: {
31
+ readonly description: "Whether to show verbose information";
32
+ readonly type: "boolean";
33
+ readonly alias: "v";
34
+ };
32
35
  };
36
+ export type EnvReaderOptions = Partial<ArgumentsCamelCase<InferredOptionTypes<typeof yargsOptionsBuilderForEnv>>>;
37
+ /**
38
+ * This function reads environment variables from `.env` files. Note it does not assign them in `process.env`.
39
+ * */
40
+ export declare function readEnvironmentVariables(argv: EnvReaderOptions, cwd: string, cacheEnabled?: boolean): Record<string, string>;
33
41
  /**
34
- * This function loads environment variables from `.env` files.
42
+ * This function read environment variables from `.env` files and assign them in `process.env`.
35
43
  * */
36
- export declare function loadEnvironmentVariables(argv: Options, cwd: string, orgCwd?: string): Record<string, string>;
44
+ export declare function readAndApplyEnvironmentVariables(argv: EnvReaderOptions, cwd: string, cacheEnabled?: boolean): Record<string, string | undefined>;
37
45
  /**
38
46
  * This function removes environment variables related to npm and yarn from the given environment variables.
39
47
  * */
40
48
  export declare function removeNpmAndYarnEnvironmentVariables(envVars: Record<string, string | undefined>): void;
41
- export {};
package/dist/env.js CHANGED
@@ -1,2 +1,2 @@
1
- import e from"node:path";import{config as n}from"dotenv";const o={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},"check-env":{description:"Check whether the keys of the loaded .env files are same with the given .env file.",type:"string",default:".env.example"}};function t(o,t,a){let s=(o.env??[]).map((n=>e.resolve(a??t,n.toString())));const r=o.cascadeEnv??(o.cascadeNodeEnv?process.env.NODE_ENV||"development":o.autoCascadeEnv?process.env.WB_ENV||process.env.NODE_ENV||"development":void 0);"string"==typeof r&&(0===s.length&&s.push(e.join(t,".env")),s=s.flatMap((e=>r?[`${e}.${r}.local`,`${e}.local`,`${e}.${r}`,e]:[`${e}.local`,e]))),s=s.map((n=>e.relative(t,n))),o.verbose&&(console.info(`WB_ENV: ${process.env.WB_ENV}, NODE_ENV: ${process.env.NODE_ENV}`),console.info("Loading env files:",s));let c={};const i={...process.env};for(const o of s){c={...n({path:e.join(t,o)}).parsed,...c};let a=0;for(const[e,n]of Object.entries(c))i[e]!==n&&(i[e]=n,a++);a>0&&console.info(`Loaded ${a} environment variables:`,o)}if(o.checkEnv){const a=Object.keys(n({path:e.join(t,o.checkEnv)}).parsed||{}).filter((e=>!(e in c)));if(a.length>0)throw new Error(`Missing environment variables in [${s.join(", ")}]: [${a.join(", ")}]`)}return c}function a(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{t as loadEnvironmentVariables,a as removeNpmAndYarnEnvironmentVariables,o as yargsOptionsBuilderForEnv};
1
+ import e from"node:fs";import n from"node:path";import{config as o}from"dotenv";const t={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 s(o,t,s=!0){let r=(o.env??[]).map((e=>n.resolve(t,e.toString())));const a=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 a){if(0===r.length&&(r.push(n.join(t,".env")),o.includeRootEnv)){const o=n.resolve(t,"..","..");e.existsSync(n.join(o,"package.json"))&&r.push(n.join(o,".env"))}r=r.flatMap((e=>a?[`${e}.${a}.local`,`${e}.local`,`${e}.${a}`,e]:[`${e}.local`,e]))}r=r.map((e=>n.relative(t,e))),o.verbose&&(console.info(`WB_ENV: ${process.env.WB_ENV}, NODE_ENV: ${process.env.NODE_ENV}`),console.info("Reading env files:",r));let i={};const v={...process.env};for(const e of r){i={...c(n.join(t,e),s),...i};let o=0;for(const[e,n]of Object.entries(i))v[e]!==n&&(v[e]=n,o++);o>0&&console.info(`Read ${o} environment variables:`,e)}if(o.checkEnv){const e=Object.keys(c(n.join(t,o.checkEnv),s)||{}).filter((e=>!(e in i)));if(e.length>0)throw new Error(`Missing environment variables in [${r.join(", ")}]: [${e.join(", ")}]`)}return i}function r(e,n,o=!0){const t=s(e,n,o);return Object.assign(process.env,t),t}const a=new Map;function c(e,t=!0){const s=t&&a.get(e);if(s)return s;const r=o({path:n.resolve(e),processEnv:{}}).parsed??{};return t&&a.set(e,r),r}function i(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{r as readAndApplyEnvironmentVariables,s as readEnvironmentVariables,i as removeNpmAndYarnEnvironmentVariables,t 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 path from 'node:path';\n\nimport { config } from 'dotenv';\n\ninterface Options {\n env?: (string | number)[];\n cascadeEnv?: string;\n cascadeNodeEnv?: boolean;\n autoCascadeEnv?: boolean;\n checkEnv?: string;\n verbose?: boolean;\n}\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 '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} as const;\n\n/**\n * This function loads environment variables from `.env` files.\n * */\nexport function loadEnvironmentVariables(argv: Options, cwd: string, orgCwd?: string): Record<string, string> {\n let envPaths = (argv.env ?? []).map((envPath) => path.resolve(orgCwd ?? 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) envPaths.push(path.join(cwd, '.env'));\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.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('Loading env files:', envPaths);\n }\n\n let envVars: Record<string, string> = {};\n const orgEnvVars = { ...process.env };\n for (const envPath of envPaths) {\n envVars = { ...config({ path: path.join(cwd, envPath) }).parsed, ...envVars };\n let count = 0;\n for (const [key, value] of Object.entries(envVars)) {\n if (orgEnvVars[key] !== value) {\n orgEnvVars[key] = value;\n count++;\n }\n }\n if (count > 0) {\n console.info(`Loaded ${count} environment variables:`, envPath);\n }\n }\n\n if (argv.checkEnv) {\n const exampleKeys = Object.keys(config({ path: path.join(cwd, argv.checkEnv) }).parsed || {});\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 envVars;\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 delete envVars[key];\n }\n }\n}\n"],"names":["yargsOptionsBuilderForEnv","env","description","type","default","loadEnvironmentVariables","argv","cwd","orgCwd","envPaths","map","envPath","path","resolve","toString","cascade","cascadeEnv","cascadeNodeEnv","process","NODE_ENV","autoCascadeEnv","WB_ENV","undefined","length","push","join","flatMap","relative","verbose","console","info","envVars","orgEnvVars","config","parsed","count","key","value","Object","entries","checkEnv","missingKeys","keys","filter","Error","removeNpmAndYarnEnvironmentVariables","PATH","BERRY_BIN_FOLDER","replace","replaceAll","upperKey","toUpperCase","startsWith"],"mappings":"yDAaO,MAAMA,EAA4B,CACvCC,IAAK,CACHC,YAAa,2BACbC,KAAM,SAER,cAAe,CACbD,YACE,wLACFC,KAAM,UAER,mBAAoB,CAClBD,YAAa,0FACbC,KAAM,WAER,mBAAoB,CAClBD,YAAa,iEACbC,KAAM,UACNC,SAAS,GAEX,YAAa,CACXF,YAAa,qFACbC,KAAM,SACNC,QAAS,iBAON,SAASC,EAAyBC,EAAeC,EAAaC,GACnE,IAAIC,GAAYH,EAAKL,KAAO,IAAIS,KAAKC,GAAYC,EAAKC,QAAQL,GAAUD,EAAKI,EAAQG,cACrF,MAAMC,EACJT,EAAKU,aACJV,EAAKW,eACFC,QAAQjB,IAAIkB,UAAY,cACxBb,EAAKc,eACLF,QAAQjB,IAAIoB,QAAUH,QAAQjB,IAAIkB,UAAY,mBAC9CG,GACiB,iBAAZP,IACe,IAApBN,EAASc,QAAcd,EAASe,KAAKZ,EAAKa,KAAKlB,EAAK,SACxDE,EAAWA,EAASiB,SAASf,GAC3BI,EACI,CAAE,GAAEJ,KAAWI,UAAkB,GAAEJ,UAAkB,GAAEA,KAAWI,IAAWJ,GAC7E,CAAE,GAAEA,UAAiBA,MAG7BF,EAAWA,EAASC,KAAKC,GAAYC,EAAKe,SAASpB,EAAKI,KACpDL,EAAKsB,UACPC,QAAQC,KAAM,WAAUZ,QAAQjB,IAAIoB,qBAAqBH,QAAQjB,IAAIkB,YACrEU,QAAQC,KAAK,qBAAsBrB,IAGrC,IAAIsB,EAAkC,CAAA,EACtC,MAAMC,EAAa,IAAKd,QAAQjB,KAChC,IAAK,MAAMU,KAAWF,EAAU,CAC9BsB,EAAU,IAAKE,EAAO,CAAErB,KAAMA,EAAKa,KAAKlB,EAAKI,KAAYuB,UAAWH,GACpE,IAAII,EAAQ,EACZ,IAAK,MAAOC,EAAKC,KAAUC,OAAOC,QAAQR,GACpCC,EAAWI,KAASC,IACtBL,EAAWI,GAAOC,EAClBF,KAGAA,EAAQ,GACVN,QAAQC,KAAM,UAASK,2BAAgCxB,EAE3D,CAEA,GAAIL,EAAKkC,SAAU,CACjB,MACMC,EADcH,OAAOI,KAAKT,EAAO,CAAErB,KAAMA,EAAKa,KAAKlB,EAAKD,EAAKkC,YAAaN,QAAU,CAAA,GAC1DS,QAAQP,KAAUA,KAAOL,KACzD,GAAIU,EAAYlB,OAAS,EACvB,MAAM,IAAIqB,MAAO,qCAAoCnC,EAASgB,KAAK,YAAYgB,EAAYhB,KAAK,SAEpG,CACA,OAAOM,CACT,CAKO,SAASc,EAAqCd,GAE/CA,EAAQe,MAAQf,EAAQgB,mBAC1BhB,EAAQe,KAAOf,EAAQe,KAAKE,QAAS,GAAEjB,EAAQgB,oBAAqB,IAEjEE,WAAW,mCAAoC,IAE/CA,WAAW,sBAAuB,IAClCA,WAAW,iBAAkB,KAElC,IAAK,MAAMb,KAAOE,OAAOI,KAAKX,GAAU,CACtC,MAAMmB,EAAWd,EAAIe,eAEnBD,EAASE,WAAW,SACpBF,EAASE,WAAW,UACpBF,EAASE,WAAW,WACP,gBAAbF,GACa,aAAbA,WAEOnB,EAAQK,EAEnB,CACF"}
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 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. Note it does not assign them in `process.env`.\n * */\nexport function readEnvironmentVariables(\n argv: EnvReaderOptions,\n cwd: string,\n cacheEnabled = true\n): Record<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.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);\n }\n\n let envVars: Record<string, string> = {};\n const orgEnvVars = { ...process.env };\n for (const envPath of envPaths) {\n envVars = { ...readEnvFile(path.join(cwd, envPath), cacheEnabled), ...envVars };\n let count = 0;\n for (const [key, value] of Object.entries(envVars)) {\n if (orgEnvVars[key] !== value) {\n orgEnvVars[key] = value;\n count++;\n }\n }\n if (count > 0) {\n console.info(`Read ${count} environment variables:`, envPath);\n }\n }\n\n if (argv.checkEnv) {\n const exampleKeys = Object.keys(readEnvFile(path.join(cwd, argv.checkEnv), cacheEnabled) || {});\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 envVars;\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 cacheEnabled = true\n): Record<string, string | undefined> {\n const envVars = readEnvironmentVariables(argv, cwd, cacheEnabled);\n Object.assign(process.env, envVars);\n return envVars;\n}\n\nconst cachedEnvVars = new Map<string, Record<string, string>>();\n\nfunction readEnvFile(filePath: string, cacheEnabled = true): Record<string, string> {\n const cached = cacheEnabled && cachedEnvVars.get(filePath);\n if (cached) return cached;\n\n const parsed = config({ path: path.resolve(filePath), processEnv: {} }).parsed ?? {};\n if (cacheEnabled) {\n cachedEnvVars.set(filePath, parsed);\n }\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 delete envVars[key];\n }\n }\n}\n"],"names":["yargsOptionsBuilderForEnv","env","description","type","default","verbose","alias","readEnvironmentVariables","argv","cwd","cacheEnabled","envPaths","map","envPath","path","resolve","toString","cascade","cascadeEnv","cascadeNodeEnv","process","NODE_ENV","autoCascadeEnv","WB_ENV","undefined","length","push","join","includeRootEnv","rootPath","fs","existsSync","flatMap","relative","console","info","envVars","orgEnvVars","readEnvFile","count","key","value","Object","entries","checkEnv","missingKeys","keys","filter","Error","readAndApplyEnvironmentVariables","assign","cachedEnvVars","Map","filePath","cached","get","parsed","config","processEnv","set","removeNpmAndYarnEnvironmentVariables","PATH","BERRY_BIN_FOLDER","replace","replaceAll","upperKey","toUpperCase","startsWith"],"mappings":"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"}
package/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";var e=require("./env.cjs"),s=require("./exists.cjs"),r=require("./hash.cjs"),a=require("./spawn.cjs");exports.loadEnvironmentVariables=e.loadEnvironmentVariables,exports.removeNpmAndYarnEnvironmentVariables=e.removeNpmAndYarnEnvironmentVariables,exports.yargsOptionsBuilderForEnv=e.yargsOptionsBuilderForEnv,exports.existsAsync=s.existsAsync,exports.calculateHashFromFiles=r.calculateHashFromFiles,exports.canSkipSeed=r.canSkipSeed,exports.updateHashFromFiles=r.updateHashFromFiles,exports.spawnAsync=a.spawnAsync;
1
+ "use strict";var e=require("./env.cjs"),r=require("./exists.cjs"),s=require("./hash.cjs"),n=require("./spawn.cjs");exports.readAndApplyEnvironmentVariables=e.readAndApplyEnvironmentVariables,exports.readEnvironmentVariables=e.readEnvironmentVariables,exports.removeNpmAndYarnEnvironmentVariables=e.removeNpmAndYarnEnvironmentVariables,exports.yargsOptionsBuilderForEnv=e.yargsOptionsBuilderForEnv,exports.existsAsync=r.existsAsync,exports.calculateHashFromFiles=s.calculateHashFromFiles,exports.canSkipSeed=s.canSkipSeed,exports.updateHashFromFiles=s.updateHashFromFiles,exports.spawnAsync=n.spawnAsync;
2
2
  //# sourceMappingURL=index.cjs.map
package/dist/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
- export { loadEnvironmentVariables, removeNpmAndYarnEnvironmentVariables, yargsOptionsBuilderForEnv } from './env.js';
1
+ export { readEnvironmentVariables, readAndApplyEnvironmentVariables, removeNpmAndYarnEnvironmentVariables, yargsOptionsBuilderForEnv, } from './env.js';
2
+ export type { EnvReaderOptions } from './env.js';
2
3
  export { existsAsync } from './exists.js';
3
4
  export { calculateHashFromFiles, canSkipSeed, updateHashFromFiles } from './hash.js';
4
5
  export { spawnAsync } from './spawn.js';
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- export{loadEnvironmentVariables,removeNpmAndYarnEnvironmentVariables,yargsOptionsBuilderForEnv}from"./env.js";export{existsAsync}from"./exists.js";export{calculateHashFromFiles,canSkipSeed,updateHashFromFiles}from"./hash.js";export{spawnAsync}from"./spawn.js";
1
+ export{readAndApplyEnvironmentVariables,readEnvironmentVariables,removeNpmAndYarnEnvironmentVariables,yargsOptionsBuilderForEnv}from"./env.js";export{existsAsync}from"./exists.js";export{calculateHashFromFiles,canSkipSeed,updateHashFromFiles}from"./hash.js";export{spawnAsync}from"./spawn.js";
2
2
  //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@willbooster/shared-lib-node",
3
- "version": "4.1.2",
3
+ "version": "5.0.0",
4
4
  "license": "Apache-2.0",
5
5
  "author": "WillBooster Inc.",
6
6
  "sideEffects": false,
@@ -42,19 +42,19 @@
42
42
  "devDependencies": {
43
43
  "@types/eslint": "8.44.6",
44
44
  "@types/micromatch": "4.0.4",
45
- "@types/node": "20.8.7",
46
- "@typescript-eslint/eslint-plugin": "6.8.0",
47
- "@typescript-eslint/parser": "6.8.0",
48
- "@willbooster/eslint-config-ts": "10.5.0",
49
- "@willbooster/prettier-config": "9.1.1",
50
- "build-ts": "11.0.4",
45
+ "@types/node": "20.8.9",
46
+ "@typescript-eslint/eslint-plugin": "6.9.0",
47
+ "@typescript-eslint/parser": "6.9.0",
48
+ "@willbooster/eslint-config-ts": "10.5.1",
49
+ "@willbooster/prettier-config": "9.1.2",
50
+ "build-ts": "11.0.9",
51
51
  "eslint": "8.52.0",
52
52
  "eslint-config-prettier": "9.0.0",
53
53
  "eslint-import-resolver-typescript": "3.6.1",
54
- "eslint-plugin-import": "2.28.1",
54
+ "eslint-plugin-import": "2.29.0",
55
55
  "eslint-plugin-sort-class-members": "1.19.0",
56
56
  "eslint-plugin-sort-destructure-keys": "1.5.0",
57
- "eslint-plugin-unicorn": "48.0.1",
57
+ "eslint-plugin-unicorn": "49.0.0",
58
58
  "lint-staged": "15.0.2",
59
59
  "micromatch": "4.0.5",
60
60
  "prettier": "3.0.3",