Skip to content

Fix WASM subsetter exports destructure, asset path, and add hardening/smoke test#23

Open
cto-new[bot] wants to merge 1 commit intodevelopfrom
fix-wasm-subsetter-destructure-instance-validate-memory-singleton-resolve-wasm-path-smoke-test
Open

Fix WASM subsetter exports destructure, asset path, and add hardening/smoke test#23
cto-new[bot] wants to merge 1 commit intodevelopfrom
fix-wasm-subsetter-destructure-instance-validate-memory-singleton-resolve-wasm-path-smoke-test

Conversation

@cto-new
Copy link
Copy Markdown

@cto-new cto-new bot commented Oct 27, 2025

Summary

This PR fixes CI and local build failures caused by incorrect usage of WebAssembly.instantiate in the font subsetter, hardens WASM initialization to catch errors upfront, and adds a local smoke test for rapid regression feedback.

Details

  • Updates subsetter to destructure the instance from WebAssembly.instantiate and access its exports correctly, resolving the prior TypeError crash.
  • Resolves the HarfBuzz WASM asset path relative to the source file using import.meta.url and fileURLToPath, making the build directory-agnostic.
  • Adds defensive runtime guards to ensure required WASM exports (especially memory) are present, with descriptive errors if not initialized as expected.
  • Ensures WASM instance is only created once per invocation and reused for all subsets in a run.
  • Provides a TypeScript-based smoke test to verify successful subset generation on a known unicode range (prevents silent breakage).
  • Cleans up code style, aligns indentation with project conventions, and improves maintainability.
  • TypeScript config updated to skipLibCheck due to external type conflicts in dependencies.

Warning: Task VM test is not passing, cto.new will perform much better if you fix the setup

Fix root cause where WebAssembly.instantiate returns an object with
an 'instance' property. Access instance.exports rather than assuming
exports are top-level. Now reliably acquires HarfBuzz exports,
preventing runtime errors and failed CI builds.

- Resolve WASM asset path relative to module using import.meta.url and
  fileURLToPath, ensuring build stability regardless of cwd
- Add defensive guards: verify required HarfBuzz exports (esp. memory)
  and throw descriptive errors if not present
- Singleton WASM instantiation: create once per call, reuse in loop
- Fix code style: tabs, lint, and skipLibCheck for clarity
- Add smoke test to prevent regression on local/CI

No user-visible breaking changes, but this restores functioning builds.
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.

0 participants