Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -53,3 +53,5 @@ profiles/cocos.config.json

# performance profiling artifacts
perf/

static/scene-runtime/
22 changes: 22 additions & 0 deletions docs/zh/scene-editor-extraction.md
Original file line number Diff line number Diff line change
Expand Up @@ -56,3 +56,25 @@ CLI 场景 Worker 启用引擎的烘焙能力,同时设置引擎预览行为
私有包使用 CLI 明确列出的 `cocos-cli/host/...` 出口并要求精确匹配版本,已取消 `host/*` 通配导出。源码已迁入独立仓库,目标 IDE 仍需更新导入入口并做实际预览验收。新的内核和资源接口见 [场景 runtime 契约](scene-runtime-contract.md)。迁仓不移除 CLI 既有 Git 历史中的源码,独立仓库的访问权限需单独管理。

CLI 中立服务接口仍描述宿主可注册的 Camera/Gizmo 等通信契约,便于复用 RPC 和服务容器;CLI 单独启动时不注册这些可视化实现。接口类型的存在不代表服务可直接调用,宿主应先加载私有包的 `scene-entry`。

## 编辑器类型声明

编辑器类型统一扩展 `@cocos/cocos-cli-types` 现有领域声明。能力契约从 `scene` 入口导入:

```ts
import type { HostCapabilities, BrowserCapabilities, BrowserHost, Editor } from '@cocos/cocos-cli-types/scene';

type SceneSessionDescriptor = Editor.Browser.SceneSessionProtocol.SceneSessionDescriptor;
```

原 `@cocos/scene-editor-types` 和 `@cocos/cocos-cli-types/scene-editor` 类型入口已移除。消费方应删除旧类型包和 `scene-editor/*` 的 TypeScript `paths` 配置,改用现有领域入口。每个领域的独有编辑器类型通过 `Editor.Host`、`Editor.Browser` 命名空间提供;模块标识按路径片段首字母大写并拼接,例如资产模块为 `assets` 入口的 `Editor.Host.CoreAssetsIndex`,场景会话协议为 `scene` 入口的 `Editor.Browser.SceneSessionProtocol`。原有公共类型继续直接从对应领域导入。本地源码联调可将 `@cocos/cocos-cli-types/*` 映射到 `packages/cocos-cli-types/*`。

`npm run generate:dts`(以及 `generate:dts:ci`)统一生成公共 API 并扩展编辑器声明。日常 `npm run compile` 也执行完整类型生成,保证每次从公共 API 的干净声明开始合并,避免重复叠加扩展。已有 `dist/**/*.d.ts` 时可直接运行 `npm run generate:dts:ci`;不再提供独立的编辑器类型生成命令。这些步骤整理已有声明,不会再次编译 TypeScript 源码。

生成器按原始编译符号和完整声明识别可复用的公共类型,剩余声明及必要依赖由 API Extractor 按领域合并到原有 `.d.ts`。编辑器全局扩展并入共用的 `cc.editor.d.ts`,`scene.d.ts` 引用这份引擎声明。类型包不再包含 `scene-editor/` 目录、`scene-editor.d.ts` 或内部模块路径兼容层。生成时的临时依赖图在完成后清理,不参与发布。

浏览器实际执行的 JavaScript 仍由 `npm run build:scene-runtime` 生成到 `dist/scene-runtime/`。

运行时打包和编辑器声明共用 `workflow/scene-api-entries.json`:`host` 定义宿主类型入口,`browser` 定义浏览器模块到实际实现的映射,`browserOptions` 描述默认导出、仅类型导出及副作用入口。普通实现路径相对 `src`,`cc/...` 保留引擎模块标识。

`workflow/scene-browser-api.js` 据此自动生成 `dist/core/scene/runtime/browser` 下的兼容 JS 和声明,保持 `cocos-cli/browser/*` 包出口与浏览器运行时入口不变;`prepare-dts`、运行时构建和编辑器类型生成都会准备这份产物。源码中不再维护 `src/core/scene/runtime/browser` 转发文件。配置入口直接复用 `scene-configs`,由 `typeOnly` 选项生成类型导出,运行时不加载宿主配置实例。`runtime/browser-assets` 中的宿主适配器、加载器等实际实现继续保留。
10 changes: 10 additions & 0 deletions eslint.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,15 @@ export default [
'@typescript-eslint/no-duplicate-enum-values': 'off',
},
},
{
files: ['packages/cocos-cli-types/*.d.ts'],
rules: {
// Generated ambient declarations preserve mutable namespace members
// and path references that load the engine's global augmentations.
'no-var': 'off',
'@typescript-eslint/triple-slash-reference': 'off',
},
},
{
ignores: [
'dist/**',
Expand All @@ -107,6 +116,7 @@ export default [
'*.min.js',
'*.bundle.js',
'packages/cocos-cli-types/cc.d.ts',
'packages/cocos-cli-types/cc.editor.d.ts',
],
},
];
14 changes: 13 additions & 1 deletion package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

