@atlaskit/adf-schema-generator

中文文档
4.0.4发布于 2026/09/17Apache-2.0TypeScriptESM + CJS近 30 天下载 73万

生成 ADF 和 PM 计划

中文使用文档
文档目录6 节
  1. 使用量
  2. DSL 服务器
  3. 第0阶段
  4. 轨迹
  5. 术语
  6. 出版

ADF Schema 生成器

这个软件包提供了一个简单的DSL(域特定语言),用于定义 schema, 可转换成多种输出格式,与 ADF 合作需要这些格式(阿特拉斯文档格式):

  • 民主同盟军JSON Schema
  • 普罗塞米尔斯克马
  • 校验光谱

使用量

DSL 服务器

软件包导出一些可用于定义方案功能:

节点和标记 :

  • adfNode – 定义一个新的 ADF 节点
  • adfMark - 定义一个新的 ADF 标记

组 :

  • adfNodeGroup – 定义一个新的 ADF 节点组
  • adfMarkGroup — 定义一个新的 ADF 标记组

内容表达式 :

  • $or - 创建允许任何指定内容项目的内容表达式
  • $onePlus - 创建允许一个或多个指定内容项目的内容表达式
  • $zeroPlus - 创建允许零或更多指定内容项目的内容表达式
  • $range - 创建允许限制儿童数量的内容表达式

节点和变量:

经常需要定义一个略为不同的节点版本. 例如:

  • 在节点上启用/禁用某些属性的特征旗
  • 更严格地验证特定用途的大小写,比如允许在顶级节点上留下某些标记, 并且不允许它们在同一节点的嵌入变体上.

备选案文允许这种使用.

每个变体浅显地超过基点节点光谱. 然后可以通过 node.use('variant_name') 方法.

在节点定义中添加新的变体,默认不会影响输出计划. 该变体必须明确用于计划定义中,通过 node.use('variant_name')。 。 。 .

const paragraph = adfNode('paragraph')
  .define({
    group: blockGroup,
    content: [$zeroPlus($or(text))],
  })
  // Defines a variant of the node called 'with-attrs'
  .variant('with-attrs', {
    attrs: {
      alignment: {
        type: 'enum',
        values: ['start', 'end', 'center', 'justify'],
        default: 'start',
      },
    },
  });

// paragraphWithAttrs now references a new instance of the ADFNode with the 'with-attrs' variant applied.
const paragraphWithAttrs = paragraph.use('with-attrs');
const name = paragraphWithAttrs.getName(); // paragraph_with-attrs_node (name includes node type and variant name)

// Both base and a variant can be used in the schema definition, even as children of the same node:
const doc = adfNode('doc').define({
  root: true,
  content: [$onePlus($or(paragraph, paragraphWithAttrs))],
  //                                ^ Variant is explicitly used here
});

// This is similar to a union type in TypeScript, where you can have a type that is either one type or another.

示例

import {
  adfNode,
  adfMark,
  adfNodeGroup,
  $or,
  $onePlus,
  $zeroPlus,
} from '@atlaskit/adf-schema-generator';

const codeMark = adfMark('code').define();

const text = adfNode('text').define({
  marks: [codeMark],
});

const paragraph = adfNode('paragraph')
  .define({
    content: [$zeroPlus($or(text))],
  })
  .variant('with-attrs', {
    attrs: {
      alignment: {
        type: 'enum',
        values: ['start', 'end', 'center', 'justify'],
        default: 'start',
      },
    },
  });

const blockGroup = adfNodeGroup('block', [paragraph]);

const doc = adfNode('doc').define({
  root: true,
  content: [$onePlus($or(blockGroup))],
});

第0阶段

阶段0 schema是一款实验性的超级集全 schema. 它被用来测试新的特征,不能保证稳定.

有两种方法可以定义一个阶段0节点.

1. 使用内线 stage0 节点光谱覆盖 :

内入 stage0 spec是碱性节点光谱的浅接. 例如,这会产生两个PM节点: paragraph 财务报告和审定财务报表 paragraphStage0。 。 。 .

const paragraph = adfNode('paragraph').define({
  content: [$zeroPlus($or(text))],
  stage0: {
    attrs: {
      alignment: {
        type: 'enum',
        values: ['start', 'end', 'center', 'justify'],
        default: 'start',
      },
    },
  },
});

使用内置相位 0 覆盖是修改/扩展节点光谱的首选方式 它简化了未来的晋升 全面计划.

2. 将整个节点标为第0阶段

标出节点为 stage0: true 将仅输出阶段 0 节点光谱。 它不会出现在完整的Json计划. 将整个节点标为舞台0是将新的节点引入ADF schema的首选方式.

const paragraph = adfNode('paragraph').define({
  content: [$zeroPlus($or(text))],
  stage0: true,
});

轨迹

用于生成输出格式的图案:

Traverse接受 ADF DSL 树的根节点和一个访问对象. 访问器是一种常见于树向转算法的图案. 它允许将曲面逻辑与实际处理逻辑相分离.

import { traverse } from '@atlaskit/adf-schema-generator';

traverse(doc, {
  node: (node, variant, children) => {
    return node.type;
  },
  group: (group, children) => {
    return group.name;
  },
  $or: (children) => {
    return children.join(' | ');
  },
});

术语

  • @DSLCompatibilityException:此注释标志着变压器在DSL转换过程中所做的特殊情况,这些变压器处理与特定目标计划的临时相容问题. 随着DSL逐渐包括这些特例,它充当追踪机制,以查明、确定并消除这些特例.

出版

版本突起和出版是通过变换器工作流程进行管理的.

版本与发布记录

@atlaskit/adf-schema-generator 共发布 108 个版本,首次发布于 2024/05/09;过去 12 个月发布了 13 个版本。

版本发布日期距今
4.0.4latest2026/09/171 个月前
4.0.32026/09/072 个月前
4.0.22026/08/182 个月前
4.0.12026/08/172 个月前
4.0.02026/08/112 个月前
3.1.12026/07/313 个月前

关于 @atlaskit/adf-schema-generator 的常见问题

@atlaskit/adf-schema-generator 是什么?

生成 ADF 和 PM 计划

如何安装 @atlaskit/adf-schema-generator?

在项目目录运行 npm install @atlaskit/adf-schema-generator,或使用 pnpm add / yarn add / bun add。

@atlaskit/adf-schema-generator 支持 TypeScript 吗?

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

@atlaskit/adf-schema-generator 支持 ESM 还是 CommonJS?

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

@atlaskit/adf-schema-generator 可以商用吗?

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

@atlaskit/adf-schema-generator 的下载量有多少?

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

@atlaskit/adf-schema-generator 还在维护吗?

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