@expo/env 0.0.4 → 0.0.5

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/build/env.d.ts CHANGED
@@ -6,8 +6,14 @@ type LoadOptions = {
6
6
  export declare function isEnabled(): boolean;
7
7
  export declare function createControlledEnvironment(): {
8
8
  load: (projectRoot: string, options?: LoadOptions) => NodeJS.ProcessEnv;
9
- get: (projectRoot: string, options?: LoadOptions) => Record<string, string | undefined>;
10
- _getForce: (projectRoot: string, options?: LoadOptions) => Record<string, string | undefined>;
9
+ get: (projectRoot: string, options?: LoadOptions) => {
10
+ env: Record<string, string | undefined>;
11
+ files: string[];
12
+ };
13
+ _getForce: (projectRoot: string, options?: LoadOptions) => {
14
+ env: Record<string, string | undefined>;
15
+ files: string[];
16
+ };
11
17
  };
12
18
  export declare function getFiles(mode: string | undefined, { silent }?: Pick<LoadOptions, 'silent'>): string[];
13
19
  export {};
package/build/env.js CHANGED
@@ -65,11 +65,14 @@ function isEnabled() {
65
65
  function createControlledEnvironment() {
66
66
  const IS_DEBUG = require('debug').enabled('expo:env');
67
67
  let userDefinedEnvironment = undefined;
68
- let memoEnvironment = undefined;
68
+ let memo = undefined;
69
69
  function _getForce(projectRoot, options = {}) {
70
70
  if (!isEnabled()) {
71
71
  debug(`Skipping .env files because EXPO_NO_DOTENV is defined`);
72
- return {};
72
+ return {
73
+ env: {},
74
+ files: []
75
+ };
73
76
  }
74
77
  if (!userDefinedEnvironment) {
75
78
  userDefinedEnvironment = {
@@ -125,20 +128,26 @@ function createControlledEnvironment() {
125
128
  if (!loadedEnvFiles.length) {
126
129
  debug(`No environment variables loaded from .env files.`);
127
130
  }
128
- return parsed;
131
+ return {
132
+ env: parsed,
133
+ files: loadedEnvFiles
134
+ };
129
135
  }
130
136
 
131
137
  /** Get the environment variables without mutating the environment. This returns memoized values unless the `force` property is provided. */
132
138
  function get(projectRoot, options = {}) {
133
139
  if (!isEnabled()) {
134
140
  debug(`Skipping .env files because EXPO_NO_DOTENV is defined`);
135
- return {};
141
+ return {
142
+ env: {},
143
+ files: []
144
+ };
136
145
  }
137
- if (!options.force && memoEnvironment) {
138
- return memoEnvironment;
146
+ if (!options.force && memo) {
147
+ return memo;
139
148
  }
140
- memoEnvironment = _getForce(projectRoot, options);
141
- return memoEnvironment;
149
+ memo = _getForce(projectRoot, options);
150
+ return memo;
142
151
  }
143
152
 
144
153
  /** Load environment variables from .env files and mutate the current `process.env` with the results. */
@@ -147,10 +156,17 @@ function createControlledEnvironment() {
147
156
  debug(`Skipping .env files because EXPO_NO_DOTENV is defined`);
148
157
  return process.env;
149
158
  }
150
- const env = get(projectRoot, options);
159
+ const envInfo = get(projectRoot, options);
160
+ if (!options.force) {
161
+ const keys = Object.keys(envInfo.env);
162
+ if (keys.length) {
163
+ console.log(_chalk().default.gray('env: load', envInfo.files.map(file => path().basename(file)).join(' ')));
164
+ console.log(_chalk().default.gray('env: export', keys.join(' ')));
165
+ }
166
+ }
151
167
  process.env = {
152
168
  ...process.env,
153
- ...env
169
+ ...envInfo.env
154
170
  };
155
171
  return process.env;
156
172
  }
package/build/env.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"env.js","names":["_chalk","data","_interopRequireDefault","require","dotenv","_interopRequireWildcard","_dotenvExpand","fs","_getenv","path","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","debug","isEnabled","boolish","createControlledEnvironment","IS_DEBUG","enabled","userDefinedEnvironment","undefined","memoEnvironment","_getForce","projectRoot","options","process","env","dotenvFiles","getFiles","NODE_ENV","loadedEnvFiles","parsed","forEach","dotenvFile","absoluteDotenvFile","resolve","existsSync","results","expand","config","override","push","keys","_userDefinedEnvironme","error","Error","console","message","length","force","load","mode","silent","chalk","red","includes","filter","Boolean"],"sources":["../src/env.ts"],"sourcesContent":["/**\n * Copyright © 2023 650 Industries.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport chalk from 'chalk';\nimport * as dotenv from 'dotenv';\nimport { expand } from 'dotenv-expand';\nimport * as fs from 'fs';\nimport { boolish } from 'getenv';\nimport * as path from 'path';\n\ntype LoadOptions = {\n silent?: boolean;\n force?: boolean;\n};\n\nconst debug = require('debug')('expo:env') as typeof console.log;\n\nexport function isEnabled(): boolean {\n return !boolish('EXPO_NO_DOTENV', false);\n}\n\nexport function createControlledEnvironment() {\n const IS_DEBUG = require('debug').enabled('expo:env');\n\n let userDefinedEnvironment: NodeJS.ProcessEnv | undefined = undefined;\n let memoEnvironment: NodeJS.ProcessEnv | undefined = undefined;\n\n function _getForce(\n projectRoot: string,\n options: LoadOptions = {}\n ): Record<string, string | undefined> {\n if (!isEnabled()) {\n debug(`Skipping .env files because EXPO_NO_DOTENV is defined`);\n return {};\n }\n\n if (!userDefinedEnvironment) {\n userDefinedEnvironment = { ...process.env };\n }\n\n // https://github.com/bkeepers/dotenv#what-other-env-files-can-i-use\n const dotenvFiles = getFiles(process.env.NODE_ENV, options);\n\n const loadedEnvFiles: string[] = [];\n const parsed: dotenv.DotenvParseOutput = {};\n\n // Load environment variables from .env* files. Suppress warnings using silent\n // if this file is missing. dotenv will never modify any environment variables\n // that have already been set. Variable expansion is supported in .env files.\n // https://github.com/motdotla/dotenv\n // https://github.com/motdotla/dotenv-expand\n dotenvFiles.forEach((dotenvFile) => {\n const absoluteDotenvFile = path.resolve(projectRoot, dotenvFile);\n if (!fs.existsSync(absoluteDotenvFile)) {\n return;\n }\n try {\n const results = expand(\n dotenv.config({\n debug: IS_DEBUG,\n path: absoluteDotenvFile,\n // We will handle overriding ourselves to allow for HMR.\n override: true,\n })\n );\n if (results.parsed) {\n loadedEnvFiles.push(absoluteDotenvFile);\n debug(`Loaded environment variables from: ${absoluteDotenvFile}`);\n\n for (const key of Object.keys(results.parsed || {})) {\n if (\n typeof parsed[key] === 'undefined' &&\n // Custom override logic to prevent overriding variables that\n // were set before the CLI process began.\n typeof userDefinedEnvironment?.[key] === 'undefined'\n ) {\n parsed[key] = results.parsed[key];\n }\n }\n } else {\n debug(`Failed to load environment variables from: ${absoluteDotenvFile}`);\n }\n } catch (error: unknown) {\n if (error instanceof Error) {\n console.error(\n `Failed to load environment variables from ${absoluteDotenvFile}: ${error.message}`\n );\n } else {\n throw error;\n }\n }\n });\n\n if (!loadedEnvFiles.length) {\n debug(`No environment variables loaded from .env files.`);\n }\n\n return parsed;\n }\n\n /** Get the environment variables without mutating the environment. This returns memoized values unless the `force` property is provided. */\n function get(projectRoot: string, options: LoadOptions = {}): Record<string, string | undefined> {\n if (!isEnabled()) {\n debug(`Skipping .env files because EXPO_NO_DOTENV is defined`);\n return {};\n }\n if (!options.force && memoEnvironment) {\n return memoEnvironment;\n }\n memoEnvironment = _getForce(projectRoot, options);\n return memoEnvironment;\n }\n\n /** Load environment variables from .env files and mutate the current `process.env` with the results. */\n function load(projectRoot: string, options: LoadOptions = {}) {\n if (!isEnabled()) {\n debug(`Skipping .env files because EXPO_NO_DOTENV is defined`);\n return process.env;\n }\n\n const env = get(projectRoot, options);\n process.env = { ...process.env, ...env };\n return process.env;\n }\n\n return {\n load,\n get,\n _getForce,\n };\n}\n\nexport function getFiles(\n mode: string | undefined,\n { silent = false }: Pick<LoadOptions, 'silent'> = {}\n): string[] {\n if (!isEnabled()) {\n debug(`Skipping .env files because EXPO_NO_DOTENV is defined`);\n return [];\n }\n\n if (!mode) {\n if (silent) {\n debug('NODE_ENV is not defined, proceeding without mode-specific .env');\n } else {\n console.error(\n chalk.red(\n 'The NODE_ENV environment variable is required but was not specified. Ensure the project is bundled with Expo CLI or NODE_ENV is set.'\n )\n );\n console.error(chalk.red('Proceeding without mode-specific .env'));\n }\n }\n\n if (mode && !['development', 'test', 'production'].includes(mode)) {\n throw new Error(\n `Environment variable \"NODE_ENV=${mode}\" is invalid. Valid values are \"development\", \"test\", and \"production`\n );\n }\n\n if (!mode) {\n // Support environments that don't respect NODE_ENV\n return [`.env.local`, '.env'];\n }\n // https://github.com/bkeepers/dotenv#what-other-env-files-can-i-use\n const dotenvFiles = [\n `.env.${mode}.local`,\n // Don't include `.env.local` for `test` environment\n // since normally you expect tests to produce the same\n // results for everyone\n mode !== 'test' && `.env.local`,\n `.env.${mode}`,\n '.env',\n ].filter(Boolean) as string[];\n\n return dotenvFiles;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"env.js","names":["_chalk","data","_interopRequireDefault","require","dotenv","_interopRequireWildcard","_dotenvExpand","fs","_getenv","path","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","debug","isEnabled","boolish","createControlledEnvironment","IS_DEBUG","enabled","userDefinedEnvironment","undefined","memo","_getForce","projectRoot","options","env","files","process","dotenvFiles","getFiles","NODE_ENV","loadedEnvFiles","parsed","forEach","dotenvFile","absoluteDotenvFile","resolve","existsSync","results","expand","config","override","push","keys","_userDefinedEnvironme","error","Error","console","message","length","force","load","envInfo","log","chalk","gray","map","file","basename","join","mode","silent","red","includes","filter","Boolean"],"sources":["../src/env.ts"],"sourcesContent":["/**\n * Copyright © 2023 650 Industries.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport chalk from 'chalk';\nimport * as dotenv from 'dotenv';\nimport { expand } from 'dotenv-expand';\nimport * as fs from 'fs';\nimport { boolish } from 'getenv';\nimport * as path from 'path';\n\ntype LoadOptions = {\n silent?: boolean;\n force?: boolean;\n};\n\nconst debug = require('debug')('expo:env') as typeof console.log;\n\nexport function isEnabled(): boolean {\n return !boolish('EXPO_NO_DOTENV', false);\n}\n\nexport function createControlledEnvironment() {\n const IS_DEBUG = require('debug').enabled('expo:env');\n\n let userDefinedEnvironment: NodeJS.ProcessEnv | undefined = undefined;\n let memo: { env: NodeJS.ProcessEnv; files: string[] } | undefined = undefined;\n\n function _getForce(\n projectRoot: string,\n options: LoadOptions = {}\n ): { env: Record<string, string | undefined>; files: string[] } {\n if (!isEnabled()) {\n debug(`Skipping .env files because EXPO_NO_DOTENV is defined`);\n return { env: {}, files: [] };\n }\n\n if (!userDefinedEnvironment) {\n userDefinedEnvironment = { ...process.env };\n }\n\n // https://github.com/bkeepers/dotenv#what-other-env-files-can-i-use\n const dotenvFiles = getFiles(process.env.NODE_ENV, options);\n\n const loadedEnvFiles: string[] = [];\n const parsed: dotenv.DotenvParseOutput = {};\n\n // Load environment variables from .env* files. Suppress warnings using silent\n // if this file is missing. dotenv will never modify any environment variables\n // that have already been set. Variable expansion is supported in .env files.\n // https://github.com/motdotla/dotenv\n // https://github.com/motdotla/dotenv-expand\n dotenvFiles.forEach((dotenvFile) => {\n const absoluteDotenvFile = path.resolve(projectRoot, dotenvFile);\n if (!fs.existsSync(absoluteDotenvFile)) {\n return;\n }\n try {\n const results = expand(\n dotenv.config({\n debug: IS_DEBUG,\n path: absoluteDotenvFile,\n // We will handle overriding ourselves to allow for HMR.\n override: true,\n })\n );\n if (results.parsed) {\n loadedEnvFiles.push(absoluteDotenvFile);\n debug(`Loaded environment variables from: ${absoluteDotenvFile}`);\n\n for (const key of Object.keys(results.parsed || {})) {\n if (\n typeof parsed[key] === 'undefined' &&\n // Custom override logic to prevent overriding variables that\n // were set before the CLI process began.\n typeof userDefinedEnvironment?.[key] === 'undefined'\n ) {\n parsed[key] = results.parsed[key];\n }\n }\n } else {\n debug(`Failed to load environment variables from: ${absoluteDotenvFile}`);\n }\n } catch (error: unknown) {\n if (error instanceof Error) {\n console.error(\n `Failed to load environment variables from ${absoluteDotenvFile}: ${error.message}`\n );\n } else {\n throw error;\n }\n }\n });\n\n if (!loadedEnvFiles.length) {\n debug(`No environment variables loaded from .env files.`);\n }\n\n return { env: parsed, files: loadedEnvFiles };\n }\n\n /** Get the environment variables without mutating the environment. This returns memoized values unless the `force` property is provided. */\n function get(\n projectRoot: string,\n options: LoadOptions = {}\n ): { env: Record<string, string | undefined>; files: string[] } {\n if (!isEnabled()) {\n debug(`Skipping .env files because EXPO_NO_DOTENV is defined`);\n return { env: {}, files: [] };\n }\n if (!options.force && memo) {\n return memo;\n }\n memo = _getForce(projectRoot, options);\n return memo;\n }\n\n /** Load environment variables from .env files and mutate the current `process.env` with the results. */\n function load(projectRoot: string, options: LoadOptions = {}) {\n if (!isEnabled()) {\n debug(`Skipping .env files because EXPO_NO_DOTENV is defined`);\n return process.env;\n }\n\n const envInfo = get(projectRoot, options);\n\n if (!options.force) {\n const keys = Object.keys(envInfo.env);\n if (keys.length) {\n console.log(\n chalk.gray('env: load', envInfo.files.map((file) => path.basename(file)).join(' '))\n );\n console.log(chalk.gray('env: export', keys.join(' ')));\n }\n }\n\n process.env = { ...process.env, ...envInfo.env };\n return process.env;\n }\n\n return {\n load,\n get,\n _getForce,\n };\n}\n\nexport function getFiles(\n mode: string | undefined,\n { silent = false }: Pick<LoadOptions, 'silent'> = {}\n): string[] {\n if (!isEnabled()) {\n debug(`Skipping .env files because EXPO_NO_DOTENV is defined`);\n return [];\n }\n\n if (!mode) {\n if (silent) {\n debug('NODE_ENV is not defined, proceeding without mode-specific .env');\n } else {\n console.error(\n chalk.red(\n 'The NODE_ENV environment variable is required but was not specified. Ensure the project is bundled with Expo CLI or NODE_ENV is set.'\n )\n );\n console.error(chalk.red('Proceeding without mode-specific .env'));\n }\n }\n\n if (mode && !['development', 'test', 'production'].includes(mode)) {\n throw new Error(\n `Environment variable \"NODE_ENV=${mode}\" is invalid. Valid values are \"development\", \"test\", and \"production`\n );\n }\n\n if (!mode) {\n // Support environments that don't respect NODE_ENV\n return [`.env.local`, '.env'];\n }\n // https://github.com/bkeepers/dotenv#what-other-env-files-can-i-use\n const dotenvFiles = [\n `.env.${mode}.local`,\n // Don't include `.env.local` for `test` environment\n // since normally you expect tests to produce the same\n // results for everyone\n mode !== 'test' && `.env.local`,\n `.env.${mode}`,\n '.env',\n ].filter(Boolean) as string[];\n\n return dotenvFiles;\n}\n"],"mappings":"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"}
package/build/index.d.ts CHANGED
@@ -9,7 +9,10 @@ import { getFiles, isEnabled } from './env';
9
9
  declare const get: (projectRoot: string, options?: {
10
10
  silent?: boolean | undefined;
11
11
  force?: boolean | undefined;
12
- }) => Record<string, string | undefined>, load: (projectRoot: string, options?: {
12
+ }) => {
13
+ env: Record<string, string | undefined>;
14
+ files: string[];
15
+ }, load: (projectRoot: string, options?: {
13
16
  silent?: boolean | undefined;
14
17
  force?: boolean | undefined;
15
18
  }) => NodeJS.ProcessEnv;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@expo/env",
3
- "version": "0.0.4",
3
+ "version": "0.0.5",
4
4
  "description": "hydrate environment variables from .env files into process.env",
5
5
  "main": "build/index.js",
6
6
  "scripts": {
@@ -39,5 +39,5 @@
39
39
  "publishConfig": {
40
40
  "access": "public"
41
41
  },
42
- "gitHead": "dce1880a2dc156f551847c78ac8bb4d2420e7ff3"
42
+ "gitHead": "554e8b88a1a5d7f54c67cdb66e928a0adfb8731d"
43
43
  }