- 该包来自 form2yaml,我只是做了 js 转 ts, 并增加了类型定义。
实现 Form 表单和 YAML 数据的高效转换。
- 保留 YAML 注释,结构与注释同步更新
- 支持表单 key 与 YAML key 映射(keyMap)
- 支持字段空值处理(emptyMode)
- 支持 YAML 数据校验(validate)
- 支持部分字段合并/忽略
- 基于
js-yaml
、lodash
、async-validator
实现
npm install @mrtian/form2yaml
import Form2Yaml from '@mrtian/form2yaml';
const yaml = `
meta:
name: test # 注释
namespace: default
`;
const form2Yaml = new Form2Yaml(yaml);
console.log(form2Yaml.getJson());
// 输出:{ meta: { name: 'test', namespace: 'default' } }
const yaml = `
meta:
name: test # 注释
namespace: default
`;
const form2Yaml = new Form2Yaml(yaml, {
keyMap: { name: 'meta.name' }
});
console.log(form2Yaml.getJson()); // { name: 'test' }
console.log(form2Yaml.getJson('all'));
// { name: 'test', meta: { namespace: 'default' } }
const yaml = `
meta:
name: test # 注释
namespace: default
`;
const form2Yaml = new Form2Yaml(yaml);
form2Yaml.setJson({ meta: { name: 'newName' } });
console.log(form2Yaml.getYaml());
// meta:
// name: newName # 注释
// namespace: default
const yaml = `
meta:
name: test # 注释
namespace: default
`;
const form2Yaml = new Form2Yaml(yaml, {
emptyMode: { 'meta.namespace': 'retain' }
});
form2Yaml.setJson({ meta: { name: 'newName', namespace: undefined } });
console.log(form2Yaml.getYaml());
// meta:
// name: newName # 注释
// namespace:
const yaml = `
meta:
name: test # 注释
namespace: default
`;
const form2Yaml = new Form2Yaml(yaml);
const newYaml = `
meta:
name: newName # 注释
namespace: default
`;
form2Yaml.setYaml(newYaml);
const yaml = `
meta:
name: test # 注释
age: NaN
`;
const form2Yaml = new Form2Yaml(yaml, {
rules: { 'meta.age': [{ pattern: /^\d+$/, message: '年龄必须为数字' }] }
});
form2Yaml.validate().then(() => {
console.log('校验通过');
}).catch(err => {
console.log('校验失败', err);
});
npm run build # TypeScript 编译
npm run publish # 发布到 npm
- Q: 如何保留 YAML 注释?
- A: 本库自动保留注释,无需额外配置。
- Q: 如何自定义字段映射?
- A: 通过 options.keyMap 配置。
- Q: 如何校验 YAML?
- A: 通过 options.rules 配置校验规则,调用 validate 方法。
如有问题或建议,欢迎提 issue 或联系作者邮箱:mrtian@foxmail.com