@anyxml/meta-data
本仓库主要用于收集小程序模板的元数据,以供编辑器插件使用辅助编码。
所有数据来源都是基于公开渠道获取的:
实现方式:本项目会先基于上面公开信息做一个简单的拆分,将单个组件拆分成【组件属性列表】和【组件剩余文档】两个部分,
- 将【属性列表】喂给大模型,推导出一个属性相关的 JSON 数据;
- 将【组件剩余文档】直接生成一个字符串塞到组件的
description 属性上;
然后将这些数据整合成一个组件元数据,最后将所有组件合并生成一个大 JSON,JSON 文件的类型定义如下:
这只是大概(不全)的结构,完整详情可以查看定义文件
interface AnyXML {
common: {
[key: 'base' | 'control' | 'event']: {
trigger?: { key: string, description: string }[]
exclude?: string[]
attrs: Attr[]
}
},
elements: {
name: string
description?: string
attrs: Attr[]
}
}
interface Attr {
name: string
type?: string
required?: boolean
defaultValue?: any
versionRequirement?: string
description?: string
enumValues?: { value: string, description?: string }[]
}
安装
npm install @anyxml/meta-data
使用
使用内置类型:
import type { AnyXML } from '@anyxml/meta-data'
在脚本中使用JSON数据:
import meta4axml from '@anyxml/meta-data/dist/axml.json'
import meta4wxml from '@anyxml/meta-data/dist/wxml.json'
import antdmini from '@anyxml/meta-data/dist/antd-mini/latest.json'
使用CDN上的JSON数据:
原生模板开发工作流
首次下载此仓库
- 安装子模块:
git submodule update --init --recursive
- 更新子模块:
git submodule foreach git fetch
- 查看子模块:
git submodule foreach git diff origin/master
wechat
1. 先下载源文件
将源 html 代码原封不动下载到 data/wechat/html
node src/wechat/generate.mjs 1
2. 将 html 中的嵌套 table 打平生成新的 html
因为要交给大模型来生成 json 元数据,大模型对 markdown 识别更准点,但 markdown 对嵌套的 table 支持不友好,所以需要先将 html 中的嵌套 table 给打平了。
最终生成的代码保存在 data/wechat/html2 中。
另外,此步也会将文档中 a 标签的相对链接替换成绝对链接。
node src/wechat/generate.mjs 2
注意检查控制台输出的参数是否符合预期,一会会输出下面两种结构(如果不是,则要注意下了):
$ { zone: '# 通用属性', name: 'worklet:ongesture', label: 'eventhandler 回调参数' }
$ { zone: '# 通用属性', name: 'referrer-policy', label: '合法值' }
3. 生成 rest.md 和 attrs.md
node src/wechat/generate.mjs 3
运行命令会将【属性】相关的标题及其子标题输出在控制台上,注意查看是否符合预期,一般应该会出现下面内容:
$
$
$
$
$
4. 使用 src/wechat/prompts.md 塞给大模型,然后用 gen/wechat/*/attrs.md 提问
获取答案后可以再执行 node src/wechat/check.mjs 脚本去校验结果
数据量比较大,可以写脚本自动去大模型上问答
5. 合并生成最终产物
node src/wechat/merge.mjs
alipay
1. 先更新子模块内容
cd data/alipay
git log
git checkout main && git fetch
git diff origin/main
git pull origin main
cd -
2. 执行 markdown 拆分
node src/alipay/generate.mjs
git diff
打开一个大模型聊天界面,将 src/alipay/prompts.md 中的内容喂给它,然后读取出它返回的 json 塞到 attrs.json 中。
注意,当有 attrs.md 中多个 table 时,大模型填充的数据不一定准确,有时需要手动处理。
最后,可以运行下面脚本检查下生成的结果是不是都符合预期:
node src/alipay/check.mjs
3. 检查自定义组件的更新
没有灵活的方案,需要用第一步查到的上一次处理时的 commit id 和最新的比,判断下是否有相关文件更新了,然后人肉处理
4. 合并生成最终文件
node src/alipay/merge.mjs
组件库开发工作流
antd-mini
1. 更新模块
用于获取最新版本号
git submodule foreach git fetch
2. 运行脚本自动生成
注意更新脚本中的版本号
node src/antd-mini/make.mjs
eof