@dforge-core/元数据
Canonical dForge 作者登记册、模块文件类型和 JSON 计划 网络应用程序、SDK、图表库、 CLI,MCP服务器,和VS代码扩展.
- 运行时无依赖. 可在任何地方安全导入——编辑器,捆绑的网络 应用,节点CLI,MCP服务器.
- 一个真理的来源. 登记册反映平台元数据种子
(单位:千美元)
server/database/system-modules/metadata/seed-data/和结构 类型 :docs/schemas/。对等测试失败 如果有漂移的话就建起来.
安装
pnpm add @dforge-core/metadata
里面的东西
| 表面 | 出口 |
|---|---|
| 字段类型 | fieldTypes, (中文(简体) ), fieldTypeCds, (中文(简体) ), isFieldTypeCd, (中文(简体) ), getFieldType, (中文(简体) ), fieldTypesByColumnType |
| 基础数据类型 | baseDatatypes, (中文(简体) ), baseToDbDatatype |
| 列类型 | columnTypes, (中文(简体) ), getColumnType |
| 特质 | traits, (中文(简体) ), getTrait, (中文(简体) ), expandTrait, (中文(简体) ), expandTraits |
| 衍生 | deriveDbDatatype, (中文(简体) ), deriveBaseDatatype, (中文(简体) ), defaultParams, (中文(简体) ), NUMERIC_TOTAL |
| 合计 | AggType, (中文(简体) ), AGG_TYPE_LIST |
| 显示旗帜 | flagDefs (单位:千美元)V 可见 I 身份证明 E 可编辑 M 强制性 H 隐藏) |
| 查看/ 报告类型 | dataViewKinds, (中文(简体) ), vizTypes, (中文(简体) ), chartTypes |
| 斯卡拉海内 | FieldTypeCd, (中文(简体) ), BaseDatatypeCd, (中文(简体) ), ColumnTypeCd, (中文(简体) ), FlagCd, (中文(简体) ), AlignType |
| 模块文件类型 | ManifestDef, (中文(简体) ), EntityDef, (中文(简体) ), DataViewsFile, (中文(简体) ), ReportsFile, (中文(简体) ), MenusFile, (中文(简体) ), FoldersFile, (中文(简体) ), RolesFile, (中文(简体) ), SettingsFile, (中文(简体) ), JobsFile, (中文(简体) ), TriggersFile, (中文(简体) ), WebhooksFile, (中文(简体) ), PrintTemplatesFile, (中文(简体) ), SeedDataFile, (中文(简体) ), ActionsFile,, , , , , , , , |
| 过滤表达式 | Filter, (中文(简体) ), FilterCondition, (中文(简体) ), FilterGroup, (中文(简体) ), SortClause |
| DSL 分析器 | ./dsl —— 说 checkDsl, (中文(简体) ), parseDsl, (中文(简体) ), tokenize, (中文(简体) ), BUILTINS (见 动作 DSL(中文(简体) ) |
| JSON 计划 | ./schemas/<name>.schema.json (见 示马斯(中文(简体) ) |
注册和衍生
作者选一个友好的 fieldTypeCd; 帮助者获得物理
元数据,所以没有人手动输入一个原始 SQL 类型 .
import {
getFieldType,
isFieldTypeCd,
deriveDbDatatype,
deriveBaseDatatype,
defaultParams,
} from "@dforge-core/metadata";
isFieldTypeCd("currency"); // true
isFieldTypeCd("reference"); // false — not a real code (it's `lookup`)
getFieldType("currency");
// { cd: "currency", columnType: "D", baseDatatypeCd: "number", precision: 2, ... }
deriveDbDatatype("currency"); // "numeric(18,2)"
deriveDbDatatype("text"); // "varchar"
deriveDbDatatype("textarea"); // "text"
deriveDbDatatype("lookup"); // null — relationship-backed, no own column
deriveBaseDatatype("color"); // "string"
defaultParams("flags"); // { style: "buttons" }
defaultParams("number"); // undefined — numeric types carry no defaults
特质
import { expandTrait, expandTraits } from "@dforge-core/metadata";
// Expand a trait into the FieldDef map it contributes to an entity.
expandTrait("audit", "invoice");
expandTraits(["identity", "audit"], "invoice");
模块文件类型
结构类型描述 撰写 a 中每个文件的形状 .dforge
模块包——相同的形状是JSON schemas验证.
import type { ManifestDef, EntityDef, DataViewsFile } from "@dforge-core/metadata";
const entity: EntityDef = {
description: "Customer",
dbObject: "customer",
fields: {
/* … */
},
};
注:这些是: 撰写 形状。 决心 运行时间 模式 由 API 返回(
metadata.getModel)是不同的合同——见@dforge/sdk是因为Model*类型,可以重用此包中的 scalar enum.
动作 DSL
@dforge-core/metadata/dsl 是一个单独的切入点, 持有 lexer, parser
行动机构的静态规则logic/actions/*.dsl) (中文(简体) ). 一个执行
为检查这些文件的两台主机服务: 语言服务器, 它会转弯
和模块校验器,它打开一个包.
import { checkDsl } from "@dforge-core/metadata/dsl";
const issues = checkDsl(source, {
moduleCode: "wms",
action: { code: "transfer_stock", executionMode: "single" },
currentEntity: { qualified: "wms.stock_movement", columns: entityColumns },
});
// → [{ rule: "dsl/unknown-column", severity: "error", message, start, end, line, column }]
一个规则知道什么 模块通过上下文到达—— 模块代码,
和列搜索(任何 Set 或者说 Map ——而不是
通过一个模块加载器,让同样的规则运行在编辑器和
在文件行走器. 每一个字段都是可选的,每个读出一个字的规则都会失败
打开: 如果上下文为空, 仅文本规则仍然运行, 其余的站点
安静地下来。 假“ 未知列” 下划线
包; 漏出一个需要安装往返.
一项义务是 currentEntity数字 : columns 必须是 特性扩展, (中文(简体) ),
内置特性和模块本身 traits.json 一样,因为身份
PK 和 (中文) [status] 生活于特质而非 fields未扩展的集
把规则变成错误的墙壁。 当实体无法解决时——
桥接模块在另一模块的实体上作用——通过 null 而不是现在
你确实有碎片.
问题既包含字节抵销,又包含1个索引 line编号 :column,所以一个
基于范围的主机和 a file.dsl:12 记者每人得到他们需要的.
块,块 [field] 看着后面,案件规则也跟着
ActionDslCompiler 5个区种,包括:
schema:,以 第 0 栏为锚(缩进为正文,为
报告)和 execute: 运行到文件尾端.
它不从包根再出口:导入 @dforge-core/metadata
在浏览器捆绑中,不能在后方拉出指示器.
JSON 计划
14克恩克的计程车是随同型号一起运送的,保持字节一致
改为 docs/schemas/ (一) 实行平等测试; prepack 重同步前
(原始内容存档于2017-03-25). Publishing. 直接导入它们或者在文件上指定一个验证符 / 编辑器 .
import entitySchema from "@dforge-core/metadata/schemas/entity.schema.json" with { type: "json" };
// VS Code settings.json — validate module files against the shipped schemas
"json.schemas": [
{
"fileMatch": ["entities/*.json"],
"url": "./node_modules/@dforge-core/metadata/schemas/entity.schema.json"
}
]
可用 : manifest, (中文(简体) ), entity, (中文(简体) ), data_views, (中文(简体) ), folders, (中文(简体) ), menus, (中文(简体) ), roles, (中文(简体) ),
settings, (中文(简体) ), reports, (中文(简体) ), jobs, (中文(简体) ), triggers, (中文(简体) ), webhooks, (中文(简体) ), print_templates, (中文(简体) ),
traits, (中文(简体) ), seed_data, (中文(简体) ), demo_vars。 。 。 .
真理与平等来源
这个软件包从不编辑 Canonical 源头—— 它照亮它们并守护着 镜像 :
- 书记官处 镜像平台元数据种子;
test/registries.test.ts如果代码漂移到field_types.json(和编译时间覆盖) 守护失败, 如果FieldTypeCd工会和工会fieldTypes数组差异). - 示马斯 复制自
docs/schemas/以pnpm sync-schemas· ;test/schemas.test.ts如果运出的副本漂移则失败 .prepack复作是语.
当单独消费(软件包周围没有单列)时,对等检查是 跳出 —— 已发运的数据本身是权威的 .
脚本
pnpm build # tsc → dist/
pnpm test # vitest (registry + schema parity)
pnpm sync-schemas # refresh schemas/ from docs/schemas/
许可证
麻省理工学院