Skip to content

🚚 chore(vm): migrate to typescript part 1#235

Open
SimonShiki wants to merge 30 commits into
feat/esm-vmfrom
feat/ts-vm
Open

🚚 chore(vm): migrate to typescript part 1#235
SimonShiki wants to merge 30 commits into
feat/esm-vmfrom
feat/ts-vm

Conversation

@SimonShiki
Copy link
Copy Markdown
Member

@SimonShiki SimonShiki commented May 10, 2026

Requires #219

Description

Migrate some files that not heavily coupling runtime to TypeScript.

Proposed Changes

  1. Ensure test framework and bundler are happy when we mixing js and ts files.
  2. Migrate some files that not heavily coupling runtime to TypeScript.

Test Coverage

None

Additional Context

The runtime-related changes will be splitted to another pr for better readability.

Recommend to squash merge esm, but normal merge ts part 1 + part 2

For AI Reviewers

In this migration, the type annotations involved should, to the greatest extent possible, remain zero‑overhead and must not introduce any substantially breaking logic changes. Exceptions are allowed only when:

The original code genuinely has serious defects, and the fix will not potentially affect a large body of other code that depends on this part of the source.

The fix does not alter the original execution logic (for example, it merely performs a type check earlier and bails out (Eg: returns early or throw error), where that bail‑out is a behavior that would have occurred under the original logic anyway).

You need to pay special attention to changes that tangibly affect runtime behavior, and verify whether the change—viewed either as a caller or a callee—has any impact on the other invocations involved.

