@endo/pass-style

中文文档
2.0.1发布于 2026/08/18Apache-2.0TypeScriptES Module近 30 天下载 4万

定义可通行对象的分类.

中文使用文档
文档目录14 节
  1. 概览
  2. 传递样式
  3. 核心职能
  4. passStyleOf( 数值)
  5. 有价( 值)
  6. 远(面,方法)
  7. 标记( 标记、 有效载荷)
  8. 可通过值
  9. 传-接-接-接-接-接-接
  10. 通过- 复制
  11. 通过参考
  12. 类型警卫
  13. 与 Endo 软件包集成
  14. 深潜

@endo/pass-style

定义一个对象能力系统中的瓦特之间可以传递哪些数据.

概览

这个 @ endo/ pass 风格 软件包定义 Passable 类型和提供 passStyleOf() 根据 JavaScript 值分类函数 PassStyle。 。 。 . 这种分类决定了数值如何在孤立之间安全传递 隔间或跨越网络边界.

每个可传取值都有一套固定的传出样式 各种可能性. 关键区别在于: 通过副本 (数值本身被复制) 财务报告和审定财务报表 通过参考。 。 。 .

传递样式

传出样式类别说明实例
'null'初级无效值null
'undefined'初级未定义的值undefined
'boolean'初级布尔原始人true, (中文(简体) ), false
'number'初级IEEE 754个浮点42, (中文(简体) ), 3.14, (中文(简体) ), NaN, (中文(简体) ), Infinity
'bigint'初级任意精度整数123n, (中文(简体) ), -456n
'string'初级结构良好的字符串'hello', (中文(简体) ), ''
'symbol'初级注册/知名符号Symbol.iterator
'copyArray'通过副本冻结的可流性阵列harden([1, 2, 3])
'copyRecord'通过副本冻结平原对象harden({ x: 10 })
'remotable'过继出席远对象存在( R)Far('Counter', {...})
'tagged'延长特定领域类型makeTagged('copySet', [...])
'error'过继出席错误对象harden(Error('failed'))
'promise'过继出席承诺对象Promise.resolve(42)

核心职能

passStyleOf( 数值)

分类一个值的通过样式. 如果值不能通过,则丢出.

import { passStyleOf } from '@endo/pass-style';

passStyleOf(42);                    // 'number'
passStyleOf(harden([1, 2]));        // 'copyArray'
passStyleOf(harden({ x: 1 }));      // 'copyRecord'
passStyleOf(Promise.resolve());     // 'promise'

// Throws for non-passable values
passStyleOf({ x: 1 });  // Error: not frozen

有价( 值)

布尔测试通过性. 回返 true 如果值可以通过, false 否则.

import { isPassable } from '@endo/pass-style';

isPassable(42);                // true
isPassable(harden([1, 2]));    // true
isPassable({ x: 1 });          // false - not frozen
isPassable(harden({ x: 1 }));  // true

使用 isPassable() 当你想要一个布尔的结果. 使用 passStyleOf() 需要特定通行证样式或需要详细信息时 错误消息 .

远(面,方法)

创建可调取的可调取对象.

import { Far } from '@endo/pass-style';

const counter = Far('Counter', {
  increment() { return count += 1; },
  getValue() { return count; }
});

passStyleOf(counter);  // 'remotable'

说明: 远物体是可再活化的,但不验证它们的输入. 关于自动输入验证的防御性物体,见 @ endo/ exo (帮助)。 。 。 .

标记( 标记、 有效载荷)

创建 CopyTlaged 对象,特定域数据的扩展点 类型.

import { makeTagged } from '@endo/pass-style';

const tagged = makeTagged('customType', { data: 42 });
passStyleOf(tagged);  // 'tagged'

标记对象由内部使用 @ endo/ patters( 签名) 执行 CopySet、 CopyBag 和 CopyMap .

可通过值

符合这些要求的值是可通行的:

  1. 初级 总是可以通行的(未注册的符号除外)
  2. 对象必须被冻结 通过 harden() 从 @endo/pass-style 或者说 ses
  3. 无循环引用 以通过式结构(复制台、复制台、, 标记)
  4. 字符串必须造型良好 (没有未付代孕)
  5. 符号必须暂时使用 passableSymbolForName() 从 @endo/pass-style。 。 。 .
// Passable - frozen array of primitives
const data = harden([1, 2, 3]);

// NOT passable - not frozen
const mutable = [1, 2, 3];

// NOT passable - cyclic reference
const cyclic = harden([]);
cyclic.push(cyclic);

传-接-接-接-接-接-接

通过- 复制

值本身在通过时会被复制. 原作的修改不影响副本.

用于: 不可移动的数据、配置、消息、小结构

传出样式 : 原始、复制、记录、标记

const config = harden({
  timeout: 5000,
  retries: 3
});

// When passed, config is copied
// The recipient gets a separate copy

通过参考

引证相传. 该天体仍保留在原位置.

用于: 有行为、可变状态、能力、大对象的物体

传出样式 : 可恢复、承诺、错误

const service = Far('Service', {
  getData() { return data; }
});

// When passed, only a reference is passed
// Method calls are forwarded to the original object

类型警卫

该套件为常见的通关样式提供类型守护:

import {
  isRecord, assertRecord,
  isCopyArray, assertCopyArray,
  isRemotable, assertRemotable,
  isAtom, assertAtom
} from '@endo/pass-style';

// Boolean checks
if (isRecord(value)) {
  // value is a CopyRecord
}

// Assertions (throw if false)
assertRemotable(obj);
// obj is guaranteed to be a remotable

与 Endo 软件包集成

完成教学: 见 消息传递 页:1 综合指南,说明通行证式如何与图案、外出和 最终发送.

深潜

详细执行情况:

版本与发布记录

@endo/pass-style 共发布 32 个版本,首次发布于 2023/03/08;过去 12 个月发布了 5 个版本。

版本发布日期距今
2.0.1latest2026/08/182 个月前
1.8.2latest-v12026/08/142 个月前
1.8.12026/06/125 个月前
1.8.02026/04/176 个月前
1.7.02026/02/278 个月前
1.6.32025/07/121.3 年前

关于 @endo/pass-style 的常见问题

@endo/pass-style 是什么?

定义可通行对象的分类.

如何安装 @endo/pass-style?

在项目目录运行 npm install @endo/pass-style,或使用 pnpm add / yarn add / bun add。

@endo/pass-style 支持 TypeScript 吗?

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

@endo/pass-style 支持 ESM 还是 CommonJS?

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

@endo/pass-style 可以商用吗?

@endo/pass-style 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@endo/pass-style 的下载量有多少?

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

@endo/pass-style 还在维护吗?

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