e10-data 0.1.27 → 0.1.28
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/CHANGELOG.md +27 -0
- package/README.md +5 -3
- package/bin/e10-data.mjs +21 -10
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,32 @@
|
|
|
1
1
|
# 变更记录
|
|
2
2
|
|
|
3
|
+
## 0.1.28(2026-10-17)—— `module call` 支持自定义 `confType` 与 `--show-params` 精简
|
|
4
|
+
|
|
5
|
+
### 1. `module call` 新增 `--type <confType>`
|
|
6
|
+
|
|
7
|
+
- 此前 `cmdModuleCall` 把 confType **硬编码为 `api`**,无法调用 `confType` 非 `api` 的配置条目
|
|
8
|
+
(域级配置分组:`ebu` / `pmo` / `contract` / `partner` 等),报 `配置不存在或为空: confType=api …`。
|
|
9
|
+
- 新增 `--type <confType>`:**不传时默认 `api`,行为与旧版逐字节一致**(纯增量,无破坏性变更)。
|
|
10
|
+
- `--show-params` 输出新增 `conf_type`(实际使用的 confType),便于核对定位到的是哪一类条目。
|
|
11
|
+
|
|
12
|
+
### 2. `--show-params` 支持精简模式
|
|
13
|
+
|
|
14
|
+
- 四域接口的 `confAttrs.request_example` 常有上万字符(18 个 queryFields + 11 个条件节点),全量回显会把
|
|
15
|
+
「字段清单 / 占位符 / 必填项」淹没。
|
|
16
|
+
- 现默认**不回显 `request_example`**,改为返回 `request_example_omitted: true` + `request_example_hint`;
|
|
17
|
+
完整模板用 `--full`(别名 `--with-example`)取回,`--no-example` 可显式表达「要精简」。
|
|
18
|
+
- **旧行为可完整恢复**(`--full`),组参脚本 `build_query.py` 显式带 `--full`,两种环境都能跑。
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
e10-data module call --conf-key <confKey> --group ebu --type ebu --show-params # 精简(默认)
|
|
22
|
+
e10-data module call --conf-key <confKey> --group ebu --show-params --full # 回显完整 request_example
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
### 3. 同步改动
|
|
26
|
+
|
|
27
|
+
- `usage()` 的 `module` 帮助段:签名补 `[--type <confType>]` / `[--show-params [--full]]`,并补 `--type` 说明行;
|
|
28
|
+
- `README.md` 的 module call 段落(签名、参数表)同步;`package.json`(版本 + description)同步。
|
|
29
|
+
|
|
3
30
|
## 0.1.27(2026-10-15)—— 新增 `noun scope`:词库按生效范围批量检索
|
|
4
31
|
|
|
5
32
|
### 1. `noun` 族新增子命令 `scope`
|
package/README.md
CHANGED
|
@@ -283,20 +283,22 @@ e10-data attend statis [--user <人员ID>] [--begin 2026-09-01] [--end 2026-09-3
|
|
|
283
283
|
→ 按外层结构(`datajson` / `data` / `records` / 裸数组)提取精简结果。
|
|
284
284
|
|
|
285
285
|
```bash
|
|
286
|
-
e10-data module call --conf-key <confKey> --group <模块> \
|
|
286
|
+
e10-data module call --conf-key <confKey> --group <模块> [--type <confType>] \
|
|
287
287
|
[--args '<JSON>'|--args @params.json] [--query "k=v&k2=v2"] \
|
|
288
288
|
[--method GET|POST|FORM] [--header 'K: V'|--headers '<JSON>'|@file] \
|
|
289
|
-
[--limit 50] [--fields a,b|@f] [--raw] [--show-params] [--dry-run] [--timeout 60] [--json]
|
|
289
|
+
[--limit 50] [--fields a,b|@f] [--raw] [--show-params [--full]] [--dry-run] [--timeout 60] [--json]
|
|
290
290
|
```
|
|
291
291
|
|
|
292
292
|
| 参数 | 说明 |
|
|
293
293
|
|---|---|
|
|
294
294
|
| `--conf-key` / `--group` | **必填**;`confKey` 取自模块接口清单,`--group` = 模块唯一标识(confGroup,如 `WORKFLOW` / `EHR` / `DOCUMENT`) |
|
|
295
|
+
| `--type` | confType,**默认 `api`**(不传 = 与旧版行为一致);域级配置分组传该域名,如 `ebu` / `pmo` / `contract` / `partner` |
|
|
295
296
|
| `--args` | 业务参数 JSON 对象;**含中文一律用 `--args @文件`**(规避 shell 编码损坏) |
|
|
296
297
|
| `--query` | 追加 query(`k=v&k2=v2`,多对用 `&` 连接;与 `--args` 合并) |
|
|
297
298
|
| `--method` | 覆盖 `confAttrs.http_method`(`FORM` = `x-www-form-urlencoded`) |
|
|
298
299
|
| `--header` / `--headers` | 追加请求头:单条 `'K: V'`,或 JSON 对象(可 `@文件`) |
|
|
299
|
-
| `--show-params` |
|
|
300
|
+
| `--show-params` | **只打印该接口的入/出参说明、不调接口** —— 替代手工 `conf get` dump,用于正确组参;**默认省略 `request_example`**(返 `request_example_omitted` + hint),完整模板加 `--full` |
|
|
301
|
+
| `--full` / `--with-example` | 仅配合 `--show-params`:回显完整 `request_example`(等同 v0.1.27 的旧行为) |
|
|
300
302
|
| `--dry-run` | 只组装请求不发送(**凭据一律脱敏**) |
|
|
301
303
|
| `--limit` / `--fields` | 列表行数上限(默认 50,`0` = 不截断)/ 每行字段投影 |
|
|
302
304
|
| `--raw` | 不提取,原样输出响应体 |
|
package/bin/e10-data.mjs
CHANGED
|
@@ -2058,7 +2058,7 @@ async function cmdConf(sub, args, json, pos) {
|
|
|
2058
2058
|
|
|
2059
2059
|
// ---------------- module:模块配置接口调用(配置中心驱动,2026-09-28 新增)----------------
|
|
2060
2060
|
// 用途:**已确定「哪个模块的哪条具体接口」之后**,用本命令一条命令完成取数:
|
|
2061
|
-
// 复用本 CLI 已加载的凭据 → 精取该条 confAttrs(confType
|
|
2061
|
+
// 复用本 CLI 已加载的凭据 → 精取该条 confAttrs(confType 默认 api,可用 --type 指定;按 confGroup 二级定位)
|
|
2062
2062
|
// → 按 http_method / input_params 组参 → 发请求(自动禁代理 + Cookie/eteamsid/UA 三件套)
|
|
2063
2063
|
// → 按外层结构提取精简结果(datajson / data / records / 裸数组皆可)。
|
|
2064
2064
|
// 与技能自带 python 调用器 call_module.py **等价**(参数名、退出码、提取口径全对齐),区别:
|
|
@@ -2187,24 +2187,27 @@ async function moduleInvoiceToken(json, timeoutMs) {
|
|
|
2187
2187
|
async function cmdModuleCall(args, json) {
|
|
2188
2188
|
// ---- 必填与选项(缺参一律退出码 8,对齐 call_module.py)----
|
|
2189
2189
|
if (!args["conf-key"] || args["conf-key"] === true) {
|
|
2190
|
-
moduleDie(json, MODULE_EXIT.USAGE, "缺必填参数 --conf-key(用法: module call --conf-key <confKey> --group
|
|
2190
|
+
moduleDie(json, MODULE_EXIT.USAGE, "缺必填参数 --conf-key(用法: module call --conf-key <confKey> --group <模块> [--type <confType>])");
|
|
2191
2191
|
}
|
|
2192
2192
|
if (!args.group || args.group === true) {
|
|
2193
2193
|
moduleDie(json, MODULE_EXIT.USAGE, "缺必填参数 --group(模块唯一标识,如 WORKFLOW / EHR / DOCUMENT)");
|
|
2194
2194
|
}
|
|
2195
2195
|
const confKey = String(args["conf-key"]);
|
|
2196
2196
|
const group = String(args.group);
|
|
2197
|
+
// 2026-10-16:支持自定义 confType(域级配置分组,如 ebu / pmo / contract / partner)。
|
|
2198
|
+
// 不传 --type 时行为与旧版完全一致(confType 固定 api)。
|
|
2199
|
+
const confType = (typeof args.type === "string" && args.type) ? args.type : "api";
|
|
2197
2200
|
const timeoutMs = Math.max(1, parseInt(args.timeout || "60", 10) || 60) * 1000;
|
|
2198
2201
|
const limit = (args.limit === undefined || args.limit === true) ? 50 : (parseInt(String(args.limit), 10) || 0);
|
|
2199
2202
|
const fields = (typeof args.fields === "string" && args.fields) ? readListArg(args.fields).split(",").map((s) => s.trim()).filter(Boolean) : null;
|
|
2200
2203
|
|
|
2201
|
-
// ---- ① 精取该条接口配置(confType
|
|
2204
|
+
// ---- ① 精取该条接口配置(confType 默认 api,可用 --type 指定;confGroup 二级定位必带)----
|
|
2202
2205
|
let rec;
|
|
2203
|
-
try { rec = await confGetData(
|
|
2206
|
+
try { rec = await confGetData(confType, confKey, false, group); }
|
|
2204
2207
|
catch (e) {
|
|
2205
2208
|
const m = String((e && e.message) || e);
|
|
2206
2209
|
moduleDie(json, /登录态失效|未取得登录凭据/.test(m) ? MODULE_EXIT.AUTH : MODULE_EXIT.JSON,
|
|
2207
|
-
"conf get 失败:" + m + "(先核对
|
|
2210
|
+
"conf get 失败:" + m + "(先核对 confType / confGroup / confKey;自定义 confType 须显式 --type;登录态问题请重新登录)");
|
|
2208
2211
|
}
|
|
2209
2212
|
let attrs = rec.confAttrs;
|
|
2210
2213
|
if (typeof attrs === "string") {
|
|
@@ -2227,15 +2230,22 @@ async function cmdModuleCall(args, json) {
|
|
|
2227
2230
|
|
|
2228
2231
|
// ---- ③ --show-params:只给入/出参说明与请求示例,不调接口(用于正确组参)----
|
|
2229
2232
|
if (args["show-params"]) {
|
|
2233
|
+
// 2026-10-17:精简模式(默认)—— 不回显 request_example;--full / --with-example 回显。
|
|
2234
|
+
const fullExample = (args.full === true || args["with-example"] === true) && args["no-example"] !== true;
|
|
2230
2235
|
const out = {
|
|
2231
|
-
confKey, module: group, api_name: apiName,
|
|
2236
|
+
confKey, conf_type: confType, module: group, api_name: apiName,
|
|
2232
2237
|
http_method: attrs.http_method ?? null, api_path: apiPath,
|
|
2233
2238
|
business_desc: attrs.business_desc ?? null,
|
|
2234
2239
|
api_params: attrs.api_params ?? null,
|
|
2235
2240
|
input_params: attrs.input_params ?? null,
|
|
2236
2241
|
output_params: attrs.output_params ?? null,
|
|
2237
|
-
request_example: attrs.request_example ?? null,
|
|
2238
2242
|
};
|
|
2243
|
+
if (fullExample) {
|
|
2244
|
+
out.request_example = attrs.request_example ?? null;
|
|
2245
|
+
} else {
|
|
2246
|
+
out.request_example_omitted = true;
|
|
2247
|
+
out.request_example_hint = "已省略 request_example(需完整模板加 --full);组参建议用 build_query.py --set/--set-file 生成";
|
|
2248
|
+
}
|
|
2239
2249
|
console.log(JSON.stringify(out, null, 1));
|
|
2240
2250
|
return;
|
|
2241
2251
|
}
|
|
@@ -3095,14 +3105,15 @@ exp 专家包版本管理(expert-repository/v1,响应以 data.actionMsg.
|
|
|
3095
3105
|
attend 考勤 REST 接口(2026-09-07 新增,hr-attendance 病假/事假等假期余额)
|
|
3096
3106
|
attend statis [--user <人员ID>] [--begin 2026-09-01] [--end 2026-09-30] # getAttendInfoStatis 假期余额统计;--user 默认当前登录用户,--begin/--end 默认当月
|
|
3097
3107
|
module 模块配置接口调用(配置中心驱动;**已确定「哪个模块的哪条具体接口」之后**用它取数,2026-09-28 新增)
|
|
3098
|
-
module call --conf-key <confKey> --group <模块> [--args '<JSON>'|--args @params.json]
|
|
3108
|
+
module call --conf-key <confKey> --group <模块> [--type <confType>] [--args '<JSON>'|--args @params.json]
|
|
3099
3109
|
[--query "k=v&k2=v2"] [--method GET|POST|FORM] [--header 'K: V'|--headers '<JSON>'|@file]
|
|
3100
|
-
[--limit 50] [--fields a,b|@f] [--raw] [--show-params] [--dry-run] [--timeout 60] [--json]
|
|
3110
|
+
[--limit 50] [--fields a,b|@f] [--raw] [--show-params [--full]] [--dry-run] [--timeout 60] [--json]
|
|
3111
|
+
# --type:confType,默认 api(模块通道);域级自定义分组传该域名(如 ebu / pmo / contract / partner)
|
|
3101
3112
|
# 一条命令完成:精取该条 confAttrs → 按 http_method/input_params 组参 → 发请求
|
|
3102
3113
|
# (自动禁代理 + Cookie/eteamsid/UA 三件套)→ 按外层结构(datajson/data/records/裸数组)提取精简结果
|
|
3103
3114
|
# 与技能自带 python 调用器 call_module.py 等价(参数名/退出码/提取口径全对齐),但复用本 CLI 凭据缓存与
|
|
3104
3115
|
# conf 通道、零临时文件 —— 调用器首选本命令,call_module.py 仅作兜底
|
|
3105
|
-
# --show-params
|
|
3116
|
+
# --show-params:只打印入/出参说明(默认省略 request_example);--full 回显完整模板(不调接口)
|
|
3106
3117
|
# --dry-run:只组装请求不发送(凭据脱敏);--limit 0 = 不截断
|
|
3107
3118
|
# --query 多对用 & 连接;INVOICE 自动换取发票云 token(内存透传,不打印不落盘)
|
|
3108
3119
|
# 退出码:0 正常(**空结果也算正常**)|2 未登录·凭据失效|3 非 JSON·confAttrs 异常
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "e10-data",
|
|
3
|
-
"version": "0.1.
|
|
4
|
-
"description": "泛微 E10 数据接口统一 CLI(data-assistant 专家配套):登录(login xiaoe-env,环境变量 XiaoE 全局 token 换 ETEAMSID,免浏览器/免 python)/DSL 查询/数据源/文档/词库/关联字段翻译/环境参数配置中心(conf,支持 confGroup 分组)/专家包版本管理;ds 取数(list/chart/stat/count)的 appId 由调用方显式传入 --app-id(v0.1.14 起 CLI 不再自动反查;EB 建模表单 weaver-ebuilder-form-service 必须带,appId 取自 ebdf_obj.app_id;2026-10-09 起不再做 EB 权限前置校验);认证凭据**唯一来源 = weaver-work-cli**(通过 `auth export-weaver-env` 命令出口取明文凭据,**不设 e10-login 回退**;加解密由该 CLI 自行负责,本 CLI 不实现任何加解密;仅 login xiaoe-env 在无凭据时自行换 token,写 profile 仍交 e10-login set)。v0.1.17 性能改造:免凭据命令(--version/--help/未知命令)提前返回、直连 e10-login JS 入口(去掉 shell:true 的 cmd.exe 开销)、新增凭据进程间 TTL 缓存(不落明文);v0.1.19(2026-09-24)新增 ds 发现层聚合 groups/find/describe(进程内并发,全 58 分组扫表实测 ~5.5s),并修复 ds tables --name 因 listByPage 端点切换导致的关键词过滤静默失效;v0.1.18(2026-09-24)新增 ds fields-dsl(接口 /api/dw/newetl/chatBi/ds/fieldsForDSL),并移除凭据明文镜像同步(不再写 ~/.workbuddy/e10-login-cache.md);v0.1.20(2026-09-24)凭据来源切换为 weaver-work-cli 唯一来源、移除 e10-login 回退,并补齐 userId/tenantKey 传递(修复 attend statis 等命令报「缺少查询人员」的问题)。v0.1.21(2026-09-28)新增 module call —— 模块配置接口调用(配置中心驱动):已确定「哪个模块的哪条具体接口」之后的一条命令取数入口(精取该条 confAttrs → 按 http_method/input_params 组参 → 发请求(自动禁代理 + Cookie/eteamsid/UA 三件套)→ 提取精简结果),与技能自带 script/call_module.py 等价(参数名/退出码/提取口径全对齐),复用本 CLI 凭据缓存与 conf 通道、零临时文件;同时 auth 归一化与凭据缓存补齐 userAgent(供 AgentType UA 使用,缺失时从 cookie 的 agentType= 推导)。v0.1.22(2026-10-10):移除 `eb perm-page` 命令(EB 建模表单取数不再做权限前置校验,appId 直接取 ebdf_obj.app_id);`--fields`/`--group-by`/`--order` 等逗号列表支持 `@文件`(逗号字符串或 JSON 数组,与 --where/--stat/--dsl 一致,规避 shell 拆分导致的静默丢列/0 行)。v0.1.23(2026-10-13)新增 `refusal get` —— 拒答话术 getRefusalSpeechTechnique(入参仅 type,返回对象的 data = 话术字符串;默认 auto 通道 = POST multipart 表单优先、返回不含 data 时自动回退 GET ?type=,可用 --http post|get 锁定单通道)。v0.1.25(2026-10-14)新增 `scene groups|items` —— 场景定位元数据 getSceneGroups(① groups 分组骨架 / ② items --group <groupId> 组内条目),由技能 references/scene-locate/scripts/locate.mjs 整体迁入(属元数据定位接口、不取业务数据):默认输出精简 JSON(groups: groupId/groupName/itemCount/groupDesc;items: id/datasetName/datasetType/sourceId[/moduleName/sourceType/sourceGroupId/appId]/datasetDesc),--json 原样输出接口返回,计数走 stderr;--client agent|all|connector 默认 agent。v0.1.26(2026-10-15)新增 `refusal rules` —— 拒答话术规则 getRefusalSpeechRules(**无入参**,返回对象的 data = 对象数组;调用方式与 refusal get 同口径:默认 auto 通道 = POST 空 multipart 表单优先、返回不含 data 时回退 GET,可用 --http post|get 锁定单通道;人读直接打印 data 数组,--json 原样输出整个响应对象)。v0.1.27(2026-10-15)新增 `noun scope --ids <id1,id2|@ids.json>` —— 词库**按生效范围批量检索**(端点 /api/dw/newetl/chatBi/doc/getChatBiDocByScopeId,POST body = 数据集 id 的 JSON 数组;入参 = 数据集 id 列表 = `scene items --group <分组id>` 里每个条目的 `id`;命中 = allScope=1 全局词库 ∪ scopeEffectId 含任一传入 id;id 按字符串下发,避免 19 位雪花号超 2^53 丢精度)。属**新增通道**,原 `noun list --skill <skillKey>`(getChatDocsBySkillKey)行为**完全不变**。",
|
|
3
|
+
"version": "0.1.28",
|
|
4
|
+
"description": "泛微 E10 数据接口统一 CLI(data-assistant 专家配套):登录(login xiaoe-env,环境变量 XiaoE 全局 token 换 ETEAMSID,免浏览器/免 python)/DSL 查询/数据源/文档/词库/关联字段翻译/环境参数配置中心(conf,支持 confGroup 分组)/专家包版本管理;ds 取数(list/chart/stat/count)的 appId 由调用方显式传入 --app-id(v0.1.14 起 CLI 不再自动反查;EB 建模表单 weaver-ebuilder-form-service 必须带,appId 取自 ebdf_obj.app_id;2026-10-09 起不再做 EB 权限前置校验);认证凭据**唯一来源 = weaver-work-cli**(通过 `auth export-weaver-env` 命令出口取明文凭据,**不设 e10-login 回退**;加解密由该 CLI 自行负责,本 CLI 不实现任何加解密;仅 login xiaoe-env 在无凭据时自行换 token,写 profile 仍交 e10-login set)。v0.1.17 性能改造:免凭据命令(--version/--help/未知命令)提前返回、直连 e10-login JS 入口(去掉 shell:true 的 cmd.exe 开销)、新增凭据进程间 TTL 缓存(不落明文);v0.1.19(2026-09-24)新增 ds 发现层聚合 groups/find/describe(进程内并发,全 58 分组扫表实测 ~5.5s),并修复 ds tables --name 因 listByPage 端点切换导致的关键词过滤静默失效;v0.1.18(2026-09-24)新增 ds fields-dsl(接口 /api/dw/newetl/chatBi/ds/fieldsForDSL),并移除凭据明文镜像同步(不再写 ~/.workbuddy/e10-login-cache.md);v0.1.20(2026-09-24)凭据来源切换为 weaver-work-cli 唯一来源、移除 e10-login 回退,并补齐 userId/tenantKey 传递(修复 attend statis 等命令报「缺少查询人员」的问题)。v0.1.21(2026-09-28)新增 module call —— 模块配置接口调用(配置中心驱动):已确定「哪个模块的哪条具体接口」之后的一条命令取数入口(精取该条 confAttrs → 按 http_method/input_params 组参 → 发请求(自动禁代理 + Cookie/eteamsid/UA 三件套)→ 提取精简结果),与技能自带 script/call_module.py 等价(参数名/退出码/提取口径全对齐),复用本 CLI 凭据缓存与 conf 通道、零临时文件;同时 auth 归一化与凭据缓存补齐 userAgent(供 AgentType UA 使用,缺失时从 cookie 的 agentType= 推导)。v0.1.22(2026-10-10):移除 `eb perm-page` 命令(EB 建模表单取数不再做权限前置校验,appId 直接取 ebdf_obj.app_id);`--fields`/`--group-by`/`--order` 等逗号列表支持 `@文件`(逗号字符串或 JSON 数组,与 --where/--stat/--dsl 一致,规避 shell 拆分导致的静默丢列/0 行)。v0.1.23(2026-10-13)新增 `refusal get` —— 拒答话术 getRefusalSpeechTechnique(入参仅 type,返回对象的 data = 话术字符串;默认 auto 通道 = POST multipart 表单优先、返回不含 data 时自动回退 GET ?type=,可用 --http post|get 锁定单通道)。v0.1.25(2026-10-14)新增 `scene groups|items` —— 场景定位元数据 getSceneGroups(① groups 分组骨架 / ② items --group <groupId> 组内条目),由技能 references/scene-locate/scripts/locate.mjs 整体迁入(属元数据定位接口、不取业务数据):默认输出精简 JSON(groups: groupId/groupName/itemCount/groupDesc;items: id/datasetName/datasetType/sourceId[/moduleName/sourceType/sourceGroupId/appId]/datasetDesc),--json 原样输出接口返回,计数走 stderr;--client agent|all|connector 默认 agent。v0.1.26(2026-10-15)新增 `refusal rules` —— 拒答话术规则 getRefusalSpeechRules(**无入参**,返回对象的 data = 对象数组;调用方式与 refusal get 同口径:默认 auto 通道 = POST 空 multipart 表单优先、返回不含 data 时回退 GET,可用 --http post|get 锁定单通道;人读直接打印 data 数组,--json 原样输出整个响应对象)。v0.1.27(2026-10-15)新增 `noun scope --ids <id1,id2|@ids.json>` —— 词库**按生效范围批量检索**(端点 /api/dw/newetl/chatBi/doc/getChatBiDocByScopeId,POST body = 数据集 id 的 JSON 数组;入参 = 数据集 id 列表 = `scene items --group <分组id>` 里每个条目的 `id`;命中 = allScope=1 全局词库 ∪ scopeEffectId 含任一传入 id;id 按字符串下发,避免 19 位雪花号超 2^53 丢精度)。属**新增通道**,原 `noun list --skill <skillKey>`(getChatDocsBySkillKey)行为**完全不变**。 v0.1.28(2026-10-17):`module call` 支持 `--type <confType>`(自定义 confType / 域级配置分组,默认 `api`,不传时行为与旧版一致)与 `--show-params` 精简模式(默认省略 `request_example`,`--full` / `--with-example` 回显,`--no-example` 显式精简),`--show-params` 输出新增 `conf_type` 字段。",
|
|
5
5
|
"author": "e10-dw",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"type": "module",
|