@vizejs/marquette

中文文档
0.650.0发布于 2026/11/03MITTypeScriptES Module零依赖构建来源已验证

每个Vize目标的键入应用程序市场

中文使用文档
文档目录5 节
  1. 作者:马奎特
  2. 运行时验证
  3. 适配器能力协商
  4. 测试的证据
  5. 担保

@vizejs/marquette

每个Vize目标的键入应用程序市场。

实验性的:序列化契约是版本化的,但TypeScript API可以 在验证目标适配器时进行演进。

马奎特是一种小型的、语言中立的描述,由网络、本地、 桌面、终端、后端、传输、测试和图库工具。这 包提供了保留文字的TypeScript创作。运行时验证是 可通过单独入口获得,同时实现规范化和兼容性 分析仍然集中在层次上。

作者:马奎特

import { defineApplicationMarquette } from "@vizejs/marquette";

export default defineApplicationMarquette({
  application: "shop",
  targets: ["web", "native"],
  environments: [
    {
      id: "web",
      target: "web",
      consumer: "client",
      runtime: "browser",
    },
    {
      id: "native",
      target: "native",
      consumer: "client",
      runtime: "native",
    },
    {
      id: "server",
      target: "web",
      consumer: "server",
      runtime: "rust",
    },
  ],
  backends: [
    {
      id: "api",
      family: "rust",
      environment: "server",
    },
  ],
  protocols: [
    {
      id: "api.query",
      family: "schema-query",
      backend: "api",
    },
  ],
  routes: [
    {
      id: "home",
      path: "/",
      environment: "web",
      rendering: "hybrid",
      backend: "api",
      protocol: "api.query",
    },
  ],
});

环境依赖关系、后端所有者、协议所有者和路由 根据同一对象中声明的标识符检查引用。一个 因此,拼写错误的引用是一个编写错误,而不是运行时错误 惊喜。

运行时验证

当契约跨文件、流程或文件时,使用专用验证项 语言的界限:

import { validateApplicationMarquette } from "@vizejs/marquette/validate";

const diagnostics = validateApplicationMarquette(shop);
for (const diagnostic of diagnostics) {
  console.error(diagnostic.code, diagnostic.path, diagnostic.message);
}

验证是确定的,不会改变所创建的对象,并报告 与本机契约实现共享的稳定代码。保持在一个 单独条目意味着仅用于创作的应用程序不包括验证 代码。

适配器能力协商

适配器发布包含的功能-版本范围独立于 应用马凯特。应用程序功能定义是权威 的要求;未声明的需求无法关闭,即使适配器 提供具有相同标识符的功能。只有适配器的功能是 允许并保持添加,直到应用程序需要它们。

import {
  negotiateAdapterCapabilities,
  type AdapterCapabilityManifest,
} from "@vizejs/marquette/adapter";

const adapter = {
  adapter: "terminal.fresco",
  capabilities: [{ id: "terminal.color", minVersion: 1, maxVersion: 3 }],
} satisfies AdapterCapabilityManifest;

const result = negotiateAdapterCapabilities(
  marquette,
  marquette.environments?.[0]?.capabilities ?? [],
  adapter,
);
if (!result.compatible) {
  console.error(result.diagnostics, result.mismatches);
}

精确匹配和包含绑定匹配是兼容的。失踪的支持, 要求低于适配器的最小值,要求高于适配器的最大值 使用马厩 missing-capability, version-below-minimum, version-above-maximum 代码。每个不匹配也带有确定性 path 和 message,因此本机适配器诊断可以在没有 特定于目标的字符串格式化。增加或扩大支撑区间 界是加性的;移除支撑或缩小任何一个边界都是突破。 协商和兼容性报告都是确定排序的 而不是改变它们的输入。的验证诊断 当其中一个输入无效时,两者都显示并忽略更改。已发布的清单架构可从 @vizejs/marquette/adapter/schema.

本机呈现适配器共享一个封闭的版本一基准进行呈现, 事件、布局、文本、图像、动画、可访问性和生命周期:

import { nativeEngineCapabilityProfile } from "@vizejs/marquette/adapter";

