Skip to content

fix: preserve base env when optional override fails and reset init state on clean()#143

Merged
java-james merged 1 commit intomasterfrom
jc/fix-discarded-base-file-when-override-fails
Apr 21, 2026
Merged

fix: preserve base env when optional override fails and reset init state on clean()#143
java-james merged 1 commit intomasterfrom
jc/fix-discarded-base-file-when-override-fails

Conversation

@java-james
Copy link
Copy Markdown
Owner

@java-james java-james commented Apr 21, 2026

Summary

  • Fix A: load(isOptional: true) no longer discards a successfully loaded base .env file when an override file is missing or empty. The single try/catch` wrapping both loads has been replaced with independent error handling per source file.
  • Fix B: clean() now resets isInitialized to false, so the instance no longer reports as initialized with an empty map after clearing.
  • Removed the _getLinesFromOverride helper (logic inlined into load()).

Motivation

When using load(isOptional: true) with override files, a missing or empty override would silently zero out the successfully loaded base file variables — a data-loss bug. Four separate issues reported this class of problem.

Separately, clean() only cleared the env map but left isInitialized == true, creating a zombie state where env returned an empty map instead of throwing NotInitializedError.

Fixes #101, #125

Breaking change

clean() now resets initialization state. Code that calls clean() then accesses dotenv.env without reloading will now throw NotInitializedError. This corrects buggy behavior — the previous pattern was never intentional or documented.

Test plan

  • Existing 37 tests pass unchanged
  • New: clean() sets isInitialized to false
  • New: env throws NotInitializedError after clean()
  • New: loadFromString() re-initializes correctly after clean()
  • New: valid base + empty override with isOptional: true preserves base vars
  • New: empty base + valid override with isOptional: true preserves override vars
  • New: isOptional: false still throws with empty base even if override is valid
  • flutter analyze clean (no new warnings)

@java-james java-james merged commit 833fcba into master Apr 21, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

"EmptyEnvFileError" exception is fired when "isOptional" argument is passed

1 participant