diff --git a/CHANGELOG.md b/CHANGELOG.md index dd9b356fb..06a8bed65 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -31,6 +31,9 @@ Versioning](https://semver.org/spec/v2.0.0.html). proxies used by some third-party runners. - `WIREIT_PARALLEL`, `WIREIT_WATCH_POLL_MS`, and `WIREIT_MAX_OPEN_FILES` now reject any value that is not a positive integer, such as `2abc` or `1.5`. +- An `"env"` setting that is a non-empty array, such as `["FOO"]`, now reports + `Expected an object` instead of crashing Wireit and the VSCode extension with + an internal error. ### Changed diff --git a/src/analyzer.ts b/src/analyzer.ts index d5ce866c4..5fb99ecb9 100644 --- a/src/analyzer.ts +++ b/src/analyzer.ts @@ -1355,6 +1355,7 @@ export class Analyzer { }, }, }); + return {}; } if (envNode.children === undefined) { return {}; diff --git a/src/test/errors-analysis.test.ts b/src/test/errors-analysis.test.ts index 0f35fb7a3..7ce29d6ab 100644 --- a/src/test/errors-analysis.test.ts +++ b/src/test/errors-analysis.test.ts @@ -2097,6 +2097,39 @@ void test( }), ); +void test( + 'env must be an object even when it has entries', + rigTest(async ({rig}) => { + await rig.write({ + 'package.json': { + scripts: { + a: 'wireit', + }, + wireit: { + a: { + command: 'true', + env: ['FOO'], + }, + }, + }, + }); + const result = rig.exec('npm run a'); + const done = await result.exit; + assert.equal(done.code, 1); + checkScriptOutput( + done.stderr, + ` + ❌ package.json:8:14 Expected an object + "env": [ + ~ + "FOO" + ~~~~~~~~~~~~~ + ] + ~~~~~~~`, + ); + }), +); + void test( 'env entry value must be a string or object', rigTest(async ({rig}) => {