@alwaysmeticulous/redaction

中文文档
2.339.0发布于 2026/09/11ISCTypeScriptESM + CJS零依赖构建来源已验证近 30 天下载 12.9万

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

中文使用文档
文档目录8 节
  1. 用于执行编辑中间软件的公用事业
  2. 示例使用
  3. 编辑 Javascript 对象的用法
  4. 离线
  5. 编辑字符串
  6. 编辑url
  7. 嵌入字段编辑器
  8. 编辑递归

编辑

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

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

示例使用

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类型,我们提供了一些帮助.

离线

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

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

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

编辑字符串

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

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

const redacted = redactString("some sensitive text"); // returns "**** ********* ****"
const redacted2 = redactString("[email protected]"); // returns "[email protected]"
// etc.

见 编辑 需要更多的实例.

编辑url

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

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'). 然后,它会递归性地将这个修饰政策应用到一个物体内的所有嵌入地上. 类型安全 确保编译时间出错,如果您提供了一个有字段名的对象(在任意关卡上被注销) ),但未指定修改策略.

基本用途

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 字符串字段 :

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

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

  isUSBased: boolean;
}

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

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

有默认

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

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,
    },
  });

基于模式的编辑器

也可以指定匹配以给定后缀结尾的字段名的编辑器,同时保留 编译时间类型安全 。 见 普通编辑器 财务报告和审定财务报表 已取消的字段 对于一些例子.

编辑递归

通过应用提供的编辑函数的 JSON 对象递增。 见 编辑- recursive.spec.ts 更多细节.

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

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 共发布 122 个版本,首次发布于 2024/10/15;过去 12 个月发布了 38 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
2.339.0latest2026/09/111 个月前
2.333.12026/08/262 个月前
2.283.12026/05/145 个月前
2.280.02026/05/056 个月前
2.277.02026/04/246 个月前
2.276.22026/04/236 个月前

其他发布通道:next → 2.226.1-beta.0。

关于 @alwaysmeticulous/redaction 的常见问题

@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 和提交记录判断。