一、概要设计
1、架构图 | architecture diagram
2、move编译器构建原理图
二、详细设计
1、move编译器接口
1.1 支持的命令
$mc support-cmds [OPTIONS]
命令选项:
选项 | 描述 |
---|---|
| 输出JSON格式 |
标准输出:
{ "code": 0, "message": "success", "data": [ "compile", "test", "package", "disassemble" ] }
错误输出:
1.2 编译命令
$mc compile [OPTIONS]
命令选项:
选项 | 描述 |
---|---|
| 输出JSON格式 |
--path | 工程路径 |
标准输出:
{ "code": 0, "message": "success" }
错误输出:
{ "code": 1, "message": "compile fail", "data": { "diagnostics": [] } }
1.3 测试命令
$mc test [OPTIONS]
命令选项:
选项 | 描述 |
---|---|
| 输出JSON格式 |
--path | 工程路径 |
--filter | 需要测试的函数 |
标准输出:
{ "code": 0, "message": "success", "data": { "test_cases": [], } }
错误输出:
{ "code": 1, "message": "compile fail", "data": { "diagnostics": [] } }
1.4 打包命令
$mc package [OPTIONS]
命令选项:
选项 | 描述 |
---|---|
| 输出JSON格式 |
--path | 工程路径 |
标准输出:
{ "code": 0, "message": "success", "data": { "target_path": "", } }
错误输出:
{ "code": 1, "message": "compile fail", "data": { "diagnostics": [] } }
1.5 反编译命令
$mc disassemble [OPTIONS]
命令选项:
选项 | 描述 |
---|---|
| 输出JSON格式 |
--move-bytecode-path | Move字节码文件路径 |
标准输出:
{ "code": 0, "message": "success", "data": { "code": "反编译后的代码", } }
错误输出:
{ "code": 1, "message": "disassemble fail", "data": { "diagnostics": [] } }
2、move-api
2.1 package.d.ts
import { WasmFs } from '@wasmer/wasmfs'; export interface IDependency { git?: string; rev?: string; local?: string; } export interface ITarget { path?: string; hash?: string; // 目标文件Hash } export interface IMovePackage { name?: string; version?: string; addresses?: Map<string, string>; dependencies?: Map<string, IDependency>; devDependencies?: Map<string, IDependency>; build(): Promise<void>; test(): Promise<void>; package(): Promise<ITarget>; } export declare type MoveOptions = { packagePath: string; test: boolean; alias?: Map<string, string>; initFunction?: string; }; export declare function createMovePackage(wasmfs: WasmFs, opts: MoveOptions): IMovePackage;
2.2 disassemble.d.ts
import { WasmFs } from '@wasmer/wasmfs'; export declare function disassemble(wasmfs: WasmFs, mvPath: string): Promise<string>;