# @krizaka/settings 中文文档

规范地址：https://npmcn.com/package/%40krizaka/settings/

版本：0\.6\.0
npm 元数据更新时间：2026-11-01T14:49:59.744Z
中文译文更新时间：2026-11-01T16:31:53.150Z
软件包许可：Apache-2\.0

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

原始 npm 页面：https://www.npmjs.com/package/%40krizaka/settings
原文对照：https://npmcn.com/package/%40krizaka/settings/?lang=original
项目主页：https://github.com/krizaka/krizaka-ts/tree/main/packages/settings
源码仓库：https://github.com/krizaka/krizaka-ts

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

- 包体积（解压后）：104 kB，6 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- Node.js 要求：\>=22
- 运行依赖：2 个
- peer 依赖：zod \>=3\.23
- 首次发布：2026-10-22T19:40:13.027Z
- 最新版本发布：2026-11-01T14:49:59.426Z
- 已发布版本数：9（近 12 个月 9 个）

## 中文简介

Krizaka产品的配置作为数据：类型化注册表（标志、整数、选项、子集、双语文本）、解析用户/工作空间/全局/默认、由管理员对每次更改进行审计行更改、价格目录(

## 安装

```sh
npm install @krizaka/settings
```

也可以使用：`pnpm add @krizaka/settings`、`yarn add @krizaka/settings`、`bun add @krizaka/settings`

## README

# @krizaka /设置

产品的配置为 **数据**：已解析的设置（标志、整数、选项、子集、双语文本）的类型化注册表 **用户→工作区→全局→默认**，由管理员更改而无需重新部署， **每一个变化都会留下一条审计线** （谁，什么，什么时候，之前，之后）。一个json安全的注册表描述就是管理屏幕的来源。

```ts
import { emitMigration } from "@krizaka/db";
import { defineSettings, flag, integer, dbSettings, settingsSchema, GLOBAL, WORKSPACE_SCOPES } from "@krizaka/settings";

const settings = defineSettings({ "features.apiKeys": flag("features", true, WORKSPACE_SCOPES), "limits.maxFileMb": integer("limits", 10, { min: 1, max: 10, unit: "MB" }) } as const);
emitMigration(settingsSchema, 1, { tables: {} }); // commit the SQL once, in your migrations (idempotent)
const service = dbSettings(settings, { query, workspaceOf, clock: () => performance.now() });
await service.get("features.apiKeys", { userId });            // typed: boolean
await service.set({ id: adminId, label: email }, GLOBAL, "features.apiKeys", false, now);
```

**模式。** 这些表格是 `@krizaka/db` 模块(`settings`)，版本1字节-与此包之前发布的SQL相同，因此具有它们的产品采用没有DDL更改的SQL： `adoptMigration(settingsSchema, 1, context)` 只写标记， `emitMigration(…)` 为没有SQL的数据库编写SQL。原来的迁移函数不变， `@deprecated`，为一个未成年人。价格版本是模块 `settings_prices` （`pricesSchema`）。 保留在产品中的内容：它的注册表（键、组、默认值）、它在自己的边界进行的检查（“服务器拒绝关闭的内容”）、谁可能是管理员、HTTP路由。时钟被传了进来；这里什么都看不懂。

## 价格-目录（ADR-009）

产品的价格也是数据：一种类型 **目录** 条目(`product.plan`，单位，以分或“报价”为单位的金额； **计算机辅助设计**， **税前**、可用性 `public` · `internal` · `founder-limited` · `preparing`，命名为limits)。产品以前的定价 模块变成 **种子**;其管理员通过更改条目 **从某个日期开始安排一个版本** (现在或以后，永远不会 过去)，并且每次更改都会写入审计行 `settings_audit` （`price.<product>.<plan>`）. 订阅记录它的版本 以(`versionId`)并保存下来。

```ts
import { AVAILABILITY, definePrices, findTypedPrices, priceCatalogue, pricesMigration, priceStore, publicCatalogue, UNIT } from "@krizaka/settings";

const prices = definePrices([
  { product: "akinaza", plan: "starter", unit: UNIT.month, amountCents: 4500, availability: AVAILABILITY.founderLimited, limits: { founderCap: 20 } },
  { product: "akinaza", plan: "scale", unit: UNIT.month, amountCents: 9900, availability: AVAILABILITY.preparing },
]);
await db.query(pricesMigration()); // once, in your migrations (idempotent; includes the settings' tables)
const catalogue = priceCatalogue(prices, priceStore({ query }));
const shown = publicCatalogue(await catalogue.catalogue(now));   // a public page: never internal, « en préparation » without a figure
await catalogue.schedule({ id: adminId, label: email }, "akinaza.starter", { amountCents: 4900 }, effectiveFrom, now);
const sold = await catalogue.version(subscription.priceVersionId); // the price it was sold at, forever
expect(findTypedPrices(messages)).toEqual([]);                    // a product's test: no amount typed in a message
```

`describePrices(catalogue, now)` 是管理屏幕绘制的json安全描述（已经安排的内容）； `memoryPriceStore()` 服务测试。金额通过 `@krizaka/payments`，通过入口的钥匙。

> `postgresSettings` 名字是 `dbSettings`;它仍然是 `@deprecated` 别名一个小调，离开下一个大调。

## 常见问题

### @krizaka/settings 是什么？

Krizaka产品的配置作为数据：类型化注册表（标志、整数、选项、子集、双语文本）、解析用户/工作空间/全局/默认、由管理员对每次更改进行审计行更改、价格目录\(

### 如何安装 @krizaka/settings？

在项目目录运行 npm install @krizaka/settings，或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖：zod（\>=3\.23）。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖，Yarn 需要手动安装。

### @krizaka/settings 支持 TypeScript 吗？

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

### @krizaka/settings 支持 ESM 还是 CommonJS？

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

### @krizaka/settings 需要什么版本的 Node\.js？

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

### @krizaka/settings 可以商用吗？

@krizaka/settings 使用 Apache-2\.0 许可。宽松许可：允许商业使用、修改和再分发，并附带明确的专利授权；分发时需保留许可与 NOTICE 文件，修改过的文件要注明改动。以上为概括，不构成法律意见，请以许可原文为准。

### @krizaka/settings 还在维护吗？

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