preserve ALL original comment descriptions except type annotation (Eg: @type {Runtime}, since we've migrated them into typescript native syntax)

Signed-off-by: SimonShiki <sinangentoo@gmail.com>
Signed-off-by: SimonShiki <sinangentoo@gmail.com>
Signed-off-by: SimonShiki <sinangentoo@gmail.com>
Signed-off-by: SimonShiki <sinangentoo@gmail.com>
Signed-off-by: SimonShiki <sinangentoo@gmail.com>
Signed-off-by: SimonShiki <sinangentoo@gmail.com>
Signed-off-by: SimonShiki <sinangentoo@gmail.com>
@SimonShiki SimonShiki self-assigned this May 10, 2026
Signed-off-by: SimonShiki <sinangentoo@gmail.com>
Signed-off-by: SimonShiki <sinangentoo@gmail.com>
@cloudflare-workers-and-pages
Copy link
Copy Markdown

cloudflare-workers-and-pages Bot commented May 10, 2026

Deploying clipcc-preview with  Cloudflare Pages  Cloudflare Pages

Latest commit: c57f136
Status: ✅  Deploy successful!
Preview URL: https://3f61ba7a.clipcc-preview.pages.dev
Branch Preview URL: https://feat-ts-vm.clipcc-preview.pages.dev

View logs

Signed-off-by: SimonShiki <sinangentoo@gmail.com>
Signed-off-by: SimonShiki <sinangentoo@gmail.com>
@SimonShiki SimonShiki changed the title 🚚 chore(vm): migrate to typescript 🚚 chore(vm): migrate to typescript part 1 May 10, 2026
Signed-off-by: SimonShiki <sinangentoo@gmail.com>
Signed-off-by: SimonShiki <sinangentoo@gmail.com>
Signed-off-by: SimonShiki <sinangentoo@gmail.com>
Signed-off-by: SimonShiki <sinangentoo@gmail.com>
@SimonShiki SimonShiki marked this pull request as ready for review May 10, 2026 14:44
@SimonShiki SimonShiki requested a review from alexcui03 May 10, 2026 14:45
@SimonShiki SimonShiki added feature New feature or request vm Things related to clipcc-vm. labels May 10, 2026
Signed-off-by: SimonShiki <sinangentoo@gmail.com>
Signed-off-by: SimonShiki <sinangentoo@gmail.com>
Signed-off-by: SimonShiki <sinangentoo@gmail.com>
Signed-off-by: SimonShiki <sinangentoo@gmail.com>
Signed-off-by: SimonShiki <sinangentoo@gmail.com>
Signed-off-by: SimonShiki <sinangentoo@gmail.com>
Signed-off-by: SimonShiki <sinangentoo@gmail.com>
Signed-off-by: SimonShiki <sinangentoo@gmail.com>
Signed-off-by: SimonShiki <sinangentoo@gmail.com>
@SimonShiki SimonShiki changed the base branch from dev/3.2 to feat/esm-vm May 11, 2026 09:26
Signed-off-by: SimonShiki <sinangentoo@gmail.com>
Signed-off-by: SimonShiki <sinangentoo@gmail.com>
Signed-off-by: SimonShiki <sinangentoo@gmail.com>
Signed-off-by: SimonShiki <sinangentoo@gmail.com>
Signed-off-by: SimonShiki <sinangentoo@gmail.com>
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR is the first step of migrating packages/vm toward TypeScript, aiming to keep runtime behavior stable while enabling mixed JS/TS builds and updating internal imports/types accordingly.

Changes:

  • Switch VM webpack entrypoints/exports from src/index.js to src/index.ts, and update eslint/test resolution to accept .ts.
  • Migrate a large set of VM utilities/engine/blocks modules from JS to TS (plus schema typings), updating internal import specifiers to extensionless paths.
  • Adjust unit/integration tests for the new module resolution behavior and replace the dispatch unit test Worker implementation with a local in-process fake worker.

Reviewed changes

Copilot reviewed 212 out of 216 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
pnpm-lock.yaml Lockfile updates for newly added dev deps/types.
packages/vm/webpack.config.js Point webpack entries at src/index.ts and allow .ts resolution.
packages/vm/tsconfig.test.json Removed test-only tsconfig.
packages/vm/tsconfig.json Emit declarations only to dist/types/ and adjust emit options.
packages/vm/tsconfig.dts.json Removed dedicated d.ts build config.
packages/vm/test/unit/vm_collectAssets.js Update import specifier to extensionless path.
packages/vm/test/unit/virtual-machine.js Update import specifiers to extensionless paths.
packages/vm/test/unit/util_xml.js Update import specifier to extensionless path.
packages/vm/test/unit/util_variable.js Update import specifier to extensionless path.
packages/vm/test/unit/util_timer.js Update import specifier to extensionless path.
packages/vm/test/unit/util_task-queue.js Update imports to extensionless paths (including fixtures).
packages/vm/test/unit/util_string.js Update import specifier to extensionless path.
packages/vm/test/unit/util_rateLimiter.js Update import specifier to extensionless path.
packages/vm/test/unit/util_new-block-ids.js Update import specifier to extensionless path.
packages/vm/test/unit/util_math.js Update import specifier to extensionless path.
packages/vm/test/unit/util_cast.js Update import specifier to extensionless path.
packages/vm/test/unit/sprites_rendered-target.js Update import specifier to extensionless path.
packages/vm/test/unit/spec.js Update import specifier to extensionless path.
packages/vm/test/unit/serialization_sb3.js Update import specifier to extensionless path.
packages/vm/test/unit/mock-timer.js Update fixture import to extensionless path.
packages/vm/test/unit/maybe_format_message.js Update import specifier to extensionless path.
packages/vm/test/unit/io_userData.js Update import specifier to extensionless path.
packages/vm/test/unit/io_mousewheel.js Update import specifiers to extensionless paths.
packages/vm/test/unit/io_keyboard.js Update import specifier to extensionless path.
packages/vm/test/unit/io_joystick.js Update import specifier to extensionless path.
packages/vm/test/unit/io_cloud.js Update import specifier to extensionless path.
packages/vm/test/unit/io_clock.js Update import specifier to extensionless path.
packages/vm/test/unit/extension_video_sensing.js Update import specifier to extensionless path.
packages/vm/test/unit/extension_conversion.js Update import specifier to extensionless path.
packages/vm/test/unit/engine_variable.js Update import specifier to extensionless path.
packages/vm/test/unit/engine_thread.js Update import specifiers to extensionless paths.
packages/vm/test/unit/engine_target.js Update import specifiers to extensionless paths.
packages/vm/test/unit/engine_sequencer.js Update import specifiers to extensionless paths + whitespace cleanup.
packages/vm/test/unit/engine_runtime.js Update import specifier to extensionless path.
packages/vm/test/unit/engine_mutation-adapter.js Update import specifier to extensionless path.
packages/vm/test/unit/engine_blocks.js Update import specifiers to extensionless paths.
packages/vm/test/unit/engine_adapter.js Update import specifier to extensionless path.
packages/vm/test/unit/dispatch.js Use fake worker + update dispatch API usage.
packages/vm/test/unit/blocks_sounds.js Update import specifier to extensionless path.
packages/vm/test/unit/blocks_sensing.js Update import specifiers to extensionless paths.
packages/vm/test/unit/blocks_procedures.js Update import specifier to extensionless path.
packages/vm/test/unit/blocks_operators.js Update import specifier to extensionless path.
packages/vm/test/unit/blocks_operators_infinity.js Update import specifier to extensionless path.
packages/vm/test/unit/blocks_motion.js Update import specifiers to extensionless paths + whitespace cleanup.
packages/vm/test/unit/blocks_looks.js Update import specifiers to extensionless paths.
packages/vm/test/unit/blocks_event.js Update import specifiers to extensionless paths.
packages/vm/test/unit/blocks_data.js Update import specifier to extensionless path.
packages/vm/test/unit/blocks_data_infinity.js Update import specifier to extensionless path.
packages/vm/test/unit/blocks_control.js Update imports + adjust mocked util interface for new BlockUtility API.
packages/vm/test/integration/variable_special_chars_sb3.js Update import specifiers to extensionless paths.
packages/vm/test/integration/variable_special_chars_sb2.js Update import specifiers to extensionless paths.
packages/vm/test/integration/variable_monitor_reset.js Update import specifier to extensionless path.
packages/vm/test/integration/unknown-opcode.js Update import specifier to extensionless path.
packages/vm/test/integration/unknown-opcode-in-c-block.js Update import specifier to extensionless path.
packages/vm/test/integration/unknown-opcode-as-reporter-block.js Update import specifier to extensionless path.
packages/vm/test/integration/stack-click.js Update import specifier to extensionless path.
packages/vm/test/integration/sprite3_missing_svg.js Update import specifier to extensionless path.
packages/vm/test/integration/sprite3_missing_png.js Update import specifier to extensionless path.
packages/vm/test/integration/sprite3_corrupted_svg.js Update import specifier to extensionless path.
packages/vm/test/integration/sprite3_corrupted_png.js Update import specifier to extensionless path.
packages/vm/test/integration/sprite2_missing_svg.js Update import specifier to extensionless path.
packages/vm/test/integration/sprite2_missing_png.js Update import specifier to extensionless path.
packages/vm/test/integration/sprite2_corrupted_svg.js Update import specifier to extensionless path.
packages/vm/test/integration/sprite2_corrupted_png.js Update import specifier to extensionless path.
packages/vm/test/integration/sound.js Update import specifiers to extensionless paths.
packages/vm/test/integration/sensing.js Update import specifier to extensionless path.
packages/vm/test/integration/sb3-roundtrip.js Update import specifiers to extensionless paths.
packages/vm/test/integration/sb3_missing_svg.js Update import specifier to extensionless path.
packages/vm/test/integration/sb3_missing_sound.js Update import specifier to extensionless path.
packages/vm/test/integration/sb3_missing_png.js Update import specifier to extensionless path.
packages/vm/test/integration/sb3_corrupted_svg.js Update import specifier to extensionless path.
packages/vm/test/integration/sb3_corrupted_sound.js Update import specifier to extensionless path.
packages/vm/test/integration/sb3_corrupted_png.js Update import specifier to extensionless path.
packages/vm/test/integration/sb2-import-extension-monitors.js Update import specifier to extensionless path.
packages/vm/test/integration/sb2_missing_svg.js Update import specifier to extensionless path.
packages/vm/test/integration/sb2_missing_png.js Update import specifier to extensionless path.
packages/vm/test/integration/sb2_corrupted_svg.js Update import specifier to extensionless path.
packages/vm/test/integration/sb2_corrupted_png.js Update import specifier to extensionless path.
packages/vm/test/integration/saythink-and-wait.js Update import specifiers to extensionless paths.
packages/vm/test/integration/running_project_changed_state.js Update import specifier to extensionless path.
packages/vm/test/integration/procedure.js Update import specifier to extensionless path.
packages/vm/test/integration/pen.js Update import specifiers to extensionless paths.
packages/vm/test/integration/offline-custom-assets.js Update import specifier to extensionless path.
packages/vm/test/integration/motion.js Update import specifier to extensionless path.
packages/vm/test/integration/monitors_sb3.js Update import specifiers to extensionless paths.
packages/vm/test/integration/monitors_sb2.js Update import specifier to extensionless path.
packages/vm/test/integration/monitors_sb2_to_sb3.js Update import specifier to extensionless path.
packages/vm/test/integration/monitor-threads-run-every-frame.js Update import specifiers to extensionless paths.
packages/vm/test/integration/looks.js Update import specifier to extensionless path.
packages/vm/test/integration/load-extensions.js Update import specifiers to extensionless paths.
packages/vm/test/integration/list-monitor-rename.js Update import specifier to extensionless path.
packages/vm/test/integration/internal-extension.js Update import specifiers to extensionless paths.
packages/vm/test/integration/import-sb2-from-object.js Update import specifier to extensionless path.
packages/vm/test/integration/import-sb.js Update import specifier to extensionless path.
packages/vm/test/integration/hat-threads-run-every-frame.js Update import specifiers to extensionless paths.
packages/vm/test/integration/hat-execution-order.js Update import specifier to extensionless path.
packages/vm/test/integration/execute.js Update import specifier to extensionless path.
packages/vm/test/integration/event.js Update import specifier to extensionless path.
packages/vm/test/integration/data.js Update import specifier to extensionless path.
packages/vm/test/integration/control.js Update import specifier to extensionless path.
packages/vm/test/integration/complex.js Update import specifier to extensionless path.
packages/vm/test/integration/comments.js Update import specifier to extensionless path.
packages/vm/test/integration/comments_sb3.js Update import specifier to extensionless path.
packages/vm/test/integration/cloud_variables_sb3.js Update import specifier to extensionless path.
packages/vm/test/integration/cloud_variables_sb2.js Update import specifier to extensionless path.
packages/vm/test/integration/clone-cleanup.js Update import specifier to extensionless path.
packages/vm/test/integration/broadcast_special_chars_sb3.js Update import specifiers to extensionless paths.
packages/vm/test/integration/broadcast_special_chars_sb2.js Update import specifiers to extensionless paths.
packages/vm/test/integration/block_to_workspace_comment_import.js Update import specifier to extensionless path.
packages/vm/test/integration/block_to_workspace_comment_import_no_scripts.js Update import specifier to extensionless path.
packages/vm/test/fixtures/fake-worker.js Add in-process Worker stub for dispatch tests.
packages/vm/test/fixtures/dispatch-test-worker.js Update imports to extensionless paths.
packages/vm/test/extra/performance.js Update import specifier to extensionless path.
packages/vm/src/virtual-machine.js Update internal imports + TS-friendly JSDoc type import.
packages/vm/src/util/xml-escape.ts Migrate xml escape util to TS.
packages/vm/src/util/variable-util.ts Migrate variable util to TS + add explicit types.
packages/vm/src/util/uid.ts Migrate uid generator to TS.
packages/vm/src/util/timer.ts Migrate timer to TS + add property/method typings.
packages/vm/src/util/task-queue.ts Migrate task queue to TS + add task record types.
packages/vm/src/util/string-util.ts Migrate string util to TS + improve typing.
packages/vm/src/util/scratch-link-websocket.ts Migrate scratch-link websocket wrapper to TS.
packages/vm/src/util/rateLimiter.ts Migrate rate limiter to TS.
packages/vm/src/util/new-block-ids.ts Migrate new-block-ids to TS + use schema types.
packages/vm/src/util/maybe-format-message.ts Migrate maybe-format-message to TS.
packages/vm/src/util/maybe-format-message.js Remove JS version (replaced by TS).
packages/vm/src/util/math-util.ts Migrate math util to TS.
packages/vm/src/util/log.ts Add TS log module using nanolog.
packages/vm/src/util/jsonrpc.ts Migrate jsonrpc to TS.
packages/vm/src/util/jsonrpc.js Remove JS version (replaced by TS).
packages/vm/src/util/get-monitor-id.ts Migrate get-monitor-id to TS.
packages/vm/src/util/fetch-with-timeout.ts Migrate fetch-with-timeout to TS.
packages/vm/src/util/color.ts Export RGB/HSV interfaces + TS formatting changes.
packages/vm/src/util/clone.ts Migrate clone util to TS.
packages/vm/src/util/cast.ts Migrate cast util to TS + type refinements.
packages/vm/src/util/base64-util.ts Migrate base64 util to TS + typings.
packages/vm/src/types/global.d.ts Add ambient typings for decode-html and global clipcc.
packages/vm/src/sprites/sprite.ts Migrate Sprite to TS + add costume/sound typings.
packages/vm/src/sprites/rendered-target.js Update imports + add isRenderedTarget helper export.
packages/vm/src/serialization/schema.ts Add typed VM block schema used at runtime/serialization.
packages/vm/src/serialization/sb3.js Update imports to extensionless paths.
packages/vm/src/serialization/sb2.js Update imports to extensionless paths.
packages/vm/src/serialization/sb2_specmap.js Update imports to extensionless paths.
packages/vm/src/serialization/migration.js Update log import to extensionless path.
packages/vm/src/serialization/deserialize-assets.js Update log import to extensionless path.
packages/vm/src/playground/benchmark.js Update VM import to extensionless path.
packages/vm/src/io/video.js Update import to extensionless path.
packages/vm/src/io/userData.ts Migrate userData device to TS.
packages/vm/src/io/mouseWheel.ts Migrate mouseWheel device to TS.
packages/vm/src/io/mouse.js Update import to extensionless path.
packages/vm/src/io/keyboard.ts Migrate keyboard device to TS.
packages/vm/src/io/joystick.ts Migrate joystick device to TS.
packages/vm/src/io/cloud.js Update imports to extensionless paths.
packages/vm/src/io/clock.ts Migrate clock device to TS.
packages/vm/src/io/bt.js Update JSONRPC import to TS module path.
packages/vm/src/io/ble.js Update JSONRPC import to TS module path.
packages/vm/src/index.ts Export VM + add schema type re-export.
packages/vm/src/import/load-sound.js Update imports to extensionless paths.
packages/vm/src/import/load-costume.js Update imports to extensionless paths + doc tweaks.
packages/vm/src/extensions/scratch3_wedo2/index.js Update util imports to extensionless paths.
packages/vm/src/extensions/scratch3_video_sensing/index.js Update util imports to extensionless paths.
packages/vm/src/extensions/scratch3_translate/index.js Update util imports to extensionless paths.
packages/vm/src/extensions/scratch3_text2speech/index.js Update util imports to extensionless paths.
packages/vm/src/extensions/scratch3_speech2text/index.js Update util imports to extensionless paths.
packages/vm/src/extensions/scratch3_pen/index.js Update util/engine imports to extensionless paths.
packages/vm/src/extensions/scratch3_music/index.js Update util imports to extensionless paths.
packages/vm/src/extensions/scratch3_microbit/index.js Update util imports to extensionless paths.
packages/vm/src/extensions/scratch3_makeymakey/index.js Update util imports to extensionless paths.
packages/vm/src/extensions/scratch3_gdx_for/scratch-link-device-adapter.js Update Base64Util import to extensionless path.
packages/vm/src/extensions/scratch3_gdx_for/index.js Update log/math imports to extensionless paths.
packages/vm/src/extensions/scratch3_ev3/index.js Update util imports to extensionless paths.
packages/vm/src/extensions/scratch3_boost/index.js Update util imports to extensionless paths.
packages/vm/src/extension-support/extension-worker.js Update dispatch import to extensionless path.
packages/vm/src/extension-support/extension-metadata.ts TS typing adjustments for extension metadata.
packages/vm/src/extension-support/extension-manager.js Update imports + switch to public dispatch remote-check API.
packages/vm/src/extension-support/define-messages.ts Migrate define-messages helper to TS.
packages/vm/src/extension-support/define-messages.js Remove JS version (replaced by TS).
packages/vm/src/engine/variable.ts Migrate Variable to TS + add VariableType enum.
packages/vm/src/engine/target.js Update imports + TS-friendly JSDoc type import.
packages/vm/src/engine/stage-layering.ts Add StageLayer enum + keep layering constants.
packages/vm/src/engine/scratch-blocks-constants.ts TS/const-assertion tweaks to scratch-blocks constants.
packages/vm/src/engine/mutation-adapter.ts Migrate mutation-adapter to TS + domhandler typing.
packages/vm/src/engine/monitor-record.ts Migrate MonitorRecord to TS.
packages/vm/src/engine/monitor-record.js Remove JS version (replaced by TS).
packages/vm/src/engine/execute.js Update imports to extensionless paths.
packages/vm/src/engine/blocks-execute-cache.ts Migrate blocks execute cache helper to TS.
packages/vm/src/engine/blocks-execute-cache.js Remove JS version (replaced by TS).
packages/vm/src/engine/blocks-runtime-cache.ts Migrate runtime script cache helper to TS.
packages/vm/src/engine/blocks.js Update imports + refine JSDoc type references to new schema types.
packages/vm/src/engine/block-utility.js Remove JS version (replaced by TS implementation).
packages/vm/src/dispatch/worker-dispatch.ts Migrate worker-dispatch to TS.
packages/vm/src/dispatch/central-dispatch.ts Migrate central-dispatch to TS + tighten encapsulation.
packages/vm/src/blocks/scratch3_procedures.ts Add TS typings for procedures blocks.
packages/vm/src/blocks/scratch3_operators.ts Add TS typings for operators blocks.
packages/vm/src/blocks/scratch3_motion.ts Add TS typings for motion blocks + updated glide timer handling.
packages/vm/src/blocks/scratch3_event.ts Add TS typings for event blocks.
packages/vm/src/blocks/scratch3_data.ts Add TS typings for data blocks + monitor update typing.
packages/vm/src/blocks/scratch3_control.ts Add TS typings for control blocks + typed execution context.
packages/vm/src/blocks/category_prototype.ts Add shared TS types/interfaces for block categories.
packages/vm/package.json Update exports + build:types command + add TS-related dev deps.
packages/vm/eslint.config.js Enable TS lint config and include .ts files for src/tests.
packages/render/src/RenderWebGL.js JSDoc tweak for return type description.
packages/gui/src/types.d.ts Add global clipcc metadata typing.
packages/block/src/index.ts Export additional types/events from block package.
Files not reviewed (1)
  • pnpm-lock.yaml: Language not supported
Comments suppressed due to low confidence (4)

packages/vm/src/sprites/sprite.ts:126

  • createClone is documented/used as optional-argument API, but the TypeScript signature requires optLayerGroup: StageLayer. Call sites (e.g. RenderedTarget.makeClone() / duplicate()) call createClone() with no args and this method already handles missing values at runtime. Make the parameter optional (or give it a default) so the type definition matches actual behavior and avoids TS errors for migrated callers.
    packages/vm/src/engine/stage-layering.ts:5
  • Avoid const enum here: this package’s runtime build is transpiled via @babel/preset-typescript (webpack uses babel-loader), and const enum is not reliably supported/inlined by Babel. This can lead to runtime breakage or unexpected emitted code. Prefer a normal enum or a as const object + union type.
    packages/vm/src/engine/variable.ts:14
  • VariableType is declared as an exported const enum, but VM runtime code references it at runtime (via Variable.SCALAR_TYPE etc) and the build is Babel-transpiled. const enum is not reliably handled by Babel’s TypeScript transform and can cause runtime failures or unexpected output. Use a normal enum or as const string literals instead.
    packages/vm/src/dispatch/central-dispatch.ts:23
  • workerClass used to be a public escape hatch to let Node/test environments provide a custom Worker implementation (e.g. TinyWorker). Marking it private makes that customization a TS type error and is an API breaking change (the unit tests in this PR still rely on setting dispatch.workerClass). Consider keeping it public or adding an explicit setter/config method.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +35 to +39
global.self = workerSelf;
global.postMessage = workerSelf.postMessage;
global.close = workerSelf.close;
global.addEventListener = workerSelf.addEventListener;

Comment thread packages/vm/package.json
},
"scripts": {
"build:types": "tsc --project ./tsconfig.dts.json",
"build:types": "tsc",
Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

test types should also get resolved if they use ts.

@SimonShiki
Copy link
Copy Markdown
Member Author

Pull request overview

This PR is the first step of migrating packages/vm toward TypeScript, aiming to keep runtime behavior stable while enabling mixed JS/TS builds and updating internal imports/types accordingly.

Changes:

  • Switch VM webpack entrypoints/exports from src/index.js to src/index.ts, and update eslint/test resolution to accept .ts.
  • Migrate a large set of VM utilities/engine/blocks modules from JS to TS (plus schema typings), updating internal import specifiers to extensionless paths.
  • Adjust unit/integration tests for the new module resolution behavior and replace the dispatch unit test Worker implementation with a local in-process fake worker.

Reviewed changes

Copilot reviewed 212 out of 216 changed files in this pull request and generated 2 comments.

Show a summary per file
Files not reviewed (1)
Comments suppressed due to low confidence (4)
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

  1. just remove the workerClass, test needs should be satisfied by test itself rather than runtime.
  2. createClone and const enum issues are resolved by part2

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

feature New feature or request vm Things related to clipcc-vm.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants