# @alwaysmeticulous/redaction 中文文档

规范地址：https://npmcn.com/package/%40alwaysmeticulous/redaction/

版本：2\.339\.0
npm 元数据更新时间：2026-09-11T10:42:05.642Z
中文译文更新时间：2026-11-05T23:08:50.372Z
软件包许可：ISC

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40alwaysmeticulous/redaction
原文对照：https://npmcn.com/package/%40alwaysmeticulous/redaction/?lang=original
项目主页：https://github.com/alwaysmeticulous/meticulous-sdk
源码仓库：https://github.com/alwaysmeticulous/meticulous-sdk

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：196 kB，9 个文件
- 模块格式：ESM + CJS
- TypeScript 类型：包内自带
- 运行依赖：0 个
- 首次发布：2024-10-14T18:28:23.339Z
- 最新版本发布：2026-09-11T10:42:05.335Z
- 近 30 天下载量：128502（2026-10-06 至 2026-11-04，npm 官方下载统计）
- 已发布版本数：122（近 12 个月 38 个）

## 中文简介

执行共同编辑逻辑的水电费 [模拟录相器 Middleware API](https://github.com/alwaysmeticulous/meticulous-sdk/blob/main/packages/sdk-bundles-api/src/record/middleware.ts)。 。 。 .

## 安装

```sh
npm install @alwaysmeticulous/redaction
```

也可以使用：`pnpm add @alwaysmeticulous/redaction`、`yarn add @alwaysmeticulous/redaction`、`bun add @alwaysmeticulous/redaction`

## README

# 编辑

执行共同编辑逻辑的水电费 [模拟录相器 Middleware API](https://github.com/alwaysmeticulous/meticulous-sdk/blob/main/packages/sdk-bundles-api/src/record/middleware.ts)。 。 。 .

## 用于执行编辑中间软件的公用事业

### 示例使用

```ts
import {
  dropRequestHeader,
  transformJsonResponse,
  redactRecursively,
  asterixOut,
} from "@alwaysmeticulous/redaction";

const middleware = [
  dropRequestHeader("Authorization"),
  transformJsonResponse({
    urlRegExp: /https:\/\/api\.example\.com\/.*/,
    transform: (data) => {
      return {
        ...data,
        ...(data.sensitive ? { sensitive: asterixOut(data.sensitive) } : {}),
      };
    },
  }),
  transformJsonResponse({
    urlRegExp: /https:\/\/api\.example\.com\/sensitive.*/,
    transform: (data) =>
      redactRecursively(data, {
        redactString: (str, path) =>
          path[path.length - 1] === "uuid" ? str : asterixOut(str),
      }),
  }),
];
```

## 编辑 Javascript 对象的用法

为了方便编辑大型复合型的Javascript类型,我们提供了一些帮助.

### 离线

这保证了被编辑的文本的长度和原文本的白相间相同, 从而可以测试相同的布局大小写.

```ts
import { asterixOut } from "@alwaysmeticulous/redaction";

const redacted = asterixOut("some sensitive text"); // returns "**** ********* ****"
```

### 编辑字符串

校正字符串通过检查常见的数据格式来智能地编辑字符串. 这样可以减少 在Meticulous测试的回放过程中,由于操作失败,您的应用程序有错误的风险 编辑数据(例如)**页:1**" 不是有效的 URL :

```ts
import { redactString } from "@alwaysmeticulous/redaction";

const redacted = redactString("some sensitive text"); // returns "**** ********* ****"
const redacted2 = redactString("test@example.com"); // returns "----@-------.com"
// etc.
```

见 [编辑](https://npmcn.com/package/%40alwaysmeticulous/redaction/src/generic/__tests__/redact-string.spec.ts) 需要更多的实例.

### 编辑url

`redactUrl` 替换主机名、路径、查询、散列和用户信息。 默认主机名 变成 `redacted.com`; 通过 `baseDomain` 选择不同的替换主机名 :

```ts
import { redactUrl } from "@alwaysmeticulous/redaction";

redactUrl("https://customer.example/private/path");
// => "https://redacted.com/redacted/redacted"

redactUrl("https://customer.example/private/path", {
  baseDomain: "redacted.meticulous.ai",
});
// => "https://redacted.meticulous.ai/redacted/redacted"
```

### 嵌入字段编辑器

NestedFields Redactor允许您为每个不同的字段名称指定一个编辑策略(例如'sn'或'email'). 然后,它会递归性地将这个修饰政策应用到一个物体内的所有嵌入地上. 类型安全 确保编译时间出错,如果您提供了一个有字段名的对象(在任意关卡上被注销) ),但未指定修改策略.

#### 基本用途

```ts
import {
  transformJsonResponse,
  NestedFieldsRedactor,
  redactString,
} from "@alwaysmeticulous/redaction";

interface MyComplexApiType {
  details: {
    ssn: string;
    phoneNumbers: Array<{ mobile?: string; home?: string }>;
  };

  // By default we do not require redacting boolean fields.
  isUSBased: boolean;
}

// Important: include your API type explictly in the call to createRedactor (`createRedactor<MyComplexApiType>`)
const complexApiTypeRedactor =
  NestedFieldsRedactor.builder().createRedactor<MyComplexApiType>({
    strings: {
      ssn: redactString,
      mobile: redactString,
      home: redactString,
    },
  });

const middleware = [
  transformJsonResponse({
    urlRegExp: /https:\/\/api\.example\.com\/.*/,
    transform: (data: MyComplexApiType) => {
      return complexApiTypeRedactor(data);
    },
  }),
];
```

如果您更新 MyComplexApiType 添加了新内容 `name` 字符串字段 :

```ts
interface MyComplexApiType {
  name: string; // <<< ADDED

  details: {
    ssn: string;
    phoneNumbers: Array<{ mobile?: string; home?: string }>;
  };

  isUSBased: boolean;
}
```

但不要为新计划增加相应的编辑政策 `name` 字段到“创建重做者”的调用,然后是您的 代码无法编译 。 这确保了修改是详尽无遗的.

`createRedactor` 将强制您编辑所有非 enum 字符串字段, 但是它不会强制您进行详尽的编辑 其他类型的字段(日期、布尔语、数字等)。 见 `createRedactorStrict` 如果您需要执行 详尽无遗 在编译额外数据类型时进行编辑.

#### 有默认

但我们建议使用 `NestedFieldsRedactor.builderWithDefaults()`,它将提供默认的编辑器 对于最常见的字段名称。 如果有任何字符串字段没有被这些默认覆盖,那么编译器将会 强制您为他们指定一个编辑策略:

```ts
const complexApiTypeRedactor =
  NestedFieldsRedactor.builderWithDefaults().createRedactor<MyComplexApiType>({
    strings: {
      // Don't need to specify a redaction policy for `ssn` as it's covered by the defaults,
      // but we do need to specify a redaction policy for `mobile` and `home` as they're not covered by the defaults.
      mobile: redactString,
      home: redactString,
    },
  });
```

#### 基于模式的编辑器

也可以指定匹配以给定后缀结尾的字段名的编辑器,同时保留 编译时间类型安全 。 见 [普通编辑器](https://npmcn.com/package/%40alwaysmeticulous/redaction/src/generic/redact-nested-fields/common-redactors.ts) 财务报告和审定财务报表 [已取消的字段](https://npmcn.com/package/%40alwaysmeticulous/redaction/src/generic/redact-nested-fields/redact-nested-fields.ts) 对于一些例子.

### 编辑递归

通过应用提供的编辑函数的 JSON 对象递增。 见 [编辑- recursive.spec.ts](https://npmcn.com/package/%40alwaysmeticulous/redaction/src/generic/__tests__/redact-recursively.spec.ts) 更多细节.

这可以结合 `NestedFieldsRedactor` 以提供额外的安全。 例如:

```ts
const complexApiTypeRedactor =
  NestedFieldsRedactor.builder().createRedactor<MyComplexApiType>({
    strings: {
      ssn: redactString,
      mobile: redactString,
      home: redactString,
    },
  });

const redactAnythingThatLooksLikeAnSSN = <T>(data: T) =>
  redactRecursively(data, {
    redactString: (str) => (looksLikeAnSSN(str) ? asterixOut(str) : str),
  });

const middleware = [
  transformJsonResponse({
    urlRegExp: /https:\/\/api\.example\.com\/.*/,
    transform: (data: MyComplexApiType) => {
      return redactAnythingThatLooksLikeAnSSN(complexApiTypeRedactor(data));
    },
  }),
];
```

## 常见问题

### @alwaysmeticulous/redaction 是什么？

执行共同编辑逻辑的水电费 模拟录相器 Middleware API。 。 。 \.

### 如何安装 @alwaysmeticulous/redaction？

在项目目录运行 npm install @alwaysmeticulous/redaction，或使用 pnpm add / yarn add / bun add。

### @alwaysmeticulous/redaction 支持 TypeScript 吗？

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

### @alwaysmeticulous/redaction 支持 ESM 还是 CommonJS？

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

### @alwaysmeticulous/redaction 可以商用吗？

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

### @alwaysmeticulous/redaction 的下载量有多少？

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

### @alwaysmeticulous/redaction 还在维护吗？

最新版本 2\.339\.0 发布于 2026/09/11（1 个月前）；至今共发布 122 个版本，其中过去 12 个月发布了 38 个；首次发布于 2024/10/15。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