197 changes: 193 additions & 4 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,8 @@
"build:simulator:native": "node workflow/build-simulator.js",
"build:simulator:runtime": "node workflow/build-simulator-runtime.js",
"build:simulator": "npm run build:simulator:native && npm run build:simulator:runtime",
"build": "npm run build:asset-db && npm run build:clear && node workflow/prepare-dts.js && tsc -b && node workflow/generate-schema.js && npm run generate:dts && npm run build:platform-views",
"compile": "npm run build:asset-db && npm run build:clear && node workflow/prepare-dts.js && tsc -b && npm run build:platform-views && node workflow/generate-schema.js",
"build": "npm run build:asset-db && npm run build:clear && node workflow/prepare-dts.js && tsc -b && node workflow/generate-schema.js && npm run generate:dts && npm run build:platform-views && npm run build:scene-runtime",
"compile": "npm run build:asset-db && npm run build:clear && node workflow/prepare-dts.js && tsc -b && npm run build:platform-views && node workflow/generate-schema.js && npm run build:scene-runtime && npm run generate:dts:ci",
"build:clear": "node workflow/build-clear.js",
"build:watch": "tsc -b --watch",
"postinstall": "node workflow/postinstall.js",
Expand All @@ -54,7 +54,8 @@
"start:mcp-inspector": "npx @modelcontextprotocol/inspector",
"cli": "node ./dist/cli.js",
"rebuild": "node workflow/electron-rebuild.js",
"rebuild:node-gyp": "node workflow/node-gyp-rebuild.js"
"rebuild:node-gyp": "node workflow/node-gyp-rebuild.js",
"build:scene-runtime": "node workflow/build-scene-runtime.js"
},
"author": "COCOS",
"files": [
Expand Down Expand Up @@ -113,7 +114,19 @@
"tsx": "^4.19.2",
"typescript": "^5.4.5",
"typescript-eslint": "^8.42.0",
"typescript-json-schema": "^0.65.1"
"typescript-json-schema": "^0.65.1",
"rollup": "2.79.2",
"@rollup/plugin-commonjs": "26.0.3",
"@rollup/plugin-virtual": "3.0.2",
"@rollup/plugin-json": "6.1.0",
"@rollup/plugin-node-resolve": "13.3.0",
"events": "2.1.0",
"path-browserify": "0.0.1",
"os-browserify": "0.3.0",
"util": "0.10.4",
"url": "0.11.4",
"core-js-bundle": "3.46.0",
"regenerator-runtime": "0.13.11"
},
"dependencies": {
"@babel/core": "7.22.20",
Expand Down Expand Up @@ -579,6 +592,182 @@
"./host/core/scene/scene-process/service/node/prefab-canvas-mutation": {
"types": "./dist/core/scene/scene-process/service/node/prefab-canvas-mutation.d.ts",
"default": "./dist/core/scene/scene-process/service/node/prefab-canvas-mutation.js"
},
"./browser/scene": {
"types": "./dist/core/scene/runtime/browser/scene.d.ts",
"default": "./dist/core/scene/runtime/browser/scene.js"
},
"./browser/scene/context": {
"types": "./dist/core/scene/runtime/browser/scene/context.d.ts",
"default": "./dist/core/scene/runtime/browser/scene/context.js"
},
"./browser/scene/common": {
"types": "./dist/core/scene/runtime/browser/scene/common.d.ts",
"default": "./dist/core/scene/runtime/browser/scene/common.js"
},
"./browser/scene/config": {
"types": "./dist/core/scene/runtime/browser/scene/config.d.ts",
"default": "./dist/core/scene/runtime/browser/scene/config.js"
},
"./browser/scene/i18n": {
"types": "./dist/core/scene/runtime/browser/scene/i18n.d.ts",
"default": "./dist/core/scene/runtime/browser/scene/i18n.js"
},
"./browser/scene/rpc": {
"types": "./dist/core/scene/runtime/browser/scene/rpc.d.ts",
"default": "./dist/core/scene/runtime/browser/scene/rpc.js"
},
"./browser/scene/light-probe-normal-reset": {
"types": "./dist/core/scene/runtime/browser/scene/light-probe-normal-reset.d.ts",
"default": "./dist/core/scene/runtime/browser/scene/light-probe-normal-reset.js"
},
"./browser/scene/animation/property-commit-event": {
"types": "./dist/core/scene/runtime/browser/scene/animation/property-commit-event.d.ts",
"default": "./dist/core/scene/runtime/browser/scene/animation/property-commit-event.js"
},
"./browser/scene/editor-session": {
"types": "./dist/core/scene/runtime/browser/scene/editor-session.d.ts",
"default": "./dist/core/scene/runtime/browser/scene/editor-session.js"
},
"./browser/scene/dump": {
"types": "./dist/core/scene/runtime/browser/scene/dump.d.ts",
"default": "./dist/core/scene/runtime/browser/scene/dump.js"
},
"./browser/scene/engine": {
"types": "./dist/core/scene/runtime/browser/scene/engine.d.ts",
"default": "./dist/core/scene/runtime/browser/scene/engine.js"
},
"./browser/scene/message": {
"types": "./dist/core/scene/runtime/browser/scene/message.d.ts",
"default": "./dist/core/scene/runtime/browser/scene/message.js"
},
"./browser/scene/node": {
"types": "./dist/core/scene/runtime/browser/scene/node.d.ts",
"default": "./dist/core/scene/runtime/browser/scene/node.js"
},
"./browser/scene/node/node-create": {
"types": "./dist/core/scene/runtime/browser/scene/node/node-create.d.ts",
"default": "./dist/core/scene/runtime/browser/scene/node/node-create.js"
},
"./browser/scene/node/node-type-config": {
"types": "./dist/core/scene/runtime/browser/scene/node/node-type-config.d.ts",
"default": "./dist/core/scene/runtime/browser/scene/node/node-type-config.js"
},
"./browser/scene/node/node-utils": {
"types": "./dist/core/scene/runtime/browser/scene/node/node-utils.d.ts",
"default": "./dist/core/scene/runtime/browser/scene/node/node-utils.js"
},
"./browser/scene/node/prefab-canvas-mutation": {
"types": "./dist/core/scene/runtime/browser/scene/node/prefab-canvas-mutation.d.ts",
"default": "./dist/core/scene/runtime/browser/scene/node/prefab-canvas-mutation.js"
},
"./browser/scene/operation/types": {
"types": "./dist/core/scene/runtime/browser/scene/operation/types.d.ts",
"default": "./dist/core/scene/runtime/browser/scene/operation/types.js"
},
"./browser/scene/prefab/prefab-editor-utils": {
"types": "./dist/core/scene/runtime/browser/scene/prefab/prefab-editor-utils.d.ts",
"default": "./dist/core/scene/runtime/browser/scene/prefab/prefab-editor-utils.js"
},
"./browser/scene/reference-image": {
"types": "./dist/core/scene/runtime/browser/scene/reference-image.d.ts",
"default": "./dist/core/scene/runtime/browser/scene/reference-image.js"
},
"./browser/scene/scene/light-probe-snapshot": {
"types": "./dist/core/scene/runtime/browser/scene/scene/light-probe-snapshot.d.ts",
"default": "./dist/core/scene/runtime/browser/scene/scene/light-probe-snapshot.js"
},
"./browser/scene/scene/light-probe-transform": {
"types": "./dist/core/scene/runtime/browser/scene/scene/light-probe-transform.d.ts",
"default": "./dist/core/scene/runtime/browser/scene/scene/light-probe-transform.js"
},
"./browser/scene/scene/utils": {
"types": "./dist/core/scene/runtime/browser/scene/scene/utils.d.ts",
"default": "./dist/core/scene/runtime/browser/scene/scene/utils.js"
},
"./browser/scene/service-manager": {
"types": "./dist/core/scene/runtime/browser/scene/service-manager.d.ts",
"default": "./dist/core/scene/runtime/browser/scene/service-manager.js"
},
"./browser/scene/utils/asset-reload": {
"types": "./dist/core/scene/runtime/browser/scene/utils/asset-reload.d.ts",
"default": "./dist/core/scene/runtime/browser/scene/utils/asset-reload.js"
},
"./browser/scene/utils/editor-node": {
"types": "./dist/core/scene/runtime/browser/scene/utils/editor-node.d.ts",
"default": "./dist/core/scene/runtime/browser/scene/utils/editor-node.js"
},
"./browser/scene/utils/state-machine/finite-state-machine": {
"types": "./dist/core/scene/runtime/browser/scene/utils/state-machine/finite-state-machine.d.ts",
"default": "./dist/core/scene/runtime/browser/scene/utils/state-machine/finite-state-machine.js"
},
"./browser/scene/utils/state-machine/state-interface": {
"types": "./dist/core/scene/runtime/browser/scene/utils/state-machine/state-interface.d.ts",
"default": "./dist/core/scene/runtime/browser/scene/utils/state-machine/state-interface.js"
},
"./browser/scene/session/client": {
"types": "./dist/core/scene/runtime/browser/scene/session/client.d.ts",
"default": "./dist/core/scene/runtime/browser/scene/session/client.js"
},
"./browser/scene/session/methods": {
"types": "./dist/core/scene/runtime/browser/scene/session/methods.d.ts",
"default": "./dist/core/scene/runtime/browser/scene/session/methods.js"
},
"./browser/scene/session/protocol": {
"types": "./dist/core/scene/runtime/browser/scene/session/protocol.d.ts",
"default": "./dist/core/scene/runtime/browser/scene/session/protocol.js"
},
"./browser/engine/editor-extends": {
"types": "./dist/core/scene/runtime/browser/engine/editor-extends.d.ts",
"default": "./dist/core/scene/runtime/browser/engine/editor-extends.js"
},
"./browser/engine/node-path": {
"types": "./dist/core/scene/runtime/browser/engine/node-path.d.ts",
"default": "./dist/core/scene/runtime/browser/engine/node-path.js"
},
"./browser/engine/serialize": {
"types": "./dist/core/scene/runtime/browser/engine/serialize.d.ts",
"default": "./dist/core/scene/runtime/browser/engine/serialize.js"
},
"./browser/engine/deserialize": {
"types": "./dist/core/scene/runtime/browser/engine/deserialize.d.ts",
"default": "./dist/core/scene/runtime/browser/engine/deserialize.js"
},
"./browser/engine/geometry": {
"types": "./dist/core/scene/runtime/browser/engine/geometry.d.ts",
"default": "./dist/core/scene/runtime/browser/engine/geometry.js"
},
"./browser/engine/prefab": {
"types": "./dist/core/scene/runtime/browser/engine/prefab.d.ts",
"default": "./dist/core/scene/runtime/browser/engine/prefab.js"
},
"./browser/engine/graphics-config": {
"types": "./dist/core/scene/runtime/browser/engine/graphics-config.d.ts",
"default": "./dist/core/scene/runtime/browser/engine/graphics-config.js"
},
"./browser/engine/polyfill": {
"types": "./dist/core/scene/runtime/browser/engine/polyfill.d.ts",
"default": "./dist/core/scene/runtime/browser/engine/polyfill.js"
},
"./browser/engine/overwrite": {
"types": "./dist/core/scene/runtime/browser/engine/overwrite.d.ts",
"default": "./dist/core/scene/runtime/browser/engine/overwrite.js"
},
"./browser/engine/editor/2d-misc": {
"types": "./dist/core/scene/runtime/browser/engine/editor/2d-misc.d.ts",
"default": "./dist/core/scene/runtime/browser/engine/editor/2d-misc.js"
},
"./browser/engine/editor/new-gen-anim": {
"types": "./dist/core/scene/runtime/browser/engine/editor/new-gen-anim.d.ts",
"default": "./dist/core/scene/runtime/browser/engine/editor/new-gen-anim.js"
},
"./browser/engine/editor/lod-group-utils": {
"types": "./dist/core/scene/runtime/browser/engine/editor/lod-group-utils.d.ts",
"default": "./dist/core/scene/runtime/browser/engine/editor/lod-group-utils.js"
},
"./scene-editor/host": {
"types": "./dist/core/scene/runtime/plugin-host.d.ts",
"default": "./dist/core/scene/runtime/plugin-host.js"
}
}
}
5 changes: 5 additions & 0 deletions packages/cc-module/statics/cc-template.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,11 @@ declare const CC_PHYSICS_AMMO: boolean;
declare const CC_PHYSICS_BUILTIN: boolean;
declare const cc: any;

declare module 'cc/overwrite' {
function overwrite(engine: typeof import('cc')): void;
export = overwrite;
}

// polyfills for editor
declare module 'cc' {
interface CCObject {
Expand Down
Loading
Loading