Change Log
All notable changes to the “css-js-minifier” extension will be documented in this file.
Check Keep a Changelog for recommendations on how to structure this file.
[Unreleased]
[1.3.4] - 2026-10-28
Added
- A documentation site built with docs-sitekit from
docs/and this changelog, published to GitHub Pages bydocs.ymlon changes tomaster. It lives insite/, which is excluded from the.vsixand from the Markdown lint.
Changed
-
tsconfig.jsonsetsskipLibCheck.@types/sinon22.0.1 imports@sinonjs/fake-timers, which ships no declaration file, sotscstopped insidenode_modules. Our own code is still fully checked. Also bumped@types/sinonto 22.0.1 andwebpackto 5.112.2. -
The minimum VS Code version policy is documented in
AGENTS.md:engines.vscodefollows@types/vscode, and every file that carries the version is listed, so the next Dependabot bump does not fail the six platform builds again. -
Workflows pin
ubuntu-26.04instead ofubuntu-latest. GitHub moves theubuntu-latestlabel to Ubuntu 26.04 from 2026-10-19 (see runner-images#14748), rolling out over several weeks, so jobs would have flipped images at an unpredictable moment. Pinning makes the switch happen in a reviewed PR instead. The requiredTest on ubuntu-latestcheck keeps its name through an explicit label inmaster.yml, so theProtect masterruleset needs no change.ubuntu-24.04-armis untouched. -
Markdown is linted by markdownlint-cli2 and no longer reformatted by Prettier.
*.mdmoves to.prettierignore: Prettier rewrites code spans and fenced content whose exact whitespace is the subject of the surrounding sentence — the issue templates document GitHub’s title prefixes as`[Bug]: `, where the trailing space is literal..markdownlint-cli2.jsoncdisables the rules whose--fixwould silently change meaning (MD029renumbering,MD007re-indenting,MD038code-span spaces,MD028adjacent callouts) and records why for each. 208 findings across the 16 tracked files were resolved — 197 structural ones (blank lines around headings, lists and fences) applied with--fixand verified content-free bygit diff -w, plus 11 untagged fences given an explicittextlanguage. -
format:checkandlint:mdnow run in CI. Neither had anywhere to run:npm testinvokes ESLint throughpretest, butformat:checkwas never wired into a workflow at all — which is how three Markdown files sat unformatted without anyone finding out. A singlequalityjob inmaster.ymlruns both once on Ubuntu rather than three times across the OS matrix, and the Huskypre-commithook gains the Markdown check alongside the existing ESLint one. -
Minimum VS Code version raised to
1.140.0to match the@types/vscodebump to^1.140.0.vscerefuses to package when@types/vscodeis newer thanengines.vscode: it exits 1 with@types/vscode ^1.140.0 greater than engines.vscode ^1.138.0, which failed all six platform builds. Thetest-vscode-minimumworkflow, theVSCODE_VERSIONpin in.github/workflows/master.yml, theVSCODE_VERSIONfallback in.vscode-test.mjs, the README badge andCONTRIBUTING.mdnow all reference1.140.0. Note this raises the floor to a recent stable line (1.140.x at time of writing), so users still on 1.138 or 1.139 stop receiving updates until they upgrade. The floor moved four times within this unreleased cycle, 1.125.0 → 1.134.0 → 1.136.0 → 1.138.0 → 1.140.0, and only the final value is recorded, since nothing shipped in between. -
Bumped
@vscode/test-electronfrom^3.0.0to^3.1.0and restoredmacos-latestto the Insiders CI matrix in.github/workflows/test-vscode-insiders.yml. v3.0.0 could not spawn Electron on darwin-arm64 after downloading the Insiders build (ENOENTonVisual Studio Code - Insiders.app/Contents/MacOS/Electron) because VS Code 1.110+ renamed that binary toCode - Insidersand — from 2026-07-20 — no longer shipped a compatibility symlink. The macOS runner was temporarily removed from the Insiders matrix as a stop-gap. v3.1.0 ships the upstream fix (microsoft/vscode-test#350, authored by the maintainer of this extension, closing microsoft/vscode-test#348 and microsoft/vscode-test#349): the executable is now resolved viaCFBundleExecutableinInfo.plist, with a tier-2 sole-regular-file scan ofContents/MacOS/and a legacyElectronfallback. macOS Insiders coverage is restored. -
Documentation: Migrated all TypeScript doc comments from JSDoc to the TSDoc standard (#182)
- Removed redundant
{type}annotations from@paramand@returns(TypeScript provides these) - Removed non-standard tags (
@fileoverview,@function,@async,@interface,@enum,@module) - Converted module-level docs to
@packageDocumentation - Moved
@sideEffectscontent into@remarkssections - Added
eslint-plugin-tsdocwithtsdoc/syntax: "error"rule for CI enforcement - Created
tsdoc.jsonwith custom block tags (@since,@version,@author)
- Removed redundant
Security
- Closed 6 more Dependabot alerts on transitive dev-only dependencies (
re2js→ 2.8.7 through an override, becausemarkdownlintpins 2.8.6 exactly,serialize-javascript→ 7.1.4,fast-uri→ 3.1.9). None of them ships in the extension. - Closed 6 Dependabot alerts on transitive dev-only dependencies reached through the Markdown tooling and
@vscode/l10n-dev:markdown-it→ 14.3.3 / 15.0.3 (GHSA-gfr2-rv44-r23c, GHSA-vfgh-jcmw-g37q, GHSA-r7fv-28h4-cvq7; quadratic-time rendering and parsing),smol-toml→ 1.9.1 (GHSA-r4xh-jqrq-34v2) andkatex→ 0.18.x (GHSA-238p-pmpm-9mq7). Bumpingmarkdownlint-cli2to^0.24.0brings in the first two;katexneeded anoverridesentry becausemicromark-extension-mathpins it to^0.16.0, a range with no patched release. The shipped production bundle (dist/extension.js=lightningcss+oxc-minify) is unaffected. - Applied non-breaking
npm audit fixto close 2 HIGH-severity alerts on transitive dev-only dependencies:js-yaml→ 4.3.1 (GHSA-5p4m-2wfm-xmqj, quadratic CPU consumption in!!omapresolution, reached viaeslint,mochaandwebpack-cli) andbrace-expansion→ 1.1.18/2.1.4/5.0.9 (GHSA-mh99-v99m-4gvg, GHSA-rgw5-rvv9-x895). Onlypackage-lock.jsonchanged; the shipped production bundle (dist/extension.js=lightningcss+oxc-minify) is unaffected. Remaining 3 LOW alerts (jsdiffviamochavia@vscode/test-cli) still require a breaking downgrade tomocha@11.3.0and stay deferred.
[1.3.3] - 2026-07-22
Fixed
- CRITICAL: Extension activation on Linux, Windows, and Intel Mac (#176, also root-causes #118)
- Since v1.3.0 the published
.vsixon the Marketplace only bundled thedarwin-arm64native bindings forlightningcssandoxc-minify(the two build platforms the maintainer used), and never bundleddetect-libc(a runtime dependency oflightningcsson Linux). Every user on a non-Apple-Silicon machine hitrequire('lightningcss') → Cannot find module 'detect-libc'orrequire('oxc-minify') → Cannot find native bindingduring extension activation. Because both libraries are eagerlyrequire()d at the top ofsrc/services/strategies/local*Minifier.ts, the activation function threw before it could register any command — VS Code then reported “command not found” for every menu / keybinding invocation. This was silent (no toast, no error dialog); users had to open the Extension Host log to see anything. - The fix has two parts: (1)
detect-libcis now declared as a directdependenciesentry inpackage.jsonand explicitly whitelisted in.vscodeignore, sovscebundles it into every.vsix; and (2) the release pipeline moved from a single “universal” build produced on the maintainer’s laptop to a per-platform build matrix that runs on GitHub Actions native runners (macos-15-intel,macos-latest,ubuntu-latest,ubuntu-24.04-arm,windows-latest,windows-11-arm). On each runnernpm cinaturally installs the correct nativeoptionalDependenciesfor that platform,vsce package --target <t>produces a platform-tagged.vsix, and a newscripts/verify-vsix-activation.mjssmoke test extracts the archive and confirmsrequire('lightningcss').transform(...)andrequire('oxc-minify').minifySync(...)both work before uploading the artifact. - Also invalidates the previous root-cause attribution for #118 (the
navigatorglobal /PendingMigrationErrorhypothesis, which was Copilot speculation quoted by the reporter, not a verified diagnosis). Dockerlinux/amd64reproduction against a v1.3.2.vsixproduced the exact “cannot find module” errors documented above — matching #118’s symptoms of silent activation failure and forced downgrade to v1.1.0.
- Since v1.3.0 the published
Fixed (continued from earlier drafts of 1.3.3)
-
Fix “command not found” and hangs on unsaved (untitled) documents (#145)
extension.minifyno longer callsdocument.save()on untitled documents — this previously triggered a blocking “Save As” dialog that made the command appear broken. Minified content is now applied to the editor buffer, letting the user decide when to save.extension.minifyInNewFilenow detects untitled documents and shows a clear, localized error asking the user to save the file first, instead of throwing a crypticEROFS: read-only file systemerror when attempting to write/Untitled-1.- Extension activation was refactored to register commands synchronously at the top of
activate(). This eliminates a race condition where a fast user action could invoke a command before it was registered, surfacing as “command ‘extension.minifyInNewFile’ not found”.
-
Fix runtime translations always displaying in English regardless of the user’s display language (#169)
- Migrated the entire runtime i18n layer to VS Code’s canonical
vscode.l10npattern: everyt()call site now passes the English source string as its first argument (e.g.,t("File type '{0}' is not supported...", type)) instead of a symbolic dotted key. VS Code returns the source string as-is when running under the default English locale and looks it up inbundle.l10n.<locale>.jsonfor every other language — matching the official VS Code l10n sample. The previous implementation never calledvscode.l10n.t()at all — it always resolved keys against an in-memory English bundle — so users running VS Code in Spanish, French, German, Portuguese, Japanese, or Chinese saw every runtime message (validation errors, success notifications, exception dialogs) in English despite the shipped translation bundles. - Simplified
src/utils/l10nHelper.tsdown to a one-line delegate aroundvscode.l10n.t(message, ...args)and removed the activation-timeinitializeEnglishFallback()preload. There is intentionally nobundle.l10n.en.json— English lives in the source code, as the l10n sample recommends. - Regenerated every
l10n/bundle.l10n.<locale>.json(es, fr, de, pt-br, ja, zh-cn) so that keys are the English source strings and values are the localized translations. Translations themselves are preserved verbatim; only the keys changed.l10n/bundle.l10n.jsonis now an identity map suitable for@vscode/l10n-devtooling. - Removed the dead debug helper
getL10nStatus()and the now-obsolete “raw translation key” fallback assertions insrc/test/extension.test.ts. - Cleaned up
activationEventsinpackage.json: removed the auto-generatedonCommand:*entries (deprecated since VS Code 1.74) and the invalidonSaveTextDocument, leaving onlyonLanguage:cssandonLanguage:javascript.
- Migrated the entire runtime i18n layer to VS Code’s canonical
-
Fix
minifyOnSavefailing silently on the first save after VS Code startup (#168)- The pre-1.3.3
activationEventslist did not includeonLanguage:cssoronLanguage:javascript, and itsonSaveTextDocumententry was not a valid activation event (VS Code silently ignored it). As a result the extension did not activate when a user opened a CSS or JS file, and theworkspace.onDidSaveTextDocumentlistener registered insideactivate()did not exist by the time the first save fired. The workaround was to run theMinifycommand once from the Command Palette to force activation. - Fixed as an incidental result of the
activationEventscleanup shipped with #169 — opening a.cssor.jsfile now correctly activates the extension before the user can save. - Added a dedicated regression suite
src/test/activation.test.ts(Activation Events (regression guard for #168)) that fails CI if eitheronLanguage:cssoronLanguage:javascriptis removed frompackage.json, or if the invalidonSaveTextDocument/ deprecatedonCommand:*entries are re-added.
- The pre-1.3.3
Added
- New i18n key
"Please save the file to disk before using 'Minify and Save as New File'. The new minified file needs an existing location to be created next to."across all 6 non-English bundles (es, fr, de, pt-br, ja, zh-cn) to cover the untitled-document guard added in #145. - New Runtime Localization (
vscode.l10n) test suite insrc/test/i18n.test.tsthat guards against issue #169 regressing:- Asserts
t()returns real interpolated text (never a raw translation key) for every known bundle entry. - Verifies placeholder interpolation (
{0},{1}, …) is preserved end-to-end. - Compares
vscode.l10n.bundleagainst the shippedbundle.l10n.<locale>.jsonwhen running under a non-English locale. - Detects accidental “translation bundle is a copy of English” regressions.
- Asserts
.vscode-test.mjsnow honorsVSCODE_LOCALE=<lang>and forwards it as--localeto the test VS Code instance, enabling locale-specific test runs (VSCODE_LOCALE=es npm test,VSCODE_LOCALE=qps-ploc npm test, …). Seedocs/INTERNATIONALIZATION.md.- Standalone Marketplace PAT verification workflow (
.github/workflows/verify-marketplace-auth.yml) — aworkflow_dispatchjob that runsvsce verify-pat miguel-colmenaresand reports the result in the workflow summary. Lets the maintainer confirm at any time thatVSCE_PATis present, unexpired, correctly scoped toMarketplace (Manage)for all accessible organizations, and matches the target publisher — without publishing anything or burning a version number. The full release workflow’spreflightjob runs the same check, so this standalone workflow is a lightweight smoke test to run after rotating the PAT. - Local Git hooks via Husky v9 (
.husky/pre-commit,.husky/commit-msg,.husky/pre-push, installed automatically onnpm cithrough the newpreparescript):pre-commitrunsnpm run lintonsrc/**, and — when the commit modifiespackage.jsonversion— requiresCHANGELOG.mdto be staged in the same commit with a matching## [X.Y.Z]heading. Mirrors the release workflow’s preflight regex exactly, so a bump commit that passes locally is guaranteed to pass in CI.commit-msgenforces Conventional Commits format (feat,fix,docs,style,refactor,perf,test,build,ci,chore,revert) on the subject line, with auto-passthrough forMerge …,Revert …,fixup! …, andsquash! …messages.pre-pushrefuses to push anyrefs/tags/v*. Release tags must originate from the workflow — this prevents a maintainer from accidentally pushing av*tag from their laptop and bypassing the PAT preflight check.
- New
CONTRIBUTING.md— contributor onboarding covering local setup (Node 20+, npm 10+, VS Code 1.125+), development workflow with the VS Code watch tasks, expectations around cross-platform testing (the 6-platform CI matrix handles it, contributors do not need to own six machines), PR checklist, and a brief pointer to the maintainer-only release process. - New
AGENTS.md— agent-oriented reference covering the release invariants (tag immutability + PAT expiration), the dispatch-driven pipeline diagram, the git-hook table with escape hatches, an explanation of why nopre-tagorpre-releasehook exists (Git does not dispatch one;pre-commitbump check +pre-pushtag rejection cover the same ground), the cross-platform CI matrix, and a common-operations cheat sheet. - New “Release Flow” and “Local Git Hooks (Husky)” sections in
.github/copilot-instructions.md— documents the new workflow-driven release flow and the Husky hook policy so AI agents working in this repository operate under the same constraints as human maintainers. - Branch protection ruleset for
master(Protect master, id19564892) — new repository ruleset that requires every change tomasterto arrive via pull request, blocks force-pushes and deletion, and gates merges on four status checks (Test on ubuntu-latest,Test on macos-latest,Test on windows-latest,Analyze (javascript-typescript)from CodeQL).bypass_actorsis empty, so the protection applies to the owner as well — directgit push origin masteris refused for everyone. The four required checks are the ones that always run on every PR tomasterregardless of the paths touched, so docs-only PRs are never blocked by “waiting for a check that never triggered”. SeeAGENTS.md → Branch protectionfor the full rule-by-rule breakdown.
Changed
- Release process now produces six platform-specific
.vsixfiles instead of a single “universal” build, matching thevsce package --target <platform>guidance from the VS Code Extension API docs. Each.vsixis built on its own native GitHub Actions runner and attached to the corresponding GitHub Release automatically by.github/workflows/release.yml. Marketplace serves each user the artifact matching their OS/CPU — no more accidental “one platform’s bindings ship to everyone” (see the Fixed entry for #176). - Marketplace publishing is now fully automated via
workflow_dispatch. The old “push av*tag → CI publishes” model was replaced by a dispatched release workflow whose first job (preflight) validates that the requested version matchespackage.jsononmaster, thatCHANGELOG.mdhas a corresponding## [X.Y.Z]heading, that no tag with the same name already exists, and — critically — that theVSCE_PATsecret is still valid viavsce verify-pat miguel-colmenaresbefore any tag or GitHub Release is created. Only if preflight and the 6-platform build matrix both succeed does a subsequent job create the annotated tag, push it, cut the GitHub Release, and finally runvsce publish --packagePath dist/*.vsix. Combined with the repository’srefs/tags/v*immutability ruleset (blocksdeletionandnon_fast_forward), this makes it impossible to burn a version number on GitHub while failing to reach the Marketplace when the Azure DevOps PAT silently expires. The full runbook is in.github/instructions/publish-update-extension.instructions.md. - Rewrote the “Overview”, “Runtime Message Bundles”, “Runtime Bundle Keys”, “Message Interpolation”, “Implementation Details”, “Translation Pattern”, and “Adding a New Language” sections of
docs/INTERNATIONALIZATION.mdto describe the canonicalvscode.l10nflow (English-as-key), replace outdatedimport * as l10n from '@vscode/l10n'examples with the correctimport { t } from '../utils/l10nHelper'pattern, and add a new “Testing Under a Specific Locale” guide.
Removed
- Removed the legacy pre-test
sleep 20step and theTEST_DELAY_MS/MAX_RETRIESenvironment variables from every.github/workflows/test-vscode-*.ymlworkflow (master.yml,test-vscode-stable.yml,test-vscode-insiders.yml,test-vscode-minimum.yml). These existed to throttle requests against the Toptal minification API, which was removed in v1.3.0 when minification moved fully local via LightningCSS and oxc-minify. - Removed the corresponding rate-limit legacy constants (
TEST_DELAY_MS,MAX_RETRIES,SUITE_DELAY_MS,CONFIG_TEST_DELAY_MS) fromRATE_LIMIT_CONFIGinsrc/test/extension.test.ts, along with the fourafterEach(delayBetweenTests())hooks and the two 30-secondbeforeAll“avoid API rate limiting” waits in theCSS nth-childandKeybindingtest suites. The remaining entries are legitimate UI, filesystem, and Windows-CI stability waits. Total test-suite runtime dropped by roughly one minute.
Security
- Applied non-breaking
npm audit fixto close 6 HIGH-severity Dependabot alerts on transitive dev-only dependencies (fast-uri→ 3.1.3/3.1.4,linkify-it→ 5.0.2,brace-expansion→ 1.1.16/2.1.2/5.0.7). Onlypackage-lock.jsonchanged; the shipped production bundle (dist/extension.js=lightningcss+oxc-minify) is unaffected. Remaining 3 LOW alerts (jsdiffviamochavia@vscode/test-cli) require a breaking upgrade tomocha@12and are deferred to a follow-up PR.
[1.3.2] - 2026-07-08
Fixed
- Fix commands not found when invoked from context menu or explorer (#145)
- Added
onCommand:extension.minifyandonCommand:extension.minifyInNewFiletoactivationEventsinpackage.json - Extension now activates correctly when commands are invoked without a prior save event
- Added
Added
- File explorer context menu support (#145)
- Commands now accept a
uriparameter, enabling minification directly from the file explorer - New
resolveTargetDocument()helper resolves the target document from explorer URI or active editor - New i18n key
commands.openFile.failedacross all 7 supported languages
- Commands now accept a
Changed
- Minimum VS Code version raised to 1.125.0 to match
@types/vscodedependency - Updated
test-vscode-minimumworkflow to test against VS Code 1.125.0 - Added
permissions: contents: readtotest-vscode-minimumworkflow for security hardening
[1.3.1] - 2026-04-28
Fixed
- Fix extension activation failure on VS Code 1.101+ (#118)
- Updated
oxc-minifyfrom v0.127.0 to v0.128.0 to resolvePendingMigrationError: navigator is now a global in nodejs - VS Code 1.101 introduced Electron 35 / Node.js 22 which adds
navigatoras a global, breaking extensions that use it for web environment detection
- Updated
Added
- Output Channel for structured logging (#118)
- Extension now logs activation status to the “CSS & JS Minifier” Output panel
- Shows detailed error messages and stack traces when activation fails
- Users can diagnose issues via Output panel instead of silent failures
Changed
- Minimum VS Code version raised to 1.116.0 to match
@types/vscodedependency - Updated
test-vscode-minimumworkflow to test against VS Code 1.116.0 - Improved activation error handling with user-friendly messages directing to the Output panel
[1.3.0] - 2026-04-09
Added
- Support for
@starting-styleCSS at-rule (#104)- CSS entry animations now work correctly after minification
- Full support for modern CSS features like CSS Nesting, Color Level 5, and more
- New test fixture for
@starting-stylevalidation - Local JavaScript minification using oxc-minify (#108)
- Replaced remote Toptal API with local oxc-minify library (Rust-based, from Oxc/Voidzero ecosystem)
- Fully offline JavaScript minification — no network or API dependency required
- Features: variable mangling, dead code elimination, constant folding, statement joining
- New translation key
minificationService.error.jsLocalacross all 7 languages
Changed
- Migrated CSS minification from clean-css to LightningCSS
- ~60x faster CSS minification (Rust-based parser)
- Better support for modern CSS specifications
- Smaller output sizes with smarter optimizations
- Maintained offline minification capability (no network required)
- Migrated JS minification from Toptal API to oxc-minify
- No network required — works completely offline
- No file size limit or rate limiting
- Synchronous API via
minifySync()for fast processing
- Updated tsconfig.json to include Node.js types explicitly
Fixed
@starting-styleat-rule was being stripped during minification (#104)- This was a limitation of clean-css which had the fix merged but never released
- LightningCSS properly handles all modern CSS at-rules
Removed
- Removed Toptal API dependency for JavaScript minification
- Removed
toptalApiMinifier.tsstrategy (replaced bylocalJsMinifier.ts) - Removed
ApiConfig,HttpRequestConfigtypes (no longer needed) - Removed
TOPTAL_JS_API,HTTP_REQUEST_CONFIG,API_TIMEOUT_MS,MAX_FILE_SIZE_BYTESconstants
Technical
- Replaced
clean-cssv5.3.3 withlightningcssv1.32.0 - Added
oxc-minifyas a production dependency - Removed
@types/clean-cssdev dependency - Removed
CLEAN_CSS_OPTIONSconstant (no longer needed) - Updated
localCssMinifier.tsto use LightningCSStransform()API - Created
localJsMinifier.tswith oxc-minifyminifySync()API minificationService.tsis now fully synchronous- Webpack externals configured for
oxc-minify - Bundle size may increase slightly due to native Rust binaries
[1.2.0] - 2026-02-16
Added
- Local CSS Minification: Replaced remote Toptal CSS API with local clean-css library
- Uses clean-css v5.3.3 with Level 2 optimizations for aggressive yet safe minification
- Provides offline CSS minification without requiring network access
- Built-in statistics support (original size, minified size, efficiency percentage)
- Includes removal of whitespace/comments, rule merging, shorthand optimization, and color optimization
- New translation key
minificationService.error.cssLocalacross all 7 languages
Changed
- Hybrid Minification Architecture: CSS uses local minification, JavaScript continues using Toptal API
- Updated README.md with new minification architecture documentation
- Extension description updated to reflect local CSS minification capability
- Bundle size increased from ~48KB to ~514KB (includes clean-css and source-map dependencies)
Fixed
- Resolved CSS minification failures caused by Toptal API deprecation (502/503 errors, timeouts)
Technical
- Added
clean-cssv5.3.3 as production dependency - Added
@types/clean-cssv4.2.11 as development dependency - New local CSS minifier strategy (
minifyCss()inservices/strategies/localCssMinifier.ts) integrated via theminificationServicefacade - MIT license compatibility maintained
[1.1.0] - 2025-10-17
Added
- Size Reduction Statistics: Display percentage of size reduction and file sizes after minification
- Shows original and minified file sizes in human-readable format (KB or B)
- Calculates and displays percentage of size reduction
- Handles edge cases (no reduction, same size files)
- Works with both in-place minification and new file creation
- New configuration option:
showSizeReduction(default: true)- Allows users to toggle size statistics display on/off
- When disabled, shows traditional success messages
- Internationalization (i18n) Support: Full multi-language support for 7 languages
- 🇺🇸 English (default)
- 🇪🇸 Spanish
- 🇫🇷 French
- 🇩🇪 German
- 🇧🇷 Portuguese (Brazilian)
- 🇯🇵 Japanese
- 🇨🇳 Chinese Simplified
- Runtime message bundles using @vscode/l10n package
- 17 internationalized runtime messages across all user notifications
- 13 internationalized configuration and command labels
- Comprehensive i18n test suite with 20+ tests
- i18n architecture documentation (docs/INTERNATIONALIZATION.md)
- VS Code task for running i18n tests separately
- Custom fallback l10n system with manual JSON loading for reliability
- Parameter substitution support for all translated messages
- Notification system optimization to prevent double notifications
- Package Size Optimization: Implemented aggressive optimization reducing package size by 96.8%
- Extension package size reduced from ~1.46 MB to 47.37 KB
- Excluded demo/documentation GIFs (~1.4 MB) via .vscodeignore optimization
- Optimized icon.png with oxipng (41KB → 22KB, 46% reduction) while preserving quality
- Maintained full functionality and complete 7-language i18n support
- Added package optimization guidelines to developer documentation
Changed
- All hardcoded user-facing strings replaced with l10n.t() calls
- Error messages now support parameter interpolation
- Success notifications now properly internationalized
- README updated with language support information
- Optimized Extension Packaging: Enhanced .vscodeignore configuration for minimal package size
- Excluded heavy assets while preserving all user-facing functionality
- Documented optimization workflow for future maintainers
- Established package size monitoring practices
Fixed
- CSS nth-child Selector Minification: ✅ FULLY RESOLVED
- nth-child selectors now minify correctly with 41% size reduction
- Comprehensive test coverage for complex nth-child patterns
- Mathematical expressions, selector filtering, and complex combinations work perfectly
[1.0.0] - 2025-10-16
Added
- Complete modular architecture with separation of concerns
- Comprehensive JSDoc documentation across all modules
- Issue #5 resolution: autoOpenNewFile configuration option
- Issue #1 resolution: Enhanced error handling for CSS nth-child selectors
- Comprehensive test suite for all issues and configuration scenarios
- API timeout handling with Promise.race pattern (5000ms timeout)
- 5MB file size validation to prevent API errors
- Enhanced HTTP error handling with specific status code messages
- i18n documentation and translation maintenance guidelines
Changed
- BREAKING REFACTOR: Restructured codebase into modular architecture
src/commands/: Command handlers and core business logicsrc/services/: External API integration and file operationssrc/utils/: Validation utilities and helper functions
- Comprehensive JSDoc documentation with practical examples for all functions
- Enhanced error handling with detailed user feedback
- Type safety improvements with interfaces and proper typing
- Reduced main extension file size by 63% (220→81 lines)
- Enhanced minification service with comprehensive error handling
- Improved file service with configuration-aware functionality
- Updated project documentation with modular architecture details
Fixed
- Issue #5: Minify on save now respects minifyInNewFile configuration
- CSS nth-child Selector Minification: Previous architectural improvements resolved underlying API issues
- Timeout issues during API calls with proper Promise.race implementation
- Silent failures now show appropriate user error messages
- File size validation prevents 413 HTTP errors for large files
- Eliminated code duplication between minify commands
- Improved code reusability and maintainability
- Enhanced documentation standards across all modules
Technical Improvements
- Robust Timeout Handling: Added 5000ms timeout for API calls with Promise.race pattern
- Handles API responses observed up to 1100ms in performance testing
- Specific error messages for timeout vs connectivity issues
- Improved user experience with clear, actionable error feedback
- Graceful degradation when external APIs are slow or unresponsive
- Enhanced API Error Handling: Comprehensive error handling based on updated Toptal API documentation
- File Size Validation: Pre-request validation for 5MB maximum file size limit
- HTTP Status Code Handling: Specific user messages for all API error codes (400, 405, 406, 413, 422, 429)
- JSON Error Parsing: Extracts detailed error messages from API JSON responses when available
- Rate Limit Awareness: Clear messaging when hitting 30 requests/minute limit
- Syntax Error Details: Informative feedback for CSS/JavaScript syntax errors with precise error descriptions
- Fixed Minify on Save: Resolved issue where minify on save didn’t respect
minifyInNewFileconfiguration- Now properly creates new files when
minifyInNewFile: trueis set - Maintains in-place minification when
minifyInNewFile: false(default behavior) - Respects all user configuration settings during auto-minification on save
- Now properly creates new files when
- New Configuration Option: Added
autoOpenNewFilesetting to control file opening behavior- When
true(default): Newly created minified files open automatically in editor - When
false: Files are created silently without opening, reducing editor clutter - Addresses user request for less intrusive minification workflow
- When
- Migrate to ESLint v9 flat config for better compatibility
- Optimize GitHub Actions cache strategy across all workflows
- Optimize CodeQL execution to run only on PRs and weekly schedule
- Standardize action versions to checkout@v5
- Enhanced test suite with automatic Sinon spy cleanup
- Updated error message validation in tests for new architecture
- Improve CI/CD efficiency and reduce resource usage
- Fix auto-merge workflow: Remove GitHub Actions approval restrictions
[0.1.0] - 2024-06-29
Added
- CSS and JavaScript minification using Toptal API
- Explorer context menu to minify css & js files
- Keyboard shortcuts for minify css & js files
- Prefix options for minified files (.min, -min, .compressed, etc.)
- File extension validation and content length validation before minifying
- Internazionalization support with Spanish translation
- Auto-minification on save (configurable)
- Test cases and comprehensive testing
Fixed
- Update keybindings configuration to avoid conflicts with macOS default keybindings
- Demo images in README.md
Changed
- Updated extension icon
- Updated README.md with new features and documentation