Patch Changes
-
#538
2022ef7- feat: allow 3rd party pluginsThird-party (non-
@varlock/*) plugins are now supported:- JavaScript projects: Any plugin installed in
node_modulesviapackage.jsonis automatically trusted and can be used without restriction. - Standalone binary: When downloading a third-party plugin from npm for the first time, Varlock will prompt for interactive confirmation. Once confirmed and cached, subsequent runs skip the prompt. Non-interactive environments (CI/piped) will receive a clear error message instructing the user to confirm interactively or install via
package.json.
- JavaScript projects: Any plugin installed in
-
#534
74752a3- Add version mismatch detection between standalone binary and local node_modules installWhen running the standalone binary (installed via homebrew/curl), varlock now checks if a different version is installed in the project's node_modules. If a version mismatch is detected, a warning is displayed suggesting users update the binary or use the locally installed version instead. This helps prevent confusing errors caused by running mismatched versions.
-
#560
0ea6641- Addvarlock explain ITEM_KEYcommand and override indicators invarlock loadoutput.Override indicators: When a config item's value comes from a
process.envoverride rather than its file-based definitions,varlock loadnow shows a yellow indicator on that item. This helps users understand why their resolver functions (e.g.op()) are not being called.varlock explaincommand: Shows detailed information about how a single config item is resolved, including all definitions and sources in priority order, which source is active, whether a process.env override is in effect (and what would be used without it), decorators, type info, and documentation links. -
#553
6ab2d31- Fix diamond dependency handling when the same schema is imported via multiple paths. Previously, duplicate imports caused plugin init decorators to run twice ("Instance already initialized" error). Now, duplicate imports create lightweightImportAliasSourcenodes that appear at the correct precedence position without re-initializing the source. This correctly handles different importKeys subsets across import sites and preserves override semantics matching non-deduplicated behavior. Also addstypefield to serialized source entries for easier filtering. -
#558
01c9a6a- Fix plugin resolution failure in monorepo workspaces where.gitand the lockfile coexist in the same directory.detectWorkspaceInfo()was checking for a.gitdirectory after moving to the parent, so in the standard monorepo layout (monorepo-root/.git+monorepo-root/bun.lock) the root was never scanned and the lockfile was never found. Moving the.gitboundary check to before moving up ensures the git-root directory is always scanned first. -
#547
1a4b0cf- Fix binary resolution in monorepos whencwddiffers from the package root.When importing
varlock/auto-load(e.g. from aplaywright.config.tsin a monorepo sub-package), VS Code and similar tools may setprocess.cwd()to the workspace root rather than the sub-package directory. This causedexecSyncVarlockto search for thevarlockbinary starting at the workspace root and fail to find it when it was only installed in a sub-package'snode_modules/.bin.Two fixes are applied:
-
execSyncVarlocknow accepts acallerDiroption. When provided, the binary search walks up fromcallerDirbefore falling back toprocess.cwd().auto-load.tspassesimport.meta.dirnameso the search always starts from inside the varlock package itself, which is already in the correct sub-package'snode_modules. -
The walk-up logic no longer throws immediately when it finds a
node_modules/.bindirectory that does not contain varlock. It now continues walking up, allowing the search to find varlock installed at a higher or lower level of a monorepo.
-
-
#542
02e82d0- Fix Vitest workspace projects in monorepos: when running Vitest from the monorepo root using theprojectsconfig, varlock now correctly resolves.env.schemaand.envfiles from each child package's directory instead of only looking in the monorepo root. -
#550
0c27ed1- Fix@generateTypesnot creating variables when using a custom path withvarlock typegen --path <file>When a schema file with an environment-qualifier-like name (e.g.
.env.infra.schema) was passed as the explicit entry point via--path, its variables were being excluded from type generation. The filename was parsed such thatinfrawas treated as an environment name (applyForEnv='infra'), causing the data source to be marked as environment-specific and all its variables to be filtered out.The fix ensures that a file loaded as the root entry point (no parent data source) is never treated as environment-specific, even if its filename contains an environment qualifier.