Skip to content

Raise the minimum VS Code version to 1.110 - #57

Merged
dduugg merged 1 commit into
mainfrom
raise-vscode-engine
Sep 29, 2026
Merged

dduugg merged 1 commit into
mainfrom
raise-vscode-engine

Conversation

@dduugg

@dduugg dduugg commented Sep 29, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Follow-up to #55. npx vsce package failed twice before it could produce a .vsix, so the tag-triggered publish.yml couldn't have succeeded.

  • Minimum VS Code version: engines.vscode goes from ^1.67.0 to ^1.110.0. The extension compiles against @types/vscode ^1.110.0, and vsce won't package an extension that claims to support older VS Code versions than its API types. The CHANGELOG notes the new minimum under Unreleased.
  • Packaging config: package.json had a files list, and the repo also had the .vscodeignore from the original yo code scaffold. vsce refuses to combine the two. This keeps files, narrowed to dist/extension.js, CHANGELOG.md and LICENSE, and deletes .vscodeignore.
    • vsce adds package.json and the README itself.
    • The README's relative images/hero.gif link is rewritten to the GitHub URL, so images/ doesn't need to ship.
    • Leaving out dist/*.map and dist/*.d.ts keeps what the .vscodeignore used to exclude.

Test plan

  • npm ci, npm t, then npx vsce package: packaged 7 files, 20 KB (manifest, package.json, README, CHANGELOG, LICENSE, dist/extension.js).
  • Fresh Eyes local review: no findings.
  • CI passes on this PR.

@types/vscode is ^1.110.0, and vsce won't package an extension whose
engines.vscode allows older versions than the API it compiles against,
so packaging failed with engines.vscode at ^1.67.0.

Packaging also failed because package.json had a files list alongside
the .vscodeignore from the original yo code scaffold, and vsce won't
combine the two. This keeps the files allowlist, narrowed to the bundle,
CHANGELOG and LICENSE (vsce adds package.json and the README itself),
and drops .vscodeignore. The README's relative image link is rewritten
to the GitHub URL, so images/ doesn't need to ship. npx vsce package now
produces a 7-file, 20 KB .vsix.
@dduugg
dduugg requested a review from a team as a code owner September 29, 2026 21:14
@dduugg
dduugg merged commit 4f79a26 into main Sep 29, 2026
7 checks passed
@dduugg
dduugg deleted the raise-vscode-engine branch September 29, 2026 21:17
@dduugg dduugg mentioned this pull request Sep 30, 2026
6 tasks done
dduugg added a commit that referenced this pull request Sep 30, 2026
* Add npm to Dependabot config

Group minor and patch updates into one monthly PR with a 7-day cooldown,
matching the github-actions entry. Majors arrive as separate PRs so
each can be migrated on its own.

Use the increase-if-necessary versioning strategy so updates that fit
the existing range change only package-lock.json. The default strategy
raises every range, including @types/vscode past engines.vscode, and
vsce refuses to package when the @types/vscode range exceeds
engines.vscode (see #57). CI doesn't run vsce, so that would first fail
at publish time.

* Update dependencies within their existing ranges

Run npm update, which moves every package to the newest version its
range allows, including transitive dependencies. No ranges in
package.json change. Notable direct updates:

- @types/node 25.5.0 -> 25.9.8
- @types/vscode 1.110.0 -> 1.138.0
- @typescript-eslint/* 8.57.2 -> 8.71.0
- eslint 10.1.0 -> 10.11.0
- jest 30.3.0 -> 30.5.2, ts-jest 29.4.6 -> 29.4.14
- prettier 3.8.1 -> 3.9.9
- ts-loader 9.5.4 -> 9.6.2
- webpack 5.105.4 -> 5.111.1, webpack-cli 7.0.2 -> 7.2.3

webpack 5.111 replaces terser-webpack-plugin with webpack's own
minimizer-webpack-plugin, and jest-haste-map 30.5 adds @parcel/watcher.

* Upgrade TypeScript to 6.0 and enable strict mode

TypeScript 7 is out, but typescript-eslint supports only >=4.8.4 <6.1.0,
so pin ~6.0.3, the latest release it supports.

TypeScript 6 changes two defaults that matter here:

- types defaults to [], so the declarations in @types/node and
  @types/jest (setTimeout, describe, and built-in modules like path and
  fs) are no longer loaded implicitly. List both. @types/vscode and
  @types/js-yaml still resolve through their imports.
- strict defaults to true. Set it explicitly in place of the narrower
  strictNullChecks. It reports only catch variables typed as unknown,
  at the two catch blocks that read .message. Add an errorMessage()
  helper: for the Error and stderr-string rejections those blocks see,
  it logs the same text as before.

* Upgrade js-yaml to 5

js-yaml 5 ships its own type declarations, so drop @types/js-yaml. The
namespace import and yaml.load() call keep working unchanged.

Its load() now defaults to the YAML 1.2 core schema, which no longer
resolves `<<` merge keys. A team config that inherits
slack.room_for_humans through `<<: *defaults` would lose its Slack
action, so load team configs with CORE_SCHEMA plus mergeTag, the
migration guide's way to restore v4's merge handling. The other v5
changes don't affect this call: load() now throws on empty input, and
getSlackChannel() already returns undefined when load() throws.

* Regenerate package-lock.json with npm 11.19.0

CI's Node 24.21 ships npm 11.19.0, whose npm ci rejected the lockfile
written by npm 11.6.1 as out of sync: it was missing top-level
@emnapi/core and @emnapi/runtime. They are optional peers of
@napi-rs/wasm-runtime, part of unrs-resolver's WebAssembly fallback,
so nothing failed locally.

npm install under 11.19.0 adds those two entries. The other changes
are peer flags that 11.19.0 records differently. No other package
versions change, and both npm 11.6.1 and 11.19.0 now accept the
lockfile in npm ci.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

1 participant