const nativeAdapter = {
  adapter: "native.example",
  capabilities: nativeEngineCapabilityProfile(),
};

规范标识符使用 native.* 命名空间中发出的 稳定的订单。帮助器返回新值,以便适配器可以添加private 功能,而不更改其他消费者使用的基线。

测试的证据

发布绑定的测试运行证据记录存在于它们自己的惰性条目中,因此 部署工具可以绑定 tests 检查保留的、不可变的事实:

import { defineTestRunEvidence } from "@vizejs/marquette/test-run";
import { validateTestRunEvidence } from "@vizejs/marquette/test-run/validate";
import { testRunAdmissionId } from "@vizejs/marquette/test-run/canonical";
import { admitTestRun, decideTestRunAdmission } from "@vizejs/marquette/test-run/admission";
import { verifyTestRunCheck } from "@vizejs/marquette/test-run/check";
import { verifyTestRunTransition } from "@vizejs/marquette/test-run/transition";

const diagnostics = validateTestRunEvidence(evidence);
const admissionId = await testRunAdmissionId(evidence); // test-run:<sha256>
const rejections = await admitTestRun(evidence, candidate, admissionId, now);
const decision = await decideTestRunAdmission(evidence, candidate, admissionId, now);
if (!decision.allowed) {
  console.error(decision.denialCodes); // e.g. ["record-expired"]
}
const release = await verifyTestRunCheck(retainedCheck, candidate, evidence, now);
const journal = await verifyTestRunTransition(nextTransition, chainTip);

验证共享其 VIZE_MARQUETTE_1xx 代码、路径和排序 本机实现,规范化条目产生的字节相同 串行化和SHA-256指纹,通过在共享fixture中验证 tests/fixtures/test-run-evidence/。录取决定是稳定的, 每个后端家族共享的仅追加拒绝码词汇表;相同的 fixture固定每个决定,因此JavaScript, Rust, Go或JVM拒绝 相同的机器可读原因。检查项替换每个泛型 发布证据中的测试结果参考:保留 vize.test-run.check 记录可能只列出确切的名称 test-run:<sha256> 入场id,绑定六 候选人的事实,并记录独立于竞选者的观察者。这个 产品化条目使每个发布决定和完整的被接受 反重放状态一个持久的原子记录,由规范的SHA-256链接 指纹;主机使用write-then-atomic-rename对其进行持久化,并验证 在决定做任何新事情之前收回小费。发布的记录模式为 可以从 @vizejs/marquette/test-run/schema,决定契约从 @vizejs/marquette/test-run/admission/schema,测试检查合同来自 @vizejs/marquette/test-run/check/schema的过渡合同 @vizejs/marquette/test-run/transition/schema.

担保

  • 确切的标识符仍然可用为 EnvironmentId, BackendId, ProtocolId, RouteId 工会。
  • defineApplicationMarquette 返回其输入而不分配或 规范化。
  • 发布的应用程序契约模式可从 @vizejs/marquette/schema.
  • 已发布的适配器清单架构可从 @vizejs/marquette/adapter/schema.
  • 每个可选的契约字段在JSDoc中记录其默认值。
  • 包构建对创作条目强制执行1 KiB的gzip预算和3 KiB的预算 或4 KiB预算用于验证条目。

马奎特描述组件和环境;它不编写UI 组件。公共Vize UI组件使用real .vue SFC文件作为它们的 规范的来源,从来没有写过 h() 调用或手写呈现函数。

版本与发布记录

@vizejs/marquette 共发布 309 个版本,首次发布于 2026/07/22;过去 12 个月发布了 309 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.650.0latest2026/11/03今天
0.649.02026/11/03今天
0.648.02026/11/02今天
0.647.02026/11/02今天
0.646.02026/11/02今天
0.645.02026/11/021 天前

关于 @vizejs/marquette 的常见问题

@vizejs/marquette 是什么?

每个Vize目标的键入应用程序市场

如何安装 @vizejs/marquette?

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

@vizejs/marquette 支持 TypeScript 吗?

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

@vizejs/marquette 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@vizejs/marquette 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=22。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@vizejs/marquette 可以商用吗?

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

@vizejs/marquette 还在维护吗?

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