# @contember/bindx-generator 中文文档

规范地址：https://npmcn.com/package/%40contember/bindx-generator/

版本：0\.1\.61
npm 元数据更新时间：2026-11-04T17:56:53.105Z
中文译文更新时间：2026-11-10T16:22:11.015Z
软件包许可：MIT

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

原始 npm 页面：https://www.npmjs.com/package/%40contember/bindx-generator
原文对照：https://npmcn.com/package/%40contember/bindx-generator/?lang=original
项目主页：https://github.com/contember/bindx#readme
源码仓库：https://github.com/contember/bindx

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

- 包体积（解压后）：73.9 kB，42 个文件
- 模块格式：ES Module
- TypeScript 类型：未声明
- 运行依赖：2 个
- 首次发布：2026-03-23T14:15:57.177Z
- 最新版本发布：2026-11-04T17:56:52.775Z
- 近 30 天下载量：6823（2026-10-11 至 2026-11-09，npm 官方下载统计）
- 已发布版本数：56（近 12 个月 56 个）

## 中文简介

@ contember/ bindx 的 Schema 生成器, 有基于角色的 ACL 支持

## 安装

```sh
npm install @contember/bindx-generator
```

也可以使用：`pnpm add @contember/bindx-generator`、`yarn add @contember/bindx-generator`、`bun add @contember/bindx-generator`

## README

# @ contember/bindx-生成器

Schema 生成器用于 `@contember/bindx` 与基于角色的ACL支持. 从 Contember 生成 TypeScript 类型和运行时间计划定义 `Model.Schema` 财务报告和审定财务报表 `Acl.Schema`。 。 。 .

## 安装

```bash
npm install @contember/bindx-generator @contember/schema @contember/schema-utils
```

## 使用量

### 基本一代(不含ACL)

```typescript
import { generate } from '@contember/bindx-generator'
import { Model } from '@contember/schema'

const model: Model.Schema = {
  enums: { /* ... */ },
  entities: { /* ... */ }
}

const files = generate(model)

// Write files
for (const [filename, content] of Object.entries(files)) {
  fs.writeFileSync(`./generated/${filename}`, content)
}
```

### 以作用为基础的ACL生成

```typescript
import { generate } from '@contember/bindx-generator'
import { Model, Acl } from '@contember/schema'

const model: Model.Schema = { /* ... */ }
const acl: Acl.Schema = {
  roles: {
    public: {
      stages: '*',
      entities: {
        Article: {
          predicates: {},
          operations: {
            read: {
              id: true,
              title: true,
              // Only public fields
            }
          }
        }
      },
      variables: {}
    },
    editor: {
      stages: '*',
      entities: {
        Article: {
          predicates: {},
          operations: {
            read: {
              id: true,
              title: true,
              content: true,
              author: true,
              // All fields accessible to editors
            }
          }
        }
      },
      variables: {}
    }
  }
}

const files = generate(model, acl)
```

## 生成的文件

生成器产生5个文件 :

| 文件 | 说明 |
| --- | --- |
| `entities.ts` | 类型脚本实体类型 `columns`, (中文(简体) ), `hasOne`, (中文(简体) ), `hasMany` 结构 |
| `names.ts` | 查询架构的运行时计划名称( JSON) |
| `enums.ts` | 类型 |
| `types.ts` | 共享的策略界面定义 |
| `index.ts` | 导出和预配置的绑定实例 |

### 示例输出

#### 没有ACL

```typescript
// entities.ts
export interface Article {
  columns: {
    id: string
    title: string
    content: string | null
  }
  hasOne: {
    author: Author
  }
  hasMany: {
    tags: Tag
  }
}

// index.ts
export const { useEntity, useEntityList, Entity, createComponent } = createBindx<BindxSchema>(schemaNames)
```

#### 基于作用的ACL

```typescript
// entities.ts
export interface PublicArticle {
  columns: {
    id: string
    title: string
  }
  hasOne: {}
  hasMany: {}
}

export interface EditorArticle {
  columns: {
    id: string
    title: string
    content: string | null
  }
  hasOne: {
    author: EditorAuthor
  }
  hasMany: {
    tags: EditorTag
  }
}

export interface RoleSchemas {
  public: PublicSchema
  editor: EditorSchema
}

// index.ts
export const {
  roleSchemaRegistry,
  RoleAwareProvider,
  Entity,
  HasRole,
  useEntity,
  useEntityList,
  createComponent
} = createRoleAwareBindx<RoleSchemas>(roleSchemaDefinitions)
```

## 选项

```typescript
export interface BindxGeneratorOptions {
  /**
   * Whether to flatten inherited roles.
   * Default: true
   */
  flattenInheritance?: boolean

  /**
   * Whether to treat predicate-based permissions as allowed.
   * When true, any non-false permission allows access.
   * When false, only explicit `true` permissions are allowed.
   * Default: true
   */
  allowPredicateAccess?: boolean
}

const files = generate(model, acl, {
  flattenInheritance: true,
  allowPredicateAccess: true
})
```

## CLI 使用量

您可以创建一个脚本来生成计划 :

```typescript
// scripts/generate-schema.ts
import { generate } from '@contember/bindx-generator'
import { Model, Acl } from '@contember/schema'
import { writeFile, mkdir } from 'fs/promises'
import { join } from 'path'

// Import your model and ACL
import { model, acl } from './your-schema'

async function main() {
  const files = generate(model, acl)
  
  const outputDir = './src/generated'
  await mkdir(outputDir, { recursive: true })
  
  for (const [filename, content] of Object.entries(files)) {
    await writeFile(join(outputDir, filename), content)
  }
  
  console.log('✅ Schema generated')
}

main()
```

添加为 `package.json`数字 :

```json
{
  "scripts": {
    "generate:schema": "tsx scripts/generate-schema.ts"
  }
}
```

## 如何运作

### ACL 过滤

生成器应用类似于 Contember 的 ACL 权限 `IntrospectionSchemaFactory`数字 :

1.  **实体过滤**: 仅有实体 `read` 包括业务
2.  **字段过滤**: 只有有读权限的字段(`true` 或上游)
3.  **关系过滤**: 与无法进入的实体的关系被排除在外
4.  **角色继承**: 继承角色的权限被合并

### 类型安全

生成类型完全类型安全 :

```typescript
// Public role cannot access content field
<RoleAwareProvider roles={['public']}>
  <Entity name="Article" id={id}>
    {article => (
      // ✅ OK
      <div>{article.data.title}</div>
      
      // ❌ Type error: 'content' doesn't exist on PublicArticle
      <div>{article.data.content}</div>
    )}
  </Entity>
</RoleAwareProvider>
```

## 许可证

麻省理工学院

## 常见问题

### @contember/bindx-generator 是什么？

@ contember/ bindx 的 Schema 生成器, 有基于角色的 ACL 支持

### 如何安装 @contember/bindx-generator？

在项目目录运行 npm install @contember/bindx-generator，或使用 pnpm add / yarn add / bun add。

### @contember/bindx-generator 支持 TypeScript 吗？

该包的 package\.json 没有声明类型入口。需要类型提示时，可以在 npm 上查找社区维护的 @types/contember\_\_bindx-generator 是否存在。

### @contember/bindx-generator 支持 ESM 还是 CommonJS？

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

### @contember/bindx-generator 可以商用吗？

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

### @contember/bindx-generator 的下载量有多少？

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

### @contember/bindx-generator 还在维护吗？

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

