@ 动态实体/ 核心
框架不可知核心模型、纯形式逻辑、规则评价引擎和实地类型词汇 @dynamic-entity 生态系统.
它不包含 Angular 和 RxJS —— 它是纯正的 TypeScript 从任何框架都可以使用,也可以在服务器上使用.
* 安装
npm install @dynamic-entity/core
* 特性
- 嵌入式实体形成模型( E)
EntityFormConfig(中文(简体) ) ——有标签的分级,子tab,巢组,阵列,和字段表显示元数据. - 纯形式逻辑 - 标签分辨率,显示值格式(
setDateFormatters页:1date编号 :datetime编号 :time),被嵌入的数据访问,并被遮掩,都作为无副作用的函数. - 规则引擎 超过18个操作者的条件评估(
EQUAL, (中文(简体) ),NOT_EQUAL, (中文(简体) ),CONTAINS, (中文(简体) ),NOT_CONTAINS, (中文(简体) ),STARTS_WITH, (中文(简体) ),ENDS_WITH, (中文(简体) ),IS_EMPTY, (中文(简体) ),IS_NOT_EMPTY, (中文(简体) ),LESS_THAN, (中文(简体) ),MORE_THAN, (中文(简体) ),LESS_THAN_EQUAL, (中文(简体) ),MORE_THAN_EQUAL, (中文(简体) ),DATE_BEFORE, (中文(简体) ),DATE_AFTER, (中文(简体) ),IN, (中文(简体) ),NOT_IN, (中文(简体) ),HAS_ITEMS, (中文(简体) ),VALUE_CHANGED产生三种行动类型:visibility, (中文(简体) ),validation,以及info。 。 。 . - Canonical 字段目录 —— 说
FIELD_TYPE_CATALOG是27个字段类型密钥的单一真理源(text, (中文(简体) ),textarea, (中文(简体) ),markdown, (中文(简体) ),number, (中文(简体) ),currency, (中文(简体) ),email, (中文(简体) ),password, (中文(简体) ),date, (中文(简体) ),datetime, (中文(简体) ),time, (中文(简体) ),monthYear, (中文(简体) ),dropdown, (中文(简体) ),radio, (中文(简体) ),checkbox, (中文(简体) ),boolean, (中文(简体) ),multiSelect, (中文(简体) ),entity-ref, (中文(简体) ),group, (中文(简体) ),array, (中文(简体) ),image, (中文(简体) ),file, (中文(简体) ),url, (中文(简体) ),phone, (中文(简体) ),slider, (中文(简体) ),rating, (中文(简体) ),color, (中文(简体) ),tags供造物者和造物者食用. - 实体参考合同 —— 说
EntityReferenceLoader,选项正常化和纯级联过滤(lookupFilter编号 :lookupPath) (中文(简体) ). - 文件合同 - 犬科医生
FileRef财务报告和审定财务报表FileUploadHandler,由图像和文件字段类型共享. - 配置验证 —— 说
validateConfig检查结构、对照目录的字段类型、每个范围独有的编号、以及永远无法解决的参考文献——包括方括号内的字段路径,并在通过时,FormRules. JSON Schema,用于编辑完成船,并配有@dynamic-entity/core/schema。同样的支票是dynamic-entity validate命令,用于在 CI 中显示配置. - 电子表格导入引擎 —— 说
deriveImportColumns, (中文(简体) ),suggestMapping财务报告和审定财务报表applyMapping将工作表行转换成与配置相对应的记录,应用字段验证符和表单的规则。 引擎还包括一个能探测到,编号 :;/ 标签 (createCsvReader, (中文(简体) ),parseCsv),重复字段的编号标题相匹配,arrayBoundFor用平板大小cellText用于渲染输入的单元格。 它是纯的,所以相同的引擎运行在浏览器和@dynamic-entity/server。 。 。 . - 记录迁移 —— 说
migrateRecord, (中文(简体) ),needsMigration, (中文(简体) ),stampRecord财务报告和审定财务报表validateMigrations将保存的记录移动为配置version变化。 纯粹,所以同样的步骤在浏览器和服务器上运行. - 行身份 ——每行对象
array字段带有$rowId(单位:千美元)ROW_ID_KEY) (中文(简体) ).applyRowIds财务报告和审定财务报表rowIdMigration给在 3.2 位码前保存的行,legacy-1, (中文(简体) ),legacy-2每次跑步都一样;newRowId做一个新鲜的。 见根 README"牛身份"部分. - 改变历史 —— 说
@dynamic-entity/core/history数字 :diffEntityRecords财务报告和审定财务报表describeEntityChanges将两个版本的记录转换成结构化的改动,以及每个句子,用任何语言,通过audit-trail-text。 。 。 .diffFormConfigs对表单的配置和规则也一样。 以下仅限无害环境管理:根据共同JS,它需要20.19+或22.12+节点,或import(). 见"根"README""变相史"部分.
QQ 快速启动
import {
evaluateFormRules,
resolveLabel,
FIELD_TYPE_CATALOG,
type FormRule,
} from '@dynamic-entity/core';
// 1. Resolve a localized label
const label = resolveLabel({ en: 'First Name', de: 'Vorname' }, 'en'); // "First Name"
// 2. Inspect the field type vocabulary
console.log(FIELD_TYPE_CATALOG.length); // 27
// 3. Raise an info banner on the `annualBudget` field when it exceeds 5,000,000
const rules: FormRule[] = [
{
formConfigId: 'client',
fieldId: 'annualBudget',
conditions: [{ operator: 'MORE_THAN', value: 5_000_000, compareType: 'value' }],
action: { type: 'info', value: 'Budget exceeds $5,000,000' },
targets: [{ id: 'annualBudget', type: 'field' }],
enabled: true,
priority: 0,
},
];
const result = evaluateFormRules(rules, { annualBudget: 6_000_000 });
console.log(result.infoBanners); // { annualBudget: 'Budget exceeds $5,000,000' }
evaluateFormRules 返回 a RuleEvaluationResult数字 :
interface RuleEvaluationResult {
hiddenFields: string[]; // fields hidden by a visibility rule
hiddenTabs: string[]; // tabs hidden by a visibility rule
shownFields: string[]; // fields a `visibility: true` rule showed
shownTabs: string[]; // tabs a `visibility: true` rule showed
validationErrors: Record<string, string>; // target id → message
validationWarnings: Record<string, string>; // target id → message
infoBanners: Record<string, string>; // target id → message
}
每个列表和地图都持有目标 作为规则名称 - 赤裸的身份证或括号内的道路
例如 [personal.status] - 不是规则ID。 隐藏胜出 表演胜出
静态 visibility: false 或者说 showWhen。您通过的数值图由相同的
名称,所以一条带有路径的规则也需要路径键入的值: flattenFieldValues
绘制地图,在地图的编号和字段下绘制 [path]通过基线记录为
第三个参数 VALUE_CHANGED 操作员,以及 { onProblem } 作为第四次
听到一个错误的规则,它被跳过而不是被抛出:
import { evaluateFormRules, type FormRule } from '@dynamic-entity/core';
declare const rules: FormRule[];
declare const currentValues: Record<string, unknown>;
declare const originalValues: Record<string, unknown>;
const changed = evaluateFormRules(rules, currentValues, originalValues);
显示日期
formatDisplayValue 格式 date, (中文(简体) ), datetime 财务报告和审定财务报表 time 通过 运行时间 语言
(单位:千美元)toLocaleDateString 和朋友,不是表单 language。 。 。 . language 选择哪个
LocalizedText 要读的密钥; 绑定二者将改变每个消费者的标点
其浏览器( 或节点) Intl)被设定为别的东西.
import { setDateFormatters } from '@dynamic-entity/core';
setDateFormatters({
date: (value, lang) => value.toLocaleDateString(lang ?? []),
});
每一个打电话者 formatDisplayValue 尊重——在渲染器中,意思是
只读 date, (中文(简体) ), datetime 财务报告和审定财务报表 time 以及记录摘要.
一个部分对象会覆盖一种,而留下其余的. setDateFormatters() 没有
参数恢复默认值。 它是模块级别,而不是一个注射符号,因为
formatDisplayValue 是一个纯粹的函数—— 渲染器, 建造器和CLI都称之为,
只有一个注射器.
验证配置
validateConfig 这是API。 包裹还装有 dynamic-entity 一样
检查可以不写脚本就用 CI 运行 :
npx dynamic-entity validate ./form-config.json
--additional-field-types signature,nps 是命令行形式
additionalFieldTypes,以及 --validators noDisposable,uniqueEmail 联 合 国 knownValidators,所以一个
validators.custom 命名未注册的东西在被悄悄地丢弃之前被抓住
提供时间. --rules rules.json 是一个 FormRule[] 对照同一数据检查
路径/ id 规则为 showWhen。 。 。 . --fail-on-warnings 将警告视为失败. 退出 0
没有错误, 1 表示配置无法使用, 2 表示文件或JSON本身是.