@ burojs/ 分数
宣告的心脏 阿宝:资源/应用定义、实地构建器、登记册和动作调度器.
零运行时间依赖关系, 它无处输入 ——这个包是纯数据和纯函数,所以可以从服务器,测试,或任何UI层中被消耗.
安装
pnpm add @burojs/core @burojs/field-types
使用量
完整的 CRUD 资源——列表,显示,编辑,创建,侧边栏放置,标签,搜索和列选择——是一个单一声明:
import { defineApp, defineResource } from '@burojs/core';
import { f } from '@burojs/field-types';
const company = defineResource(
'company',
{
texts: { label: 'Company', labelPlural: 'Companies' },
displayField: 'name',
fields: {
id: f.number({ system: true, texts: 'ID' }),
name: f.string({ texts: 'Name' }),
created_at: f.dateTime({ system: true, texts: 'Created' }),
},
views: { list: { columns: ['id', 'name', 'created_at'], search: { fields: ['name'] } } },
},
);
const app = defineApp({ name: 'admin' });
app.use(company);
texts.label 名称一个记录和 texts.labelPlural 收藏——侧边栏
列表页面,一个相关的列表。 两者均为纯默认; 翻译在
i18n 捆绑在下面 resources.<name>.label 财务报告和审定财务报表 resources.<name>.labelPlural。 。 。 .
活动区域中缺失的标签来自后退区域
从代码中的默认值, 然后从人力资源名称; 一个资源
声明不 labelPlural 标题 :
label。显示数字的文字是应用软件的自有文字,按惯例排列,在
计数家族 resources.<name>.count_one | _few | _many | _other,读取
t(key, { count })。所有其他元素的捆绑键——字段,选项,enum,
检查,导航——在一个表格中
docs/i18n-guide.md。 。 。 .
通过声明将资源指向非默认数据提供者——没有线程:
defineResource('schedules', { meta: { dataProviderName: 'temporal' } /* … */ });
可移植声明内核
对于框架中性配置,注册一个小型的开口类型,并将可移植声明汇编成不可变的快照. 相对声明引用安装在层名空间; 使用 namespace:id 当引用是故意交叉命名空间时.
import {
TRUSTED_CODE,
compileApplicationDefinition,
createKindRegistry,
defineTrustedBundle,
} from '@burojs/core';
interface ResourceInput {
readonly label: string;
}
function parseResource(value: unknown): ResourceInput {
if (
value === null
|| typeof value !== 'object'
|| Array.isArray(value)
|| Object.keys(value).length !== 1
|| !Object.prototype.hasOwnProperty.call(value, 'label')
|| !('label' in value)
|| typeof value.label !== 'string'
) {
throw new TypeError('A resource must contain exactly one string label.');
}
return { label: value.label };
}
const resourceKind = {
kind: 'resource',
schemaVersion: 1,
schema: { parse: parseResource },
compile: (value: ResourceInput) => ({ label: value.label }),
};
const catalog = defineTrustedBundle({
defaultNamespace: 'catalog',
declarations: [{ kind: 'resource', ref: 'products', schemaVersion: 1, value: { label: 'Products' } }],
implementations: [],
handle: { source: 'catalog' },
});
const result = compileApplicationDefinition({
compilerVersion: 'my-app-v1',
kinds: createKindRegistry([resourceKind]),
layers: [{
input: {
id: 'catalog',
priority: 0,
defaultNamespace: catalog.defaultNamespace,
declarations: catalog.declarations,
},
trust: TRUSTED_CODE,
}],
});
if (result.ok) {
result.snapshot.getProjection({ kind: 'resource', ref: 'catalog:products' });
}
每层以信任值到达编译器. TRUSTED_CODE 标记您自己构建的代码层; 从 JSON 或 YAML 中解析的层带 LayerGrants 政策说明 @burojs/config),编译器对照它们检查了地层使用的种类,命名空间和转换操作,其变换的路径,它们的目标声明,它引用的资源,查询和变异,以及它绑定的后端. 信任的随附能力和被禁钥匙(action, (中文(简体) ), component, (中文(简体) ), validator(......)不是赠款: @burojs/config解析器检查它们。 没有信任值的层是 invalid-input。 。 。 .
defineTrustedBundle() 将信任的执行定义与应用程序运行时间的声明一起保存,但 snapshot.manifest :它不包含任何功能、部件、服务、证书或执行对象。 因此,在应用自己的XSS安全运输后,它可以安全地进行JSON序列化.
运行时间申报出口为 normalizeEntityRef, (中文(简体) ), formatEntityRef, (中文(简体) ), sameEntityRef, (中文(简体) ), EntityRefError, (中文(简体) ), defineTrustedBundle, (中文(简体) ), isTrustedDeclarationBundle, (中文(简体) ), TRUSTED_CODE, (中文(简体) ), normalizeLayerGrants, (中文(简体) ), createKindRegistry, (中文(简体) ), compileApplicationDefinition, (中文(简体) ), DEFAULT_COMPILER_LIMITS, (中文(简体) ), createApplicationSnapshot,以及 explainSnapshot。 。 。 .
主要出口
defineApp编号 :defineResource编号 :extendResource——申请申报表. 资源fields是一个普通对象,由f从@burojs/field-types(或一个extendFieldBuilder结果);其记录屏幕(views.show编号 :edit编号 :create,与header, (中文(简体) ),body, (中文(简体) ),with财务报告和审定财务报表types由P1a规划和检查,由P1b提供.defineGroup编号 :defineSection编号 :defineCustomPage导航结构和非资源页;见 导航指南 用于组合、布局和 URL.defineEnum注册登记簿。 记录变体是types在资源上,多步创建是一个steps节点在views.create.body。 。 。 .createFieldBuilder编号 :createFieldRegistry——田地-建设者原始作上作曲.createDispatcher- 将诉讼援引变成ActionResult(通知 / retetch / 重定向 / clearSelection...) 应用UI 层.evaluateVisible——球场,列和导航能见度背后的共享上游评价.- 数据访问端口 —— 说
ActionDataAccess财务报告和审定财务报表CountCapable(单位:千美元)getCount?,即点播行数),在此声明正是因为这个包没有依赖性.
许可证
麻省理工学院