Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
5fc8d4c
:tada: feat: init of clipcc-extension
alexcui03 Mar 4, 2026
d8e9b51
:sparkles: chore: copy extension types for scratch extension
alexcui03 Mar 5, 2026
e2c2695
:page_facing_up: chore(ext): re-licensing with MPL-2.0
alexcui03 Mar 7, 2026
3d1b35a
:sparkles: feat(ext): adapter for scratch extensions
alexcui03 Mar 7, 2026
d1167ff
:wrench: chore: webpack config for running clipcc-extension in gui
alexcui03 Mar 7, 2026
ab6362c
:sparkles: feat(ext): new way to register primitives and blocks
alexcui03 Mar 8, 2026
a43e43f
:bug: fix(ext): unpacked arguments passed to func call
alexcui03 Mar 8, 2026
0cb9c3a
:sparkles: feat: integration with extension manager
alexcui03 Mar 8, 2026
cbb2b00
:wrench: fix(ext): type annotations for scratch extension adapter
alexcui03 Mar 9, 2026
b351de8
:wrench: chore: fix typing
alexcui03 Mar 9, 2026
6e0f8cf
:wrench: chore(ext): type annotation for custom field
alexcui03 Mar 9, 2026
1236305
:sparkles: feat(ext,gui,vm): fetch extension manifest from extension …
alexcui03 Mar 9, 2026
8200fe1
:sparkles: feat(ext): support for dynamic blocks
alexcui03 Mar 9, 2026
ace5fb0
:construction: merge: sync with dev/3.2
alexcui03 Mar 9, 2026
bc28e77
:sparkles: feat(ext): incomplete support for custom field type
alexcui03 Mar 9, 2026
03d8ebe
:fire: chore(gui): remove unused function for extension loading
alexcui03 Mar 9, 2026
6e9dda7
:bug: fix(gui,block): blockly button callbacks for extension
alexcui03 Mar 9, 2026
ee84010
:construction: merge: sync with dev/3.2
alexcui03 Mar 21, 2026
5b88cc8
:wrench: chore(ext): update lockfile for clipcc-extension
alexcui03 Mar 21, 2026
5d2f35d
:construction: merge: sync feat/extension-ng with dev/3.2
alexcui03 Apr 14, 2026
d4904b5
:wrench: build: add clipcc-extension to RuleInheritancePlugin in gui
alexcui03 Apr 14, 2026
ee8928c
:bug: fix(ext): dependency and tsconfig errors
alexcui03 Apr 14, 2026
f6ff963
:wrench: chore(block): export interfaces and tool functions
alexcui03 Apr 14, 2026
08c0321
:wrench: build(ext): polyfill events only
alexcui03 Apr 15, 2026
a6f6de4
:construction: merge: sync feat/extension-ng with dev/3.2
alexcui03 Apr 15, 2026
a82818d
:sparkles: feat(ext): split ScratchBuiltinAdapter
alexcui03 Apr 15, 2026
cd23231
:sparkles: feat(ext): make enable/disable async & add refreshInfo method
alexcui03 Apr 15, 2026
4e6f80f
:sparkles: feat(ext): basic support for Scratch web worker extension
alexcui03 Apr 15, 2026
53459d0
:bug: fix(gui,ext): enableExtension should be handled in async way
alexcui03 Apr 15, 2026
17af21a
:wrench: build(vm): add extension package to vm
alexcui03 Apr 15, 2026
059f49d
:test_tube: test(ext): add test for dispatchs
alexcui03 Apr 16, 2026
b70a7d7
:wrench: chore(ext): rename worker output file name to extension-worker
alexcui03 Apr 16, 2026
8e2b38e
:fire: chore(vm): remove/deprecate lagacy usage of extension manager
alexcui03 Apr 16, 2026
71c3484
:wrench: build(ext): fix commonjs2 output
alexcui03 Apr 16, 2026
7ad4613
:bug: fix(vm): api changes for extension manager
alexcui03 Apr 16, 2026
b51b6a3
:test_tube: test(vm): fix vm tests related to new extension manager
alexcui03 Apr 16, 2026
35eb8b4
:construction: merge: sync with dev/3.2
alexcui03 Apr 16, 2026
c5d4211
:test_tube: test(vm): fix wrong import of dispatch in saythink-and-wait
alexcui03 Apr 16, 2026
ad9023c
:bug: fix(vm): should check enabled instead of loaded in shareBlocksT…
alexcui03 Apr 16, 2026
b13da56
:test_tube: test(gui): fix vm-manager-hoc test on vm.attachExtensionM…
alexcui03 Apr 18, 2026
961b788
:test_tube: test(ext): add unit test for extension-manager
alexcui03 Apr 18, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
"start": "pnpm run gui start",
"prepare": "husky",
"build:dist": "cross-env NODE_ENV=production pnpm run build:full",
"build:full": "pnpm l10n build && pnpm audio build && pnpm storage build && pnpm svg-renderer build && pnpm render build && pnpm block build && pnpm vm build && pnpm paint build && node packages/gui/scripts/prepublish.mjs && pnpm gui build",
"build:full": "pnpm l10n build && pnpm audio build && pnpm storage build && pnpm svg-renderer build && pnpm render build && pnpm block build && pnpm extension build && pnpm vm build && pnpm paint build && node packages/gui/scripts/prepublish.mjs && pnpm gui build",
"build": "pnpm block build && pnpm gui build",
"test": "pnpm gui test:unit && pnpm block test && pnpm vm test",
"performance": "pnpm vm performance",
Expand All @@ -33,7 +33,8 @@
"storage": "pnpm --filter clipcc-storage",
"paint": "pnpm --filter clipcc-paint",
"parser": "pnpm --filter clipcc-parser",
"audio": "pnpm --filter clipcc-audio"
"audio": "pnpm --filter clipcc-audio",
"extension": "pnpm --filter clipcc-extension"
},
"devDependencies": {
"@changesets/changelog-git": "^0.2.1",
Expand Down
8 changes: 8 additions & 0 deletions packages/block/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -233,6 +233,8 @@ export * from 'blockly/core';
export * as callbackRegistry from './callback_registry';
export * as constants from './constants';
export * as scratchBlocksUtils from './utils';
export * as DataCatagory from './variables';
export * as ProceduresCategory from './procedures_category';
export type * as proceduresSerializer from './serialization/procedures';

export {reportValue} from './report_value';
Expand All @@ -252,3 +254,9 @@ export {
FieldVariableGetter,
FieldVerticalSeparator
};

export {ICheckboxInFlyout, isCheckboxInFlyout} from './interfaces/i_checkbox_in_flyout';
export {IDynamicDeletable, isDynamicDeletable} from './interfaces/i_dynamic_deletable';
export {IInvisibleIcon, isInvisibleIcon} from './interfaces/i_invisible_icon';
export {IScratchExtensionBlock, isScratchExtensionBlock} from './interfaces/i_scratch_extension';
export {IShadowTemplate, isShadowTemplate} from './interfaces/i_shadow_template';
13 changes: 13 additions & 0 deletions packages/extension/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# Mac OS
.DS_Store

# NPM
/node_modules
npm-*

# Editor
/.idea
/.vscode

# Build
/dist
373 changes: 373 additions & 0 deletions packages/extension/LICENSE

Large diffs are not rendered by default.

11 changes: 11 additions & 0 deletions packages/extension/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# ClipCC Extension

Extension manager and interfaces for ClipCC.

## License

All codes except the files in the following table are licensed in MPL-2.0.

|Files|Description|License|
|---|---|---|
|src/adapter/scratch|Adapter for loading extensions of original Scratch, ported from scratch-vm.|BSD-3-Clause|
24 changes: 24 additions & 0 deletions packages/extension/jest.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
const {createDefaultPreset} = require('ts-jest');

const tsJestTransformCfg = createDefaultPreset({
tsconfig: {
types: [
'node',
'./test/tiny-worker.d.ts'
]
}
}).transform;

/** @type {import('jest').Config} */
module.exports = {
collectCoverageFrom: [
'<rootDir>/src/**/*.ts'
],
transform: {
...tsJestTransformCfg
},
testMatch: [
'<rootDir>/test/unit/**/*.test.[tj]s'
],
testEnvironment: 'node'
};
47 changes: 47 additions & 0 deletions packages/extension/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
{
"name": "clipcc-extension",
"version": "3.2.0",
"description": "Extension manager and interfaces for ClipCC",
"author": "Clip Team",
"license": "MPL-2.0",
"repository": "https://github.com/Clipteam/clipcc.git",
"exports": {
".": {
"types": "./dist/types/index.d.ts",
"webpack": "./src/index.ts",
"node": "./dist/node/clipcc-extension.js",
"browser": "./dist/web/clipcc-extension.js",
"default": "./dist/node/clipcc-extension.js"
}
},
"scripts": {
"build": "rimraf dist && mkdirp dist && webpack --progress --color --bail",
"test:pre": "tsc test/fixtures/dispatch-worker.ts --outDir test/dist --outFile test/dist/dispatch-worker.js --module amd --moduleResolution node",
"test": "jest --verbose",
"coverage": "jest --silent --coverage",
"lint": "eslint ."
},
"devDependencies": {
"@jest/globals": "^30.3.0",
"@types/node": "^25.6.0",
"clipcc-block": "workspace:~",
"eslint": "^10.0.2",
"jest": "catalog:",
"lodash.defaultsdeep": "^4.6.1",
"mkdirp": "3.0.1",
"node-polyfill-webpack-plugin": "^3.0.0",
"rimraf": "^6.1.3",
"terser-webpack-plugin": "^5.3.16",
"tiny-worker": "2.3.0",
"ts-jest": "^29.4.6",
"ts-loader": "^9.5.4",
"typescript": "^5.9.3",
"webpack": "^5.105.3",
"webpack-cli": "^6.0.1"
},
"dependencies": {
"eslint-config-clipcc": "workspace:*",
"format-message": "^6.2.4",
"tslog": "^4.10.2"
}
}
Loading
Loading