@mica-js/sdk 0.2.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +261 -64
- package/dist/metadata/schema.js +28 -1
- package/dist/metadata/types.d.ts +7 -0
- package/package.json +7 -2
package/README.md
CHANGED
|
@@ -1,38 +1,43 @@
|
|
|
1
1
|
# @mica-js/sdk
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
用于开发 Mica 器件(Device)和界面组件(Widget)。SDK 提供类型定义和 `mica` CLI,将 TypeScript、DDL 与 JSON 元数据构建成宿主可加载的组件。
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
- **Device**:使用 DDL 描述引脚和仿真行为,按需编写 TypeScript 适配器。
|
|
6
|
+
- **Widget**:使用 TypeScript 绘制界面,通过端口接收和发送数据。
|
|
7
|
+
- **组件产物**:每个组件一份 JS 和一份 JSON,依赖与资源全部内联。
|
|
6
8
|
|
|
7
|
-
|
|
9
|
+
## 快速开始
|
|
8
10
|
|
|
9
|
-
|
|
10
|
-
src/
|
|
11
|
-
devices/<id>/
|
|
12
|
-
device.json
|
|
13
|
-
model.ddl
|
|
14
|
-
index.ts # 可选,省略时生成最小同步工厂
|
|
15
|
-
widgets/<id>/
|
|
16
|
-
widget.json
|
|
17
|
-
index.ts
|
|
18
|
-
shared/
|
|
19
|
-
```
|
|
11
|
+
建议使用 Node.js 24 和 pnpm。`mica` 命令随 `@mica-js/sdk` 安装,不需要另外安装名为 `mica` 的包,也不需要自行配置 Vite。
|
|
20
12
|
|
|
21
|
-
|
|
13
|
+
### 1. 安装
|
|
22
14
|
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
widgets/<id>/widget.js
|
|
15
|
+
```shell
|
|
16
|
+
mkdir my-components
|
|
17
|
+
cd my-components
|
|
18
|
+
pnpm init
|
|
19
|
+
pnpm add -D @mica-js/sdk typescript
|
|
29
20
|
```
|
|
30
21
|
|
|
31
|
-
|
|
22
|
+
在 `package.json` 中添加以下字段,保留安装生成的依赖配置:
|
|
23
|
+
|
|
24
|
+
```json
|
|
25
|
+
{
|
|
26
|
+
"private": true,
|
|
27
|
+
"type": "module",
|
|
28
|
+
"scripts": {
|
|
29
|
+
"build": "mica build",
|
|
30
|
+
"prepare:types": "mica prepare",
|
|
31
|
+
"typecheck": "mica prepare && tsc --noEmit"
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
```
|
|
32
35
|
|
|
33
|
-
|
|
36
|
+
这里的 `private` 表示组件源码工程不作为 npm 包发布,不影响生成和交付组件产物。
|
|
34
37
|
|
|
35
|
-
|
|
38
|
+
### 2. 创建工程配置
|
|
39
|
+
|
|
40
|
+
在工程根目录创建 `mica.config.ts`:
|
|
36
41
|
|
|
37
42
|
```typescript
|
|
38
43
|
import { defineConfig } from '@mica-js/sdk/config';
|
|
@@ -40,76 +45,268 @@ import { defineConfig } from '@mica-js/sdk/config';
|
|
|
40
45
|
export default defineConfig({});
|
|
41
46
|
```
|
|
42
47
|
|
|
43
|
-
CLI
|
|
48
|
+
该文件是 CLI 识别 Mica 工程的标志。空配置默认读取 `src`,输出到 `dist`。
|
|
49
|
+
|
|
50
|
+
创建 `tsconfig.json`:
|
|
51
|
+
|
|
52
|
+
```json
|
|
53
|
+
{
|
|
54
|
+
"compilerOptions": {
|
|
55
|
+
"target": "ES2022",
|
|
56
|
+
"module": "ESNext",
|
|
57
|
+
"moduleResolution": "Bundler",
|
|
58
|
+
"lib": ["ES2023", "DOM"],
|
|
59
|
+
"strict": true,
|
|
60
|
+
"noEmit": true,
|
|
61
|
+
"skipLibCheck": true,
|
|
62
|
+
"allowArbitraryExtensions": true,
|
|
63
|
+
"verbatimModuleSyntax": true
|
|
64
|
+
},
|
|
65
|
+
"include": ["src", "mica.config.ts"]
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### 3. 编写第一个 Widget
|
|
70
|
+
|
|
71
|
+
创建 `src/widgets/lamp/widget.json`:
|
|
44
72
|
|
|
45
|
-
|
|
73
|
+
```json
|
|
74
|
+
{
|
|
75
|
+
"kind": "widget",
|
|
76
|
+
"id": "lamp",
|
|
77
|
+
"version": "1.0.0",
|
|
78
|
+
"displayName": "Lamp"
|
|
79
|
+
}
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
同目录创建 `index.ts`:
|
|
46
83
|
|
|
47
84
|
```typescript
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
85
|
+
import type { WidgetFactory } from '@mica-js/sdk/widget';
|
|
86
|
+
|
|
87
|
+
const create: WidgetFactory = (api) => ({
|
|
88
|
+
render(ctx) {
|
|
89
|
+
ctx.fillStyle = '#22aa55';
|
|
90
|
+
ctx.fillRect(0, 0, api.width, api.height);
|
|
91
|
+
},
|
|
53
92
|
});
|
|
93
|
+
|
|
94
|
+
export default create;
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### 4. 检查并构建
|
|
98
|
+
|
|
99
|
+
```shell
|
|
100
|
+
pnpm run typecheck
|
|
101
|
+
pnpm run build
|
|
54
102
|
```
|
|
55
103
|
|
|
56
|
-
|
|
104
|
+
生成:
|
|
105
|
+
|
|
106
|
+
```text
|
|
107
|
+
dist/
|
|
108
|
+
widgets/lamp/widget.json
|
|
109
|
+
widgets/lamp/widget.js
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
将这两个文件交给支持 Mica 组件的宿主加载。CLI 负责构建,预览界面和运行环境由宿主提供;源码变更后重新运行构建。
|
|
113
|
+
|
|
114
|
+
也可以从随包提供的 [basic 模板](./templates/basic/) 开始,其中包含电阻器件和通过亮度端口更新的灯组件。安装 SDK 后,模板位于 `node_modules/@mica-js/sdk/templates/basic`;复制到自己的工程目录后,执行 `pnpm add -D @mica-js/sdk@latest typescript`,更新模板的 SDK 依赖并安装当前发布版本。
|
|
115
|
+
|
|
116
|
+
## 使用 mica CLI
|
|
117
|
+
|
|
118
|
+
在终端通过 `pnpm exec` 调用项目本地安装的 CLI;在 `package.json` 的 scripts 中可直接使用 `mica`。
|
|
119
|
+
|
|
120
|
+
| 命令 | 用途 |
|
|
121
|
+
| -------------------------------- | -------------------------------------------------------- |
|
|
122
|
+
| `pnpm exec mica build` | 生成 DDL 类型、检查元数据并构建所有组件 |
|
|
123
|
+
| `pnpm exec mica prepare` | 只生成 DDL 类型声明,不构建组件 |
|
|
124
|
+
| `pnpm exec mica prepare --watch` | 启动 DDL 类型监听,适合与编辑器或 `tsc --watch` 同时使用 |
|
|
125
|
+
| `pnpm exec mica --help` | 查看命令和参数;仅输入 `mica` 也会显示帮助 |
|
|
126
|
+
|
|
127
|
+
常用参数:
|
|
128
|
+
|
|
129
|
+
| 参数 | 含义 |
|
|
130
|
+
| -------------------- | ----------------------------------------------- |
|
|
131
|
+
| `--root <dir>` | 从指定目录开始查找工程,默认当前目录 |
|
|
132
|
+
| `--config <file>` | 显式指定 `mica.config.ts`;相对路径基于查找起点 |
|
|
133
|
+
| `--source-dir <dir>` | 覆盖配置中的源码目录 |
|
|
134
|
+
| `--watch` | 监听 DDL 文件,仅用于 `prepare` |
|
|
57
135
|
|
|
58
136
|
```shell
|
|
59
|
-
mica build
|
|
60
|
-
mica
|
|
61
|
-
mica prepare --
|
|
62
|
-
mica build --config ./mica.config.ts
|
|
137
|
+
pnpm exec mica build --root components
|
|
138
|
+
pnpm exec mica build --config mica.config.ts
|
|
139
|
+
pnpm exec mica prepare --source-dir content
|
|
63
140
|
```
|
|
64
141
|
|
|
65
|
-
`mica
|
|
142
|
+
默认从当前目录向上寻找最近的 `mica.config.ts`,其所在目录作为工程根目录。因此,在工程子目录中也能运行命令。`--root` 是查找起点,不一定是最终工程根目录。显式配置文件也必须命名为 `mica.config.ts`。
|
|
143
|
+
|
|
144
|
+
`prepare --watch` 只更新类型声明,不会持续构建 JS。当前 CLI 不提供开发服务器。
|
|
145
|
+
|
|
146
|
+
## 工程目录
|
|
147
|
+
|
|
148
|
+
一个工程可以同时包含多个 Device 和 Widget:
|
|
149
|
+
|
|
150
|
+
```text
|
|
151
|
+
my-components/
|
|
152
|
+
mica.config.ts
|
|
153
|
+
package.json
|
|
154
|
+
tsconfig.json
|
|
155
|
+
src/
|
|
156
|
+
devices/
|
|
157
|
+
resistor/
|
|
158
|
+
device.json
|
|
159
|
+
model.ddl
|
|
160
|
+
index.ts # 可选的宿主适配器
|
|
161
|
+
widgets/
|
|
162
|
+
lamp/
|
|
163
|
+
widget.json
|
|
164
|
+
index.ts
|
|
165
|
+
shared/ # 组件共享的源码或内联资源
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
组件目录名必须与元数据 `id` 相同,只使用字母、数字和中划线。各组件的 `id` 和 `version` 在自己的 JSON 中维护,与工程 `package.json` 的名称和版本分开。
|
|
169
|
+
|
|
170
|
+
`shared` 不是组件入口;组件可以通过普通静态导入复用其中的代码。构建时,共享代码会分别打包进每个使用它的组件,不生成共享 chunk。
|
|
66
171
|
|
|
67
|
-
|
|
172
|
+
## 添加 Device
|
|
68
173
|
|
|
69
|
-
|
|
174
|
+
创建 `src/devices/resistor/device.json`:
|
|
175
|
+
|
|
176
|
+
```json
|
|
177
|
+
{
|
|
178
|
+
"kind": "device",
|
|
179
|
+
"id": "resistor",
|
|
180
|
+
"version": "1.0.0",
|
|
181
|
+
"displayName": "Resistor",
|
|
182
|
+
"designatorPrefix": "R",
|
|
183
|
+
"properties": {
|
|
184
|
+
"resistance": {
|
|
185
|
+
"type": "number",
|
|
186
|
+
"required": false,
|
|
187
|
+
"default": 1000,
|
|
188
|
+
"unit": "ohm"
|
|
189
|
+
}
|
|
190
|
+
},
|
|
191
|
+
"pins": { "a": {}, "b": {} }
|
|
192
|
+
}
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
同目录创建 `model.ddl`:
|
|
196
|
+
|
|
197
|
+
```text
|
|
198
|
+
device Resistor(resistance: number default 1000) {
|
|
199
|
+
pin a = [resistor(to: b, resistance: resistance)];
|
|
200
|
+
pin b;
|
|
201
|
+
}
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
纯 DDL 器件不需要 `index.ts`,SDK 会生成最小同步工厂。需要与宿主交换输入、输出或资源时,再添加适配器:
|
|
70
205
|
|
|
71
206
|
```typescript
|
|
72
207
|
import type { Factory } from './model.ddl';
|
|
73
208
|
|
|
74
|
-
const create: Factory = (
|
|
75
|
-
sync(batch) {
|
|
76
|
-
// ctx.props、ctx.inputs、ctx.memory 和 batch.outputs 按该 DDL 精确投影。
|
|
77
|
-
},
|
|
209
|
+
const create: Factory = () => ({
|
|
210
|
+
sync(batch) {},
|
|
78
211
|
dispose() {},
|
|
79
212
|
});
|
|
80
213
|
|
|
81
214
|
export default create;
|
|
82
215
|
```
|
|
83
216
|
|
|
84
|
-
|
|
217
|
+
工厂和适配器钩子必须同步返回。使用生成的 `Factory` 类型可以获得与 DDL 对应的上下文、属性、输入和批次输出类型。
|
|
218
|
+
|
|
219
|
+
### DDL 类型声明
|
|
220
|
+
|
|
221
|
+
首次编写适配器或修改 DDL 后,运行:
|
|
85
222
|
|
|
86
223
|
```shell
|
|
87
|
-
mica prepare
|
|
88
|
-
mica prepare --watch
|
|
89
|
-
mica prepare --root . --source-dir src
|
|
224
|
+
pnpm exec mica prepare
|
|
90
225
|
```
|
|
91
226
|
|
|
92
|
-
`mica build`
|
|
227
|
+
命令会在 `model.ddl` 旁生成 `model.d.ddl.ts`。开发时可单独运行 `pnpm exec mica prepare --watch` 保持声明更新。`mica build` 也会生成声明;单独运行 `tsc` 前则需要先执行 `mica prepare`。
|
|
228
|
+
|
|
229
|
+
使用 `import type` 引用 DDL 类型,不要把 DDL 文件作为运行时 JS 模块导入。在 `.gitignore` 中忽略构建产物和生成的声明:
|
|
230
|
+
|
|
231
|
+
```gitignore
|
|
232
|
+
dist/
|
|
233
|
+
node_modules/
|
|
234
|
+
**/*.d.ddl.ts
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
## 项目配置
|
|
238
|
+
|
|
239
|
+
```typescript
|
|
240
|
+
import { defineConfig } from '@mica-js/sdk/config';
|
|
241
|
+
|
|
242
|
+
export default defineConfig({
|
|
243
|
+
sourceDir: 'src',
|
|
244
|
+
outDir: 'dist',
|
|
245
|
+
alias: { '@': './src' },
|
|
246
|
+
});
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
| 字段 | 默认值 | 用途 |
|
|
250
|
+
| ----------- | ------ | ------------------------------------------ |
|
|
251
|
+
| `sourceDir` | `src` | 包含 `devices` 和 `widgets` 的源码目录 |
|
|
252
|
+
| `outDir` | `dist` | 组件输出目录 |
|
|
253
|
+
| `alias` | 无 | 静态导入的路径别名,例如 `@/shared/colors` |
|
|
254
|
+
| `base` | `/` | 底层构建的基准路径,不配置预览服务 |
|
|
255
|
+
|
|
256
|
+
源码、输出和别名路径都相对于工程根目录解析。输出目录不能是工程根目录或其上级目录,也不能与源码目录互相包含,以免构建清理覆盖源码。
|
|
257
|
+
|
|
258
|
+
`alias` 用于构建时解析导入。若 TypeScript 源码也使用别名,需要在 `tsconfig.json` 的 `compilerOptions.paths` 中配置对应映射。
|
|
259
|
+
|
|
260
|
+
Vite 已由 SDK 管理,不需要额外安装 Vite 或创建 `vite.config.ts`。配置文件是可执行 TypeScript,只应加载受信任的工程配置。
|
|
261
|
+
|
|
262
|
+
## 产物与资源
|
|
263
|
+
|
|
264
|
+
运行 `mica build` 后,每个组件生成一对文件:
|
|
265
|
+
|
|
266
|
+
```text
|
|
267
|
+
dist/
|
|
268
|
+
devices/resistor/device.json
|
|
269
|
+
devices/resistor/device.js
|
|
270
|
+
widgets/lamp/widget.json
|
|
271
|
+
widgets/lamp/widget.js
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
- Device JS 具名导出 `model` 和同步 `create` 工厂;Widget JS 默认导出同步工厂。
|
|
275
|
+
- 每份 JS 都是独立的 ESM,依赖在构建时打包,产物不保留外部模块导入、`import()` 或 `import.meta`。
|
|
276
|
+
- 资源必须内联。文本可以使用 `?raw` 导入,标准 `?url` 资源导入在库构建中内联。
|
|
277
|
+
- 构建结果仅包含 JS 和 JSON。会产生独立 CSS 或其他资源文件的入口会构建失败。
|
|
278
|
+
|
|
279
|
+
组件产物不是 npm 包;将文件交付给宿主的组件库或静态资源服务即可,模块加载和执行隔离由宿主负责。
|
|
280
|
+
|
|
281
|
+
## 元数据
|
|
282
|
+
|
|
283
|
+
`device.json` 和 `widget.json` 由组件作者维护,用于声明显示名称、属性、端口以及器件符号等信息。SDK 检查元数据结构和目录 ID,但不会从 DDL 自动生成 JSON;器件属性、引脚和端口需要与实际实现保持一致。
|
|
284
|
+
|
|
285
|
+
器件的 `symbol` 可以定义矢量图形、引脚连接点和位号位置,示例见 [电阻模板](./templates/basic/src/devices/resistor/device.json)。Widget 的端口订阅与重绘示例见 [灯组件模板](./templates/basic/src/widgets/lamp/index.ts)。
|
|
286
|
+
|
|
287
|
+
需要自行检查元数据时,使用 `@mica-js/sdk/metadata` 的 `validateMetadata`、`deviceMetadataSchema` 或 `widgetMetadataSchema`。字节属性目前不支持在 JSON 中设置 `default`。
|
|
288
|
+
|
|
289
|
+
## 常见问题
|
|
93
290
|
|
|
94
|
-
|
|
291
|
+
**提示找不到 `mica` 命令。** 确认已在当前工程安装 `@mica-js/sdk`,在终端使用 `pnpm exec mica`,或通过 package scripts 调用。
|
|
95
292
|
|
|
96
|
-
|
|
293
|
+
**提示找不到 `mica.config.ts`。** 在工程根目录添加配置文件,或用 `--root` / `--config` 指向现有工程。Device 与 Widget 工程都需要该标志文件。
|
|
97
294
|
|
|
98
|
-
|
|
295
|
+
**TypeScript 无法导入 `./model.ddl`。** 先运行 `mica prepare`,确认生成了 `model.d.ddl.ts`,并启用 `allowArbitraryExtensions` 与 `moduleResolution: "Bundler"`。
|
|
99
296
|
|
|
100
|
-
|
|
297
|
+
**修改源码后产物没有更新。** 重新运行 `mica build`;`prepare --watch` 只处理类型声明。
|
|
101
298
|
|
|
102
|
-
##
|
|
299
|
+
## API 入口
|
|
103
300
|
|
|
104
|
-
| 入口 |
|
|
105
|
-
| ----------------------- |
|
|
106
|
-
| `@mica-js/sdk`
|
|
107
|
-
| `@mica-js/sdk/device` |
|
|
108
|
-
| `@mica-js/sdk/
|
|
109
|
-
| `@mica-js/sdk/
|
|
110
|
-
| `@mica-js/sdk/
|
|
111
|
-
| `@mica-js/sdk/
|
|
112
|
-
| `@mica-js/sdk/
|
|
113
|
-
| `@mica-js/sdk
|
|
301
|
+
| 入口 | 用途 |
|
|
302
|
+
| ----------------------- | --------------------------------------------------- |
|
|
303
|
+
| `@mica-js/sdk/widget` | `WidgetFactory`、绘制、输入、端口、资源与音频类型 |
|
|
304
|
+
| `@mica-js/sdk/device` | 器件上下文、工厂、批次、通道与 JIT 类型 |
|
|
305
|
+
| `@mica-js/sdk/metadata` | Device / Widget 元数据类型、Schema 与校验 |
|
|
306
|
+
| `@mica-js/sdk/config` | `defineConfig()` 与 `MicaConfig` |
|
|
307
|
+
| `@mica-js/sdk/prepare` | 程序化类型生成和监听 |
|
|
308
|
+
| `@mica-js/sdk/model` | 器件模型 IR、Builder 与校验 |
|
|
309
|
+
| `@mica-js/sdk/ddl` | 程序化 DDL 编译与类型投影 |
|
|
310
|
+
| `@mica-js/sdk` | `createDeviceLibrary`、`createBoard` 与宿主仿真类型 |
|
|
114
311
|
|
|
115
|
-
|
|
312
|
+
Widget / Device 作者类型入口不会引入 Vite 或 Node 构建依赖。编写组件通常只需类型导入,实际代码由宿主通过构建产物加载。
|
package/dist/metadata/schema.js
CHANGED
|
@@ -148,7 +148,20 @@ function editorSchema() {
|
|
|
148
148
|
whenEquals('kind', 'text', objectSchema({ kind: { type: 'string', const: 'text' } })),
|
|
149
149
|
whenEquals('kind', 'textarea', objectSchema({ kind: { type: 'string', const: 'textarea' } })),
|
|
150
150
|
whenEquals('kind', 'checkbox', objectSchema({ kind: { type: 'string', const: 'checkbox' } })),
|
|
151
|
-
whenEquals('kind', 'file', objectSchema({
|
|
151
|
+
whenEquals('kind', 'file', objectSchema({
|
|
152
|
+
kind: { type: 'string', const: 'file' },
|
|
153
|
+
extensions: {
|
|
154
|
+
type: 'array',
|
|
155
|
+
description: 'Allowed dotted filename extensions, matched case-insensitively by the host.',
|
|
156
|
+
uniqueItems: true,
|
|
157
|
+
items: { type: 'string', pattern: '^\\.[A-Za-z0-9]+(?:[.-][A-Za-z0-9]+)*$' },
|
|
158
|
+
},
|
|
159
|
+
maxSize: {
|
|
160
|
+
type: 'integer',
|
|
161
|
+
exclusiveMinimum: 0,
|
|
162
|
+
description: 'Maximum file size in bytes.',
|
|
163
|
+
},
|
|
164
|
+
})),
|
|
152
165
|
whenEquals('kind', 'select', objectSchema({
|
|
153
166
|
kind: { type: 'string', const: 'select' },
|
|
154
167
|
labels: {
|
|
@@ -340,6 +353,20 @@ export const deviceMetadataSchema = {
|
|
|
340
353
|
properties: {
|
|
341
354
|
kind: { type: 'string', const: 'device' },
|
|
342
355
|
...headerProperties(),
|
|
356
|
+
templates: {
|
|
357
|
+
type: 'array',
|
|
358
|
+
description: 'Platform project template IDs in display priority order.',
|
|
359
|
+
uniqueItems: true,
|
|
360
|
+
items: { type: 'string', minLength: 1 },
|
|
361
|
+
},
|
|
362
|
+
recommends: objectSchema({
|
|
363
|
+
widgets: {
|
|
364
|
+
type: 'array',
|
|
365
|
+
description: 'Recommended full widget IDs in display priority order; not dependencies.',
|
|
366
|
+
uniqueItems: true,
|
|
367
|
+
items: { type: 'string', minLength: 1 },
|
|
368
|
+
},
|
|
369
|
+
}),
|
|
343
370
|
designatorPrefix: { type: 'string', pattern: '^\\S+$' },
|
|
344
371
|
properties: { $ref: '#/$defs/properties' },
|
|
345
372
|
pins: { $ref: '#/$defs/pins' },
|
package/dist/metadata/types.d.ts
CHANGED
|
@@ -31,6 +31,8 @@ export interface CheckboxEditor {
|
|
|
31
31
|
}
|
|
32
32
|
export interface FileEditor {
|
|
33
33
|
readonly kind: 'file';
|
|
34
|
+
readonly extensions?: readonly string[];
|
|
35
|
+
readonly maxSize?: number;
|
|
34
36
|
}
|
|
35
37
|
export interface SelectEditor {
|
|
36
38
|
readonly kind: 'select';
|
|
@@ -75,6 +77,7 @@ export interface EnumProperty extends PropertyCommon {
|
|
|
75
77
|
*/
|
|
76
78
|
export interface BytesProperty extends PropertyCommon {
|
|
77
79
|
readonly type: 'bytes';
|
|
80
|
+
readonly editor?: FileEditor;
|
|
78
81
|
}
|
|
79
82
|
export type PropertyMetadata = NumberProperty | BooleanProperty | StringProperty | EnumProperty | BytesProperty;
|
|
80
83
|
export interface PortMetadata {
|
|
@@ -170,6 +173,10 @@ interface MetadataHeader {
|
|
|
170
173
|
}
|
|
171
174
|
export interface DeviceMetadata extends MetadataHeader {
|
|
172
175
|
readonly kind: 'device';
|
|
176
|
+
readonly templates?: readonly string[];
|
|
177
|
+
readonly recommends?: {
|
|
178
|
+
readonly widgets?: readonly string[];
|
|
179
|
+
};
|
|
173
180
|
readonly designatorPrefix?: string;
|
|
174
181
|
readonly properties?: Readonly<Record<string, PropertyMetadata>>;
|
|
175
182
|
readonly pins?: Readonly<Record<string, PinMetadata>>;
|
package/package.json
CHANGED
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mica-js/sdk",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "Device and widget author APIs with CLI-managed content builds",
|
|
5
5
|
"license": "MIT",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "git+https://github.com/x-botlab/mica-js.git",
|
|
9
|
+
"directory": "packages/sdk"
|
|
10
|
+
},
|
|
6
11
|
"type": "module",
|
|
7
12
|
"sideEffects": false,
|
|
8
13
|
"bin": {
|
|
@@ -54,7 +59,7 @@
|
|
|
54
59
|
"@mica-js/ddl": "0.2.0",
|
|
55
60
|
"@mica-js/device-model": "0.5.0",
|
|
56
61
|
"@mica-js/simulator": "2.1.0",
|
|
57
|
-
"@mica-js/widget": "0.3.
|
|
62
|
+
"@mica-js/widget": "0.3.1",
|
|
58
63
|
"ajv": "^8.17.1",
|
|
59
64
|
"rolldown": "^1.2.14",
|
|
60
65
|
"vite": "^8.3.4"
|