@burojs/core

中文文档
0.11.0发布于 2026/11/02MITTypeScriptESM + CJS零依赖近 30 天下载 2058

Buro: 类型、构建器、登记器、动作调度器

中文使用文档
文档目录5 节
  1. 安装
  2. 使用量
  3. 可移植声明内核
  4. 主要出口
  5. 许可证

@ 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?,即点播行数),在此声明正是因为这个包没有依赖性.

许可证

麻省理工学院

版本与发布记录

@burojs/core 共发布 9 个版本,首次发布于 2026/08/16;过去 12 个月发布了 9 个版本。

版本发布日期距今
0.11.0latest2026/11/026 天前
0.10.02026/10/318 天前
0.9.02026/10/2910 天前
0.8.02026/10/2811 天前
0.7.02026/10/2514 天前
0.6.02026/10/2218 天前

关于 @burojs/core 的常见问题

@burojs/core 是什么?

Buro: 类型、构建器、登记器、动作调度器

如何安装 @burojs/core?

在项目目录运行 npm install @burojs/core,或使用 pnpm add / yarn add / bun add。

@burojs/core 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@burojs/core 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@burojs/core 可以商用吗?

@burojs/core 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@burojs/core 的下载量有多少?

根据 npm 官方下载统计,@burojs/core 在 2026/10/09 – 2026/11/07 这 30 天内被下载 2,058 次,日均约 69 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@burojs/core 还在维护吗?

最新版本 0.11.0 发布于 2026/11/02(6 天前);至今共发布 9 个版本,其中过去 12 个月发布了 9 个;首次发布于 2026/08/16。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。