* Get parsed env variables from `.env` files * @private * @param {InputFileSystem} fs input file system * @param {string} dir dir to load `.env` files * @param {string} mode mode * @returns {Promise<{ parsed: Env, fileDependencies: string[], missingDependencies: string[] }>} parsed env var
(fs, dir, mode)
| 316 | * @returns {Promise<{ parsed: Env, fileDependencies: string[], missingDependencies: string[] }>} parsed env variables and dependencies |
| 317 | */ |
| 318 | async _getParsed(fs, dir, mode) { |
| 319 | /** @type {string[]} */ |
| 320 | const fileDependencies = []; |
| 321 | /** @type {string[]} */ |
| 322 | const missingDependencies = []; |
| 323 | |
| 324 | // Get env files to load |
| 325 | const envFiles = this._getEnvFilesForMode(fs, dir, mode); |
| 326 | |
| 327 | // Read all files |
| 328 | const contents = await Promise.all( |
| 329 | envFiles.map((filePath) => |
| 330 | this._loadFile(fs, filePath).then( |
| 331 | (content) => { |
| 332 | fileDependencies.push(filePath); |
| 333 | return content; |
| 334 | }, |
| 335 | () => { |
| 336 | // File doesn't exist, add to missingDependencies (this is normal) |
| 337 | missingDependencies.push(filePath); |
| 338 | return ""; |
| 339 | } |
| 340 | ) |
| 341 | ) |
| 342 | ); |
| 343 | |
| 344 | // Parse all files and merge (later files override earlier ones) |
| 345 | // Similar to Vite's implementation |
| 346 | const parsed = /** @type {Env} */ (Object.create(null)); |
| 347 | |
| 348 | for (const content of contents) { |
| 349 | if (!content) continue; |
| 350 | const entries = parse(content); |
| 351 | for (const key in entries) { |
| 352 | parsed[key] = entries[key]; |
| 353 | } |
| 354 | } |
| 355 | |
| 356 | return { parsed, fileDependencies, missingDependencies }; |
| 357 | } |
| 358 | |
| 359 | /** |
| 360 | * Loads the provided compiler. |