@knpkv/confluence-to-markdown 0.6.0 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +39 -0
- package/LICENSE +21 -0
- package/README.md +22 -13
- package/dist/AdfPlaceholders.d.ts +42 -0
- package/dist/AdfPlaceholders.d.ts.map +1 -0
- package/dist/AdfPlaceholders.js +547 -0
- package/dist/AdfPlaceholders.js.map +1 -0
- package/dist/AdfSchemaValidator.d.ts +37 -0
- package/dist/AdfSchemaValidator.d.ts.map +1 -0
- package/dist/AdfSchemaValidator.js +37 -0
- package/dist/AdfSchemaValidator.js.map +1 -0
- package/dist/AdfWalker.d.ts +39 -0
- package/dist/AdfWalker.d.ts.map +1 -0
- package/dist/AdfWalker.js +527 -0
- package/dist/AdfWalker.js.map +1 -0
- package/dist/AtlaskitTransformers.d.ts +35 -0
- package/dist/AtlaskitTransformers.d.ts.map +1 -0
- package/dist/AtlaskitTransformers.js +48 -0
- package/dist/AtlaskitTransformers.js.map +1 -0
- package/dist/Brand.d.ts +6 -6
- package/dist/Brand.d.ts.map +1 -1
- package/dist/Brand.js +8 -6
- package/dist/Brand.js.map +1 -1
- package/dist/ConfluenceAuth.d.ts +4 -4
- package/dist/ConfluenceAuth.d.ts.map +1 -1
- package/dist/ConfluenceAuth.js +37 -39
- package/dist/ConfluenceAuth.js.map +1 -1
- package/dist/ConfluenceClient.d.ts +7 -17
- package/dist/ConfluenceClient.d.ts.map +1 -1
- package/dist/ConfluenceClient.js +81 -38
- package/dist/ConfluenceClient.js.map +1 -1
- package/dist/ConfluenceConfig.d.ts +3 -3
- package/dist/ConfluenceConfig.d.ts.map +1 -1
- package/dist/ConfluenceConfig.js +13 -11
- package/dist/ConfluenceConfig.js.map +1 -1
- package/dist/ConfluenceError.d.ts +68 -16
- package/dist/ConfluenceError.d.ts.map +1 -1
- package/dist/ConfluenceError.js +30 -1
- package/dist/ConfluenceError.js.map +1 -1
- package/dist/GitError.d.ts +5 -5
- package/dist/GitService.d.ts +11 -3
- package/dist/GitService.d.ts.map +1 -1
- package/dist/GitService.js +22 -27
- package/dist/GitService.js.map +1 -1
- package/dist/LocalFileSystem.d.ts +3 -3
- package/dist/LocalFileSystem.d.ts.map +1 -1
- package/dist/LocalFileSystem.js +6 -6
- package/dist/LocalFileSystem.js.map +1 -1
- package/dist/MarkdownConverter.d.ts +16 -65
- package/dist/MarkdownConverter.d.ts.map +1 -1
- package/dist/MarkdownConverter.js +64 -85
- package/dist/MarkdownConverter.js.map +1 -1
- package/dist/Schemas.d.ts +128 -141
- package/dist/Schemas.d.ts.map +1 -1
- package/dist/Schemas.js +21 -23
- package/dist/Schemas.js.map +1 -1
- package/dist/SyncEngine.d.ts +8 -5
- package/dist/SyncEngine.d.ts.map +1 -1
- package/dist/SyncEngine.js +189 -113
- package/dist/SyncEngine.js.map +1 -1
- package/dist/bin.js +23 -35
- package/dist/bin.js.map +1 -1
- package/dist/commands/auth.d.ts +2 -14
- package/dist/commands/auth.d.ts.map +1 -1
- package/dist/commands/auth.js +11 -16
- package/dist/commands/auth.js.map +1 -1
- package/dist/commands/clone.d.ts +4 -6
- package/dist/commands/clone.d.ts.map +1 -1
- package/dist/commands/clone.js +34 -32
- package/dist/commands/clone.js.map +1 -1
- package/dist/commands/delete.d.ts +2 -10
- package/dist/commands/delete.d.ts.map +1 -1
- package/dist/commands/delete.js +5 -4
- package/dist/commands/delete.js.map +1 -1
- package/dist/commands/errorHandler.d.ts +2 -1
- package/dist/commands/errorHandler.d.ts.map +1 -1
- package/dist/commands/errorHandler.js +22 -15
- package/dist/commands/errorHandler.js.map +1 -1
- package/dist/commands/fetch.d.ts +27 -0
- package/dist/commands/fetch.d.ts.map +1 -0
- package/dist/commands/fetch.js +48 -0
- package/dist/commands/fetch.js.map +1 -0
- package/dist/commands/git.d.ts +7 -10
- package/dist/commands/git.d.ts.map +1 -1
- package/dist/commands/git.js +6 -6
- package/dist/commands/git.js.map +1 -1
- package/dist/commands/index.d.ts +1 -0
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +1 -0
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/layers.d.ts +10 -9
- package/dist/commands/layers.d.ts.map +1 -1
- package/dist/commands/layers.js +41 -30
- package/dist/commands/layers.js.map +1 -1
- package/dist/commands/new.d.ts +2 -6
- package/dist/commands/new.d.ts.map +1 -1
- package/dist/commands/new.js +5 -4
- package/dist/commands/new.js.map +1 -1
- package/dist/commands/pageInput.d.ts +19 -0
- package/dist/commands/pageInput.d.ts.map +1 -0
- package/dist/commands/pageInput.js +68 -0
- package/dist/commands/pageInput.js.map +1 -0
- package/dist/commands/root.d.ts +8 -0
- package/dist/commands/root.d.ts.map +1 -0
- package/dist/commands/root.js +29 -0
- package/dist/commands/root.js.map +1 -0
- package/dist/commands/sync.d.ts +6 -9
- package/dist/commands/sync.d.ts.map +1 -1
- package/dist/commands/sync.js +5 -6
- package/dist/commands/sync.js.map +1 -1
- package/dist/index.d.ts +3 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -13
- package/dist/index.js.map +1 -1
- package/dist/internal/NodeLayers.d.ts.map +1 -1
- package/dist/internal/NodeLayers.js +1 -2
- package/dist/internal/NodeLayers.js.map +1 -1
- package/dist/internal/adfMetadata.d.ts +30 -0
- package/dist/internal/adfMetadata.d.ts.map +1 -0
- package/dist/internal/adfMetadata.js +126 -0
- package/dist/internal/adfMetadata.js.map +1 -0
- package/dist/internal/cleanMarkdown.d.ts +5 -0
- package/dist/internal/cleanMarkdown.d.ts.map +1 -0
- package/dist/internal/cleanMarkdown.js +13 -0
- package/dist/internal/cleanMarkdown.js.map +1 -0
- package/dist/internal/frontmatter.d.ts.map +1 -1
- package/dist/internal/frontmatter.js +41 -8
- package/dist/internal/frontmatter.js.map +1 -1
- package/dist/internal/gitCommands.d.ts +9 -3
- package/dist/internal/gitCommands.d.ts.map +1 -1
- package/dist/internal/gitCommands.js +18 -9
- package/dist/internal/gitCommands.js.map +1 -1
- package/dist/internal/hashUtils.d.ts +1 -1
- package/dist/internal/hashUtils.d.ts.map +1 -1
- package/dist/internal/hashUtils.js +1 -1
- package/dist/internal/hashUtils.js.map +1 -1
- package/dist/internal/oauthServer.d.ts +10 -5
- package/dist/internal/oauthServer.d.ts.map +1 -1
- package/dist/internal/oauthServer.js +19 -40
- package/dist/internal/oauthServer.js.map +1 -1
- package/dist/internal/pathUtils.d.ts +1 -1
- package/dist/internal/pathUtils.d.ts.map +1 -1
- package/dist/internal/pathUtils.js +1 -1
- package/dist/internal/pathUtils.js.map +1 -1
- package/dist/internal/process.d.ts +15 -0
- package/dist/internal/process.d.ts.map +1 -0
- package/dist/internal/process.js +10 -0
- package/dist/internal/process.js.map +1 -0
- package/dist/internal/stdio.d.ts +6 -0
- package/dist/internal/stdio.d.ts.map +1 -0
- package/dist/internal/stdio.js +15 -0
- package/dist/internal/stdio.js.map +1 -0
- package/dist/internal/tokenStorage.d.ts +3 -13
- package/dist/internal/tokenStorage.d.ts.map +1 -1
- package/dist/internal/tokenStorage.js +26 -24
- package/dist/internal/tokenStorage.js.map +1 -1
- package/dist/internal/userCache.d.ts +1 -1
- package/dist/internal/userCache.d.ts.map +1 -1
- package/dist/internal/userCache.js +1 -1
- package/dist/internal/userCache.js.map +1 -1
- package/package.json +30 -30
- package/skills/confluence/SKILL.md +143 -0
- package/skills/confluence/agents/openai.yaml +4 -0
- package/src/AdfPlaceholders.ts +310 -13
- package/src/AdfSchemaValidator.ts +2 -4
- package/src/AdfWalker.ts +122 -42
- package/src/AtlaskitTransformers.ts +2 -4
- package/src/Brand.ts +11 -16
- package/src/ConfluenceAuth.ts +22 -30
- package/src/ConfluenceClient.ts +24 -20
- package/src/ConfluenceConfig.ts +14 -14
- package/src/GitService.ts +39 -49
- package/src/LocalFileSystem.ts +7 -9
- package/src/MarkdownConverter.ts +2 -4
- package/src/Schemas.ts +13 -12
- package/src/SyncEngine.ts +151 -53
- package/src/bin.ts +30 -56
- package/src/commands/auth.ts +21 -18
- package/src/commands/clone.ts +38 -37
- package/src/commands/delete.ts +5 -4
- package/src/commands/errorHandler.ts +25 -18
- package/src/commands/fetch.ts +90 -0
- package/src/commands/git.ts +6 -6
- package/src/commands/index.ts +1 -0
- package/src/commands/layers.ts +53 -33
- package/src/commands/new.ts +5 -4
- package/src/commands/pageInput.ts +103 -0
- package/src/commands/root.ts +59 -0
- package/src/commands/sync.ts +7 -6
- package/src/internal/NodeLayers.ts +1 -2
- package/src/internal/adfMetadata.ts +145 -0
- package/src/internal/cleanMarkdown.ts +15 -0
- package/src/internal/frontmatter.ts +45 -8
- package/src/internal/gitCommands.ts +23 -17
- package/src/internal/hashUtils.ts +2 -2
- package/src/internal/oauthServer.ts +84 -105
- package/src/internal/pathUtils.ts +1 -1
- package/src/internal/process.ts +15 -0
- package/src/internal/stdio.ts +22 -0
- package/src/internal/tokenStorage.ts +39 -29
- package/src/internal/userCache.ts +2 -2
- package/test/AdfPlaceholders.test.ts +213 -0
- package/test/AdfSchemaValidator.test.ts +6 -6
- package/test/AdfWalker.test.ts +167 -21
- package/test/AtlaskitTransformers.test.ts +4 -4
- package/test/Brand.test.ts +11 -11
- package/test/GitService.test.ts +6 -2
- package/test/MarkdownConverter.test.ts +12 -11
- package/test/RoundTrip.test.ts +258 -3
- package/test/Schemas.test.ts +40 -40
- package/test/adfMetadata.test.ts +110 -0
- package/test/cleanMarkdown.test.ts +36 -0
- package/test/commandHarness.test.ts +79 -0
- package/test/commandHarness.ts +147 -0
- package/test/fetch.test.ts +61 -0
- package/test/frontmatter.test.ts +41 -0
- package/test/integration.test.ts +569 -156
- package/test/layers.test.ts +12 -0
- package/test/oauthServer.test.ts +4 -5
- package/test/pageInput.test.ts +83 -0
- package/test/tokenStorage.test.ts +17 -17
- package/dist/SchemaConverterError.d.ts +0 -108
- package/dist/SchemaConverterError.d.ts.map +0 -1
- package/dist/SchemaConverterError.js +0 -84
- package/dist/SchemaConverterError.js.map +0 -1
- package/dist/ast/BlockNode.d.ts +0 -468
- package/dist/ast/BlockNode.d.ts.map +0 -1
- package/dist/ast/BlockNode.js +0 -319
- package/dist/ast/BlockNode.js.map +0 -1
- package/dist/ast/Document.d.ts +0 -244
- package/dist/ast/Document.d.ts.map +0 -1
- package/dist/ast/Document.js +0 -69
- package/dist/ast/Document.js.map +0 -1
- package/dist/ast/InlineNode.d.ts +0 -477
- package/dist/ast/InlineNode.d.ts.map +0 -1
- package/dist/ast/InlineNode.js +0 -263
- package/dist/ast/InlineNode.js.map +0 -1
- package/dist/ast/MacroNode.d.ts +0 -267
- package/dist/ast/MacroNode.d.ts.map +0 -1
- package/dist/ast/MacroNode.js +0 -164
- package/dist/ast/MacroNode.js.map +0 -1
- package/dist/ast/index.d.ts +0 -10
- package/dist/ast/index.d.ts.map +0 -1
- package/dist/ast/index.js +0 -14
- package/dist/ast/index.js.map +0 -1
- package/dist/parsers/ConfluenceParser.d.ts +0 -26
- package/dist/parsers/ConfluenceParser.d.ts.map +0 -1
- package/dist/parsers/ConfluenceParser.js +0 -792
- package/dist/parsers/ConfluenceParser.js.map +0 -1
- package/dist/parsers/MarkdownParser.d.ts +0 -26
- package/dist/parsers/MarkdownParser.d.ts.map +0 -1
- package/dist/parsers/MarkdownParser.js +0 -873
- package/dist/parsers/MarkdownParser.js.map +0 -1
- package/dist/parsers/index.d.ts +0 -8
- package/dist/parsers/index.d.ts.map +0 -1
- package/dist/parsers/index.js +0 -8
- package/dist/parsers/index.js.map +0 -1
- package/dist/parsers/preprocessing/ConfluencePreprocessing.d.ts +0 -23
- package/dist/parsers/preprocessing/ConfluencePreprocessing.d.ts.map +0 -1
- package/dist/parsers/preprocessing/ConfluencePreprocessing.js +0 -323
- package/dist/parsers/preprocessing/ConfluencePreprocessing.js.map +0 -1
- package/dist/parsers/preprocessing/index.d.ts +0 -7
- package/dist/parsers/preprocessing/index.d.ts.map +0 -1
- package/dist/parsers/preprocessing/index.js +0 -7
- package/dist/parsers/preprocessing/index.js.map +0 -1
- package/dist/schemas/ConfluenceSchema.d.ts +0 -21
- package/dist/schemas/ConfluenceSchema.d.ts.map +0 -1
- package/dist/schemas/ConfluenceSchema.js +0 -38
- package/dist/schemas/ConfluenceSchema.js.map +0 -1
- package/dist/schemas/ConversionSchema.d.ts +0 -35
- package/dist/schemas/ConversionSchema.d.ts.map +0 -1
- package/dist/schemas/ConversionSchema.js +0 -208
- package/dist/schemas/ConversionSchema.js.map +0 -1
- package/dist/schemas/MarkdownSchema.d.ts +0 -21
- package/dist/schemas/MarkdownSchema.d.ts.map +0 -1
- package/dist/schemas/MarkdownSchema.js +0 -38
- package/dist/schemas/MarkdownSchema.js.map +0 -1
- package/dist/schemas/hast/HastFromHtml.d.ts +0 -27
- package/dist/schemas/hast/HastFromHtml.d.ts.map +0 -1
- package/dist/schemas/hast/HastFromHtml.js +0 -107
- package/dist/schemas/hast/HastFromHtml.js.map +0 -1
- package/dist/schemas/hast/HastSchema.d.ts +0 -195
- package/dist/schemas/hast/HastSchema.d.ts.map +0 -1
- package/dist/schemas/hast/HastSchema.js +0 -183
- package/dist/schemas/hast/HastSchema.js.map +0 -1
- package/dist/schemas/hast/index.d.ts +0 -9
- package/dist/schemas/hast/index.d.ts.map +0 -1
- package/dist/schemas/hast/index.js +0 -3
- package/dist/schemas/hast/index.js.map +0 -1
- package/dist/schemas/index.d.ts +0 -14
- package/dist/schemas/index.d.ts.map +0 -1
- package/dist/schemas/index.js +0 -16
- package/dist/schemas/index.js.map +0 -1
- package/dist/schemas/mdast/MdastFromMarkdown.d.ts +0 -30
- package/dist/schemas/mdast/MdastFromMarkdown.d.ts.map +0 -1
- package/dist/schemas/mdast/MdastFromMarkdown.js +0 -79
- package/dist/schemas/mdast/MdastFromMarkdown.js.map +0 -1
- package/dist/schemas/mdast/MdastSchema.d.ts +0 -385
- package/dist/schemas/mdast/MdastSchema.d.ts.map +0 -1
- package/dist/schemas/mdast/MdastSchema.js +0 -266
- package/dist/schemas/mdast/MdastSchema.js.map +0 -1
- package/dist/schemas/mdast/index.d.ts +0 -10
- package/dist/schemas/mdast/index.d.ts.map +0 -1
- package/dist/schemas/mdast/index.js +0 -4
- package/dist/schemas/mdast/index.js.map +0 -1
- package/dist/schemas/mdast/mdastToString.d.ts +0 -13
- package/dist/schemas/mdast/mdastToString.d.ts.map +0 -1
- package/dist/schemas/mdast/mdastToString.js +0 -85
- package/dist/schemas/mdast/mdastToString.js.map +0 -1
- package/dist/schemas/nodes/block/BlockSchema.d.ts +0 -43
- package/dist/schemas/nodes/block/BlockSchema.d.ts.map +0 -1
- package/dist/schemas/nodes/block/BlockSchema.js +0 -634
- package/dist/schemas/nodes/block/BlockSchema.js.map +0 -1
- package/dist/schemas/nodes/block/index.d.ts +0 -7
- package/dist/schemas/nodes/block/index.d.ts.map +0 -1
- package/dist/schemas/nodes/block/index.js +0 -7
- package/dist/schemas/nodes/block/index.js.map +0 -1
- package/dist/schemas/nodes/index.d.ts +0 -9
- package/dist/schemas/nodes/index.d.ts.map +0 -1
- package/dist/schemas/nodes/index.js +0 -12
- package/dist/schemas/nodes/index.js.map +0 -1
- package/dist/schemas/nodes/inline/InlineSchema.d.ts +0 -48
- package/dist/schemas/nodes/inline/InlineSchema.d.ts.map +0 -1
- package/dist/schemas/nodes/inline/InlineSchema.js +0 -436
- package/dist/schemas/nodes/inline/InlineSchema.js.map +0 -1
- package/dist/schemas/nodes/inline/index.d.ts +0 -7
- package/dist/schemas/nodes/inline/index.d.ts.map +0 -1
- package/dist/schemas/nodes/inline/index.js +0 -7
- package/dist/schemas/nodes/inline/index.js.map +0 -1
- package/dist/schemas/nodes/macro/MacroSchema.d.ts +0 -27
- package/dist/schemas/nodes/macro/MacroSchema.d.ts.map +0 -1
- package/dist/schemas/nodes/macro/MacroSchema.js +0 -162
- package/dist/schemas/nodes/macro/MacroSchema.js.map +0 -1
- package/dist/schemas/nodes/macro/index.d.ts +0 -7
- package/dist/schemas/nodes/macro/index.d.ts.map +0 -1
- package/dist/schemas/nodes/macro/index.js +0 -7
- package/dist/schemas/nodes/macro/index.js.map +0 -1
- package/dist/schemas/preprocessing/ConfluencePreprocessor.d.ts +0 -53
- package/dist/schemas/preprocessing/ConfluencePreprocessor.d.ts.map +0 -1
- package/dist/schemas/preprocessing/ConfluencePreprocessor.js +0 -349
- package/dist/schemas/preprocessing/ConfluencePreprocessor.js.map +0 -1
- package/dist/schemas/preprocessing/index.d.ts +0 -8
- package/dist/schemas/preprocessing/index.d.ts.map +0 -1
- package/dist/schemas/preprocessing/index.js +0 -2
- package/dist/schemas/preprocessing/index.js.map +0 -1
- package/dist/serializers/ConfluenceSerializer.d.ts +0 -30
- package/dist/serializers/ConfluenceSerializer.d.ts.map +0 -1
- package/dist/serializers/ConfluenceSerializer.js +0 -551
- package/dist/serializers/ConfluenceSerializer.js.map +0 -1
- package/dist/serializers/MarkdownSerializer.d.ts +0 -34
- package/dist/serializers/MarkdownSerializer.d.ts.map +0 -1
- package/dist/serializers/MarkdownSerializer.js +0 -355
- package/dist/serializers/MarkdownSerializer.js.map +0 -1
- package/dist/serializers/index.d.ts +0 -8
- package/dist/serializers/index.d.ts.map +0 -1
- package/dist/serializers/index.js +0 -8
- package/dist/serializers/index.js.map +0 -1
|
@@ -0,0 +1,547 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reverse the AdfWalker's placeholder syntax back into proper ADF nodes
|
|
3
|
+
* after the @atlaskit markdown transformer has run.
|
|
4
|
+
*
|
|
5
|
+
* The walker emits Confluence-only nodes (status, extension, inlineExtension)
|
|
6
|
+
* as HTML/comment placeholders so they survive a pull. The markdown transformer
|
|
7
|
+
* has no concept of these nodes, so on push it parses the placeholders as
|
|
8
|
+
* plain text — Confluence then renders the literal HTML/comment. This module
|
|
9
|
+
* walks the produced ADF and rewrites those text patterns into the structured
|
|
10
|
+
* nodes the editor expects.
|
|
11
|
+
*
|
|
12
|
+
* Patterns recognized (must match the AdfWalker emission exactly):
|
|
13
|
+
* - `<span class="adf-status" data-color="COLOR">TEXT</span>`
|
|
14
|
+
* - `<!-- adf:extension key=KEY type=TYPE attrs=BASE64 -->` (block, when
|
|
15
|
+
* the whole paragraph is just this comment; `attrs` is base64 JSON of
|
|
16
|
+
* the node's full attrs — parameters, localId, layout — and wins over
|
|
17
|
+
* the readable key/type parts; key/type-only is the legacy form)
|
|
18
|
+
* - `<!-- adf:paragraph marks=BASE64 --> BODY <!-- adf:/paragraph -->`
|
|
19
|
+
* (the body paragraph regains its paragraph-level marks)
|
|
20
|
+
* - `<!-- adf:bodiedExtension … --> BODY <!-- adf:/bodiedExtension -->`
|
|
21
|
+
* (the sibling blocks between the markers become the extension's body)
|
|
22
|
+
* - `<!-- adf:inlineCard attrs=BASE64 -->` (inline)
|
|
23
|
+
* - `<!-- adf:inlineExtension key=KEY type=TYPE attrs=BASE64 -->` (inline)
|
|
24
|
+
* - `<!-- adf:date node=BASE64 -->` and `<!-- adf:emoji node=BASE64 -->`
|
|
25
|
+
* (inline)
|
|
26
|
+
* - `<!-- adf:panel type=TYPE attrs=BASE64 --> BODY <!-- adf:/panel -->`
|
|
27
|
+
* (the sibling blocks between the markers become the panel's body)
|
|
28
|
+
* - `<!-- adf:TYPE node=BASE64 --> BODY <!-- adf:/TYPE -->` for selected
|
|
29
|
+
* native block nodes such as task/decision lists, expands, layouts,
|
|
30
|
+
* cards, and tables
|
|
31
|
+
* - `<u>TEXT</u>`, `<sub>TEXT</sub>`, `<sup>TEXT</sup>`, and exact styled
|
|
32
|
+
* spans emitted for Confluence-only inline marks
|
|
33
|
+
* - `[@Name](confluence-mention://ACCOUNT_ID)` (link mark with a
|
|
34
|
+
* custom scheme — the only way to round-trip mention accountIds)
|
|
35
|
+
* - `[[toc]]`, `[[toc:min=1,max=3]]` (block-level native syntax for the
|
|
36
|
+
* Confluence Table of Contents macro)
|
|
37
|
+
*
|
|
38
|
+
* @module
|
|
39
|
+
*/
|
|
40
|
+
import * as Option from "effect/Option";
|
|
41
|
+
import * as Schema from "effect/Schema";
|
|
42
|
+
const STATUS_RE = /<span class="adf-status"\s+data-color="([^"]+)">([^<]*)<\/span>/g;
|
|
43
|
+
const INLINE_NODE_RE = /<!--\s*adf:(date|emoji)(?:\s+node=([\s\S]*?))?\s*-->/g;
|
|
44
|
+
const INLINE_CARD_RE = /<!--\s*adf:inlineCard(?:\s+attrs=([\s\S]*?))?\s*-->/g;
|
|
45
|
+
const INLINE_EXTENSION_RE = /<!--\s*adf:inlineExtension(?:\s+key=(\S+?))?(?:\s+type=(\S+?))?(?:\s+attrs=([\s\S]*?))?\s*-->/g;
|
|
46
|
+
const UNDERLINE_RE = /<u>([^<]*)<\/u>/g;
|
|
47
|
+
const SUBSCRIPT_RE = /<sub>([^<]*)<\/sub>/g;
|
|
48
|
+
const SUPERSCRIPT_RE = /<sup>([^<]*)<\/sup>/g;
|
|
49
|
+
const TEXT_COLOR_RE = /<span style="color:([^"<>]+)">([^<]*)<\/span>/g;
|
|
50
|
+
const BACKGROUND_COLOR_RE = /<span style="background-color:([^"<>]+)">([^<]*)<\/span>/g;
|
|
51
|
+
const COMBINED_INLINE_RE = new RegExp([
|
|
52
|
+
INLINE_NODE_RE.source,
|
|
53
|
+
STATUS_RE.source,
|
|
54
|
+
INLINE_CARD_RE.source,
|
|
55
|
+
INLINE_EXTENSION_RE.source,
|
|
56
|
+
UNDERLINE_RE.source,
|
|
57
|
+
SUBSCRIPT_RE.source,
|
|
58
|
+
SUPERSCRIPT_RE.source,
|
|
59
|
+
TEXT_COLOR_RE.source,
|
|
60
|
+
BACKGROUND_COLOR_RE.source
|
|
61
|
+
].join("|"), "g");
|
|
62
|
+
const BLOCK_EXTENSION_RE = /^\s*<!--\s*adf:(extension|bodiedExtension)(?:\s+key=(\S+?))?(?:\s+type=(\S+?))?(?:\s+attrs=([\s\S]*?))?\s*-->\s*$/;
|
|
63
|
+
const BODIED_EXTENSION_END_RE = /^\s*<!--\s*adf:\/bodiedExtension\s*-->\s*$/;
|
|
64
|
+
const PANEL_RE = /^\s*<!--\s*adf:panel(?:\s+type=(\S+?))?(?:\s+attrs=([\s\S]*?))?\s*-->\s*$/;
|
|
65
|
+
const PANEL_END_RE = /^\s*<!--\s*adf:\/panel\s*-->\s*$/;
|
|
66
|
+
const ENCODED_BLOCK_NODE_RE = /^\s*<!--\s*adf:(taskList|decisionList|expand|nestedExpand|table|layoutSection|blockCard|embedCard)(?:\s+node=([\s\S]*?))?\s*-->\s*$/;
|
|
67
|
+
const ENCODED_BLOCK_NODE_END_RE = /^\s*<!--\s*adf:\/(taskList|decisionList|expand|nestedExpand|table|layoutSection|blockCard|embedCard)\s*-->\s*$/;
|
|
68
|
+
const PARAGRAPH_MARKS_RE = /^\s*<!--\s*adf:paragraph(?:\s+marks=([\s\S]*?))?\s*-->\s*$/;
|
|
69
|
+
const PARAGRAPH_MARKS_END_RE = /^\s*<!--\s*adf:\/paragraph\s*-->\s*$/;
|
|
70
|
+
const TOC_RE = /^\s*\[\[toc(?::([^\]]+))?\]\]\s*$/;
|
|
71
|
+
const CONFLUENCE_CORE_MACRO_TYPE = "com.atlassian.confluence.macro.core";
|
|
72
|
+
const textNode = (text, marks) => marks && marks.length > 0 ? { type: "text", text, marks } : { type: "text", text };
|
|
73
|
+
const addMark = (marks, mark) => marks && marks.length > 0 ? [...marks, mark] : [mark];
|
|
74
|
+
// Code-marked text is a *quotation* of placeholder syntax, not a placeholder
|
|
75
|
+
// (the walker never emits placeholders with a code mark) — expanding it would
|
|
76
|
+
// corrupt documentation that demonstrates the syntax.
|
|
77
|
+
const hasCodeMark = (n) => (n.marks ?? []).some((m) => m.type === "code");
|
|
78
|
+
// Parents whose content model permits bodiedExtension per @atlaskit/adf-schema
|
|
79
|
+
// (blockquote/listItem/tableCell allow plain extension but NOT bodied — emitting
|
|
80
|
+
// one there fails outgoing validation and the whole push errors out).
|
|
81
|
+
const BODIED_EXTENSION_PARENTS = new Set(["doc", "layoutColumn"]);
|
|
82
|
+
// Web APIs only (atob/TextDecoder) — this module is a standalone subpath
|
|
83
|
+
// export and must not assume Node, mirroring the walker's encoder.
|
|
84
|
+
const fromBase64 = (b64) => {
|
|
85
|
+
const bin = atob(b64);
|
|
86
|
+
return new TextDecoder().decode(Uint8Array.from(bin, (c) => c.charCodeAt(0)));
|
|
87
|
+
};
|
|
88
|
+
// JSON string → free-form attrs record; rejects null/arrays/primitives.
|
|
89
|
+
const AttrsBlob = Schema.Record(Schema.String, Schema.Unknown);
|
|
90
|
+
const decodeAttrsBlob = Schema.decodeUnknownOption(AttrsBlob);
|
|
91
|
+
const decodeAttrs = (b64) => {
|
|
92
|
+
if (!b64)
|
|
93
|
+
return null;
|
|
94
|
+
try {
|
|
95
|
+
const raw = b64.trim();
|
|
96
|
+
const parsed = JSON.parse(raw.startsWith("{") ? raw : fromBase64(raw));
|
|
97
|
+
const decoded = decodeAttrsBlob(parsed);
|
|
98
|
+
return Option.isSome(decoded) ? decoded.value : null;
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
// Invalid JSON/base64 (hand-edited file?) — fall back to the readable key/type.
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
104
|
+
};
|
|
105
|
+
const buildExtensionAttrs = (key, type, attrsB64) => {
|
|
106
|
+
const decoded = decodeAttrs(attrsB64);
|
|
107
|
+
if (decoded)
|
|
108
|
+
return decoded;
|
|
109
|
+
const attrs = {};
|
|
110
|
+
if (key)
|
|
111
|
+
attrs.extensionKey = key;
|
|
112
|
+
if (type)
|
|
113
|
+
attrs.extensionType = type;
|
|
114
|
+
return attrs;
|
|
115
|
+
};
|
|
116
|
+
const buildPanelAttrs = (type, attrsB64) => {
|
|
117
|
+
const decoded = decodeAttrs(attrsB64);
|
|
118
|
+
if (decoded)
|
|
119
|
+
return decoded;
|
|
120
|
+
return type ? { panelType: type } : {};
|
|
121
|
+
};
|
|
122
|
+
const buildInlineCardAttrs = (attrsB64) => decodeAttrs(attrsB64) ?? {};
|
|
123
|
+
const decodeMarks = (b64) => {
|
|
124
|
+
if (!b64)
|
|
125
|
+
return [];
|
|
126
|
+
try {
|
|
127
|
+
const raw = b64.trim();
|
|
128
|
+
const parsed = JSON.parse(raw.startsWith("[") ? raw : fromBase64(raw));
|
|
129
|
+
return Array.isArray(parsed)
|
|
130
|
+
? parsed.filter((mark) => mark !== null && typeof mark === "object" && typeof mark["type"] === "string")
|
|
131
|
+
: [];
|
|
132
|
+
}
|
|
133
|
+
catch {
|
|
134
|
+
return [];
|
|
135
|
+
}
|
|
136
|
+
};
|
|
137
|
+
const decodeNode = (b64) => {
|
|
138
|
+
if (!b64)
|
|
139
|
+
return null;
|
|
140
|
+
try {
|
|
141
|
+
const raw = b64.trim();
|
|
142
|
+
const parsed = JSON.parse(raw.startsWith("{") ? raw : fromBase64(raw));
|
|
143
|
+
return parsed !== null && typeof parsed === "object" &&
|
|
144
|
+
typeof parsed["type"] === "string"
|
|
145
|
+
? parsed
|
|
146
|
+
: null;
|
|
147
|
+
}
|
|
148
|
+
catch {
|
|
149
|
+
return null;
|
|
150
|
+
}
|
|
151
|
+
};
|
|
152
|
+
/** Split a text node into a sequence of text + status + inlineExtension nodes. */
|
|
153
|
+
const expandInlineText = (text, marks) => {
|
|
154
|
+
// Reset lastIndex; sticky regexes are stateful across calls.
|
|
155
|
+
const re = new RegExp(COMBINED_INLINE_RE.source, "g");
|
|
156
|
+
const out = [];
|
|
157
|
+
let lastIndex = 0;
|
|
158
|
+
let match;
|
|
159
|
+
while ((match = re.exec(text)) !== null) {
|
|
160
|
+
if (match.index > lastIndex) {
|
|
161
|
+
out.push(textNode(text.slice(lastIndex, match.index), marks));
|
|
162
|
+
}
|
|
163
|
+
// Capture groups follow COMBINED_INLINE_RE order.
|
|
164
|
+
// InlineNode: 1=type, 2=node. Status: 3=color, 4=text.
|
|
165
|
+
// InlineCard: 5=attrs. InlineExtension: 6=key, 7=type, 8=attrs.
|
|
166
|
+
// Underline: 9=text. Sub: 10=text. Sup: 11=text.
|
|
167
|
+
// Text color: 12=color, 13=text. Background color: 14=color, 15=text.
|
|
168
|
+
if (match[1] !== undefined) {
|
|
169
|
+
const decoded = decodeNode(match[2]);
|
|
170
|
+
if (decoded && decoded.type === match[1])
|
|
171
|
+
out.push(decoded);
|
|
172
|
+
}
|
|
173
|
+
else if (match[3] !== undefined) {
|
|
174
|
+
out.push({ type: "status", attrs: { text: match[4] ?? "", color: match[3] } });
|
|
175
|
+
}
|
|
176
|
+
else if (match[5] !== undefined) {
|
|
177
|
+
out.push({ type: "inlineCard", attrs: buildInlineCardAttrs(match[5]) });
|
|
178
|
+
}
|
|
179
|
+
else if (match[9] !== undefined) {
|
|
180
|
+
out.push(textNode(match[9], addMark(marks, { type: "underline" })));
|
|
181
|
+
}
|
|
182
|
+
else if (match[10] !== undefined) {
|
|
183
|
+
out.push(textNode(match[10], addMark(marks, { type: "subsup", attrs: { type: "sub" } })));
|
|
184
|
+
}
|
|
185
|
+
else if (match[11] !== undefined) {
|
|
186
|
+
out.push(textNode(match[11], addMark(marks, { type: "subsup", attrs: { type: "sup" } })));
|
|
187
|
+
}
|
|
188
|
+
else if (match[12] !== undefined) {
|
|
189
|
+
out.push(textNode(match[13] ?? "", addMark(marks, { type: "textColor", attrs: { color: match[12] } })));
|
|
190
|
+
}
|
|
191
|
+
else if (match[14] !== undefined) {
|
|
192
|
+
out.push(textNode(match[15] ?? "", addMark(marks, { type: "backgroundColor", attrs: { color: match[14] } })));
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
out.push({ type: "inlineExtension", attrs: buildExtensionAttrs(match[6], match[7], match[8]) });
|
|
196
|
+
}
|
|
197
|
+
lastIndex = match.index + match[0].length;
|
|
198
|
+
}
|
|
199
|
+
if (lastIndex === 0)
|
|
200
|
+
return [textNode(text, marks)];
|
|
201
|
+
if (lastIndex < text.length)
|
|
202
|
+
out.push(textNode(text.slice(lastIndex), marks));
|
|
203
|
+
return out;
|
|
204
|
+
};
|
|
205
|
+
const MENTION_SCHEME = "confluence-mention://";
|
|
206
|
+
/**
|
|
207
|
+
* If the text node carries a `confluence-mention://` link mark, return the
|
|
208
|
+
* corresponding mention node — otherwise null.
|
|
209
|
+
*/
|
|
210
|
+
const tryParseMentionTextNode = (n) => {
|
|
211
|
+
if (!n.text || !n.marks)
|
|
212
|
+
return null;
|
|
213
|
+
const link = n.marks.find((m) => m.type === "link");
|
|
214
|
+
if (!link)
|
|
215
|
+
return null;
|
|
216
|
+
const href = link.attrs?.["href"];
|
|
217
|
+
if (typeof href !== "string" || !href.startsWith(MENTION_SCHEME))
|
|
218
|
+
return null;
|
|
219
|
+
let id;
|
|
220
|
+
try {
|
|
221
|
+
id = decodeURIComponent(href.slice(MENTION_SCHEME.length));
|
|
222
|
+
}
|
|
223
|
+
catch {
|
|
224
|
+
// Malformed encoding — leave the link alone rather than crashing the push.
|
|
225
|
+
return null;
|
|
226
|
+
}
|
|
227
|
+
return { type: "mention", attrs: { id, text: n.text } };
|
|
228
|
+
};
|
|
229
|
+
/**
|
|
230
|
+
* If the paragraph's only content is a single text node holding a block-extension
|
|
231
|
+
* comment, return the marker's kind and reconstructed attrs — otherwise null.
|
|
232
|
+
*/
|
|
233
|
+
const soleTextChild = (node) => {
|
|
234
|
+
if (node.type !== "paragraph")
|
|
235
|
+
return null;
|
|
236
|
+
const content = node.content ?? [];
|
|
237
|
+
if (content.length !== 1)
|
|
238
|
+
return null;
|
|
239
|
+
const child = content[0];
|
|
240
|
+
if (!child || child.type !== "text" || !child.text || hasCodeMark(child))
|
|
241
|
+
return null;
|
|
242
|
+
return child;
|
|
243
|
+
};
|
|
244
|
+
const parseBlockExtensionParagraph = (node) => {
|
|
245
|
+
const child = soleTextChild(node);
|
|
246
|
+
if (!child || !child.text)
|
|
247
|
+
return null;
|
|
248
|
+
const match = BLOCK_EXTENSION_RE.exec(child.text);
|
|
249
|
+
if (!match)
|
|
250
|
+
return null;
|
|
251
|
+
const [, kind, key, type, attrsB64] = match;
|
|
252
|
+
return {
|
|
253
|
+
kind: kind === "bodiedExtension" ? "bodiedExtension" : "extension",
|
|
254
|
+
attrs: buildExtensionAttrs(key, type, attrsB64)
|
|
255
|
+
};
|
|
256
|
+
};
|
|
257
|
+
const parseTocParagraph = (node) => {
|
|
258
|
+
const child = soleTextChild(node);
|
|
259
|
+
if (!child || !child.text)
|
|
260
|
+
return null;
|
|
261
|
+
const match = TOC_RE.exec(child.text);
|
|
262
|
+
if (!match)
|
|
263
|
+
return null;
|
|
264
|
+
let minLevel;
|
|
265
|
+
let maxLevel;
|
|
266
|
+
const params = match[1]?.trim();
|
|
267
|
+
if (params && params.length > 0) {
|
|
268
|
+
const seen = new Set();
|
|
269
|
+
for (const part of params.split(",")) {
|
|
270
|
+
const [rawKey, rawValue, ...rest] = part.split("=");
|
|
271
|
+
if (rest.length > 0)
|
|
272
|
+
return null;
|
|
273
|
+
const key = rawKey?.trim();
|
|
274
|
+
const value = rawValue?.trim();
|
|
275
|
+
if ((key !== "min" && key !== "max") || !value || !/^[1-6]$/.test(value) || seen.has(key))
|
|
276
|
+
return null;
|
|
277
|
+
seen.add(key);
|
|
278
|
+
if (key === "min")
|
|
279
|
+
minLevel = value;
|
|
280
|
+
else
|
|
281
|
+
maxLevel = value;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
else if (params !== undefined) {
|
|
285
|
+
return null;
|
|
286
|
+
}
|
|
287
|
+
const macroParams = {};
|
|
288
|
+
if (minLevel)
|
|
289
|
+
macroParams.minLevel = { value: minLevel };
|
|
290
|
+
if (maxLevel)
|
|
291
|
+
macroParams.maxLevel = { value: maxLevel };
|
|
292
|
+
const attrs = {
|
|
293
|
+
extensionKey: "toc",
|
|
294
|
+
extensionType: CONFLUENCE_CORE_MACRO_TYPE
|
|
295
|
+
};
|
|
296
|
+
if (Object.keys(macroParams).length > 0) {
|
|
297
|
+
attrs.parameters = { macroParams };
|
|
298
|
+
}
|
|
299
|
+
return { type: "extension", attrs };
|
|
300
|
+
};
|
|
301
|
+
const isBodiedExtensionEnd = (node) => {
|
|
302
|
+
const child = soleTextChild(node);
|
|
303
|
+
return child !== null && typeof child.text === "string" && BODIED_EXTENSION_END_RE.test(child.text);
|
|
304
|
+
};
|
|
305
|
+
const parsePanelParagraph = (node) => {
|
|
306
|
+
const child = soleTextChild(node);
|
|
307
|
+
if (!child || !child.text)
|
|
308
|
+
return null;
|
|
309
|
+
const match = PANEL_RE.exec(child.text);
|
|
310
|
+
if (!match)
|
|
311
|
+
return null;
|
|
312
|
+
const [, type, attrsB64] = match;
|
|
313
|
+
return buildPanelAttrs(type, attrsB64);
|
|
314
|
+
};
|
|
315
|
+
const isPanelEnd = (node) => {
|
|
316
|
+
const child = soleTextChild(node);
|
|
317
|
+
return child !== null && typeof child.text === "string" && PANEL_END_RE.test(child.text);
|
|
318
|
+
};
|
|
319
|
+
const parseEncodedBlockNodeParagraph = (node) => {
|
|
320
|
+
const child = soleTextChild(node);
|
|
321
|
+
if (!child || !child.text)
|
|
322
|
+
return null;
|
|
323
|
+
const match = ENCODED_BLOCK_NODE_RE.exec(child.text);
|
|
324
|
+
if (!match)
|
|
325
|
+
return null;
|
|
326
|
+
const decoded = decodeNode(match[2]);
|
|
327
|
+
if (!decoded || decoded.type !== match[1])
|
|
328
|
+
return null;
|
|
329
|
+
return { type: match[1], node: decoded };
|
|
330
|
+
};
|
|
331
|
+
const isEncodedBlockNodeEnd = (node, type) => {
|
|
332
|
+
const child = soleTextChild(node);
|
|
333
|
+
if (child === null || typeof child.text !== "string")
|
|
334
|
+
return false;
|
|
335
|
+
const match = ENCODED_BLOCK_NODE_END_RE.exec(child.text);
|
|
336
|
+
return match?.[1] === type;
|
|
337
|
+
};
|
|
338
|
+
const parseParagraphMarksParagraph = (node) => {
|
|
339
|
+
const child = soleTextChild(node);
|
|
340
|
+
if (!child || !child.text)
|
|
341
|
+
return null;
|
|
342
|
+
const match = PARAGRAPH_MARKS_RE.exec(child.text);
|
|
343
|
+
if (!match)
|
|
344
|
+
return null;
|
|
345
|
+
return decodeMarks(match[1]);
|
|
346
|
+
};
|
|
347
|
+
const isParagraphMarksEnd = (node) => {
|
|
348
|
+
const child = soleTextChild(node);
|
|
349
|
+
return child !== null && typeof child.text === "string" && PARAGRAPH_MARKS_END_RE.test(child.text);
|
|
350
|
+
};
|
|
351
|
+
/**
|
|
352
|
+
* Replace block-extension marker paragraphs among `children`. A bare
|
|
353
|
+
* `extension` marker becomes an extension node; a `bodiedExtension` marker
|
|
354
|
+
* swallows every sibling up to its `adf:/bodiedExtension` end marker as the
|
|
355
|
+
* extension's body.
|
|
356
|
+
*
|
|
357
|
+
* Pairing rules, in order of defence:
|
|
358
|
+
* - the forward scan stops at the next bodied *open* marker, so an unpaired
|
|
359
|
+
* legacy/hand-edited open cannot steal a later macro's end marker and
|
|
360
|
+
* swallow unrelated content in between;
|
|
361
|
+
* - an open with no end marker is downgraded to a plain extension (macro
|
|
362
|
+
* identity and configuration kept, body left in place as siblings);
|
|
363
|
+
* - an open/end pair with nothing in between keeps its bodied kind via a
|
|
364
|
+
* stub empty paragraph (the schema requires non-empty content);
|
|
365
|
+
* - parents whose content model forbids bodiedExtension (blockquote,
|
|
366
|
+
* listItem, …) get the downgrade too, or outgoing validation would fail;
|
|
367
|
+
* - stray end markers are dropped — they are this module's own syntax,
|
|
368
|
+
* never user content.
|
|
369
|
+
*/
|
|
370
|
+
const groupBlockExtensions = (children, parentType) => {
|
|
371
|
+
const allowBodied = BODIED_EXTENSION_PARENTS.has(parentType);
|
|
372
|
+
const out = [];
|
|
373
|
+
for (let i = 0; i < children.length; i++) {
|
|
374
|
+
const child = children[i];
|
|
375
|
+
if (!child)
|
|
376
|
+
continue;
|
|
377
|
+
const marker = parseBlockExtensionParagraph(child);
|
|
378
|
+
if (!marker) {
|
|
379
|
+
if (!isBodiedExtensionEnd(child))
|
|
380
|
+
out.push(child);
|
|
381
|
+
continue;
|
|
382
|
+
}
|
|
383
|
+
if (marker.kind === "extension") {
|
|
384
|
+
out.push({ type: "extension", attrs: marker.attrs });
|
|
385
|
+
continue;
|
|
386
|
+
}
|
|
387
|
+
let end = -1;
|
|
388
|
+
for (let j = i + 1; j < children.length; j++) {
|
|
389
|
+
if (isBodiedExtensionEnd(children[j])) {
|
|
390
|
+
end = j;
|
|
391
|
+
break;
|
|
392
|
+
}
|
|
393
|
+
if (parseBlockExtensionParagraph(children[j])?.kind === "bodiedExtension")
|
|
394
|
+
break;
|
|
395
|
+
}
|
|
396
|
+
if (end === -1 || !allowBodied) {
|
|
397
|
+
out.push({ type: "extension", attrs: marker.attrs });
|
|
398
|
+
continue;
|
|
399
|
+
}
|
|
400
|
+
// Group recursively so an extension marker *inside* the body (a macro
|
|
401
|
+
// nested in a bodied macro) is also reverted, not left as literal text.
|
|
402
|
+
const body = groupBlockExtensions(children.slice(i + 1, end), "bodiedExtension");
|
|
403
|
+
out.push({
|
|
404
|
+
type: "bodiedExtension",
|
|
405
|
+
attrs: marker.attrs,
|
|
406
|
+
content: body.length > 0 ? body : [{ type: "paragraph", content: [] }]
|
|
407
|
+
});
|
|
408
|
+
i = end;
|
|
409
|
+
}
|
|
410
|
+
return out;
|
|
411
|
+
};
|
|
412
|
+
const groupPanels = (children) => {
|
|
413
|
+
const out = [];
|
|
414
|
+
for (let i = 0; i < children.length; i++) {
|
|
415
|
+
const child = children[i];
|
|
416
|
+
if (!child)
|
|
417
|
+
continue;
|
|
418
|
+
const attrs = parsePanelParagraph(child);
|
|
419
|
+
if (!attrs) {
|
|
420
|
+
if (!isPanelEnd(child))
|
|
421
|
+
out.push(child);
|
|
422
|
+
continue;
|
|
423
|
+
}
|
|
424
|
+
let end = -1;
|
|
425
|
+
for (let j = i + 1; j < children.length; j++) {
|
|
426
|
+
if (isPanelEnd(children[j])) {
|
|
427
|
+
end = j;
|
|
428
|
+
break;
|
|
429
|
+
}
|
|
430
|
+
if (parsePanelParagraph(children[j]))
|
|
431
|
+
break;
|
|
432
|
+
}
|
|
433
|
+
if (end === -1) {
|
|
434
|
+
out.push({ type: "panel", attrs, content: [{ type: "paragraph", content: [] }] });
|
|
435
|
+
continue;
|
|
436
|
+
}
|
|
437
|
+
const body = groupPanels(children.slice(i + 1, end));
|
|
438
|
+
out.push({
|
|
439
|
+
type: "panel",
|
|
440
|
+
attrs,
|
|
441
|
+
content: body.length > 0 ? body : [{ type: "paragraph", content: [] }]
|
|
442
|
+
});
|
|
443
|
+
i = end;
|
|
444
|
+
}
|
|
445
|
+
return out;
|
|
446
|
+
};
|
|
447
|
+
const groupEncodedBlockNodes = (children) => {
|
|
448
|
+
const out = [];
|
|
449
|
+
for (let i = 0; i < children.length; i++) {
|
|
450
|
+
const child = children[i];
|
|
451
|
+
if (!child)
|
|
452
|
+
continue;
|
|
453
|
+
const marker = parseEncodedBlockNodeParagraph(child);
|
|
454
|
+
if (!marker) {
|
|
455
|
+
out.push(child);
|
|
456
|
+
continue;
|
|
457
|
+
}
|
|
458
|
+
let end = -1;
|
|
459
|
+
for (let j = i + 1; j < children.length; j++) {
|
|
460
|
+
if (isEncodedBlockNodeEnd(children[j], marker.type)) {
|
|
461
|
+
end = j;
|
|
462
|
+
break;
|
|
463
|
+
}
|
|
464
|
+
if (parseEncodedBlockNodeParagraph(children[j]) !== null)
|
|
465
|
+
break;
|
|
466
|
+
}
|
|
467
|
+
out.push(marker.node);
|
|
468
|
+
if (end !== -1)
|
|
469
|
+
i = end;
|
|
470
|
+
}
|
|
471
|
+
return out;
|
|
472
|
+
};
|
|
473
|
+
const groupMarkedParagraphs = (children) => {
|
|
474
|
+
const out = [];
|
|
475
|
+
for (let i = 0; i < children.length; i++) {
|
|
476
|
+
const child = children[i];
|
|
477
|
+
if (!child)
|
|
478
|
+
continue;
|
|
479
|
+
const marks = parseParagraphMarksParagraph(child);
|
|
480
|
+
if (!marks) {
|
|
481
|
+
if (!isParagraphMarksEnd(child))
|
|
482
|
+
out.push(child);
|
|
483
|
+
continue;
|
|
484
|
+
}
|
|
485
|
+
let end = -1;
|
|
486
|
+
for (let j = i + 1; j < children.length; j++) {
|
|
487
|
+
if (isParagraphMarksEnd(children[j])) {
|
|
488
|
+
end = j;
|
|
489
|
+
break;
|
|
490
|
+
}
|
|
491
|
+
if (parseParagraphMarksParagraph(children[j]) !== null)
|
|
492
|
+
break;
|
|
493
|
+
}
|
|
494
|
+
if (end === -1) {
|
|
495
|
+
out.push({ type: "paragraph", marks, content: [] });
|
|
496
|
+
continue;
|
|
497
|
+
}
|
|
498
|
+
const body = children.slice(i + 1, end);
|
|
499
|
+
const first = body[0];
|
|
500
|
+
if (first?.type === "paragraph") {
|
|
501
|
+
out.push(marks.length > 0 ? { ...first, marks } : first);
|
|
502
|
+
for (const rest of body.slice(1))
|
|
503
|
+
out.push(rest);
|
|
504
|
+
}
|
|
505
|
+
else {
|
|
506
|
+
out.push({ type: "paragraph", marks, content: [] });
|
|
507
|
+
for (const rest of body)
|
|
508
|
+
out.push(rest);
|
|
509
|
+
}
|
|
510
|
+
i = end;
|
|
511
|
+
}
|
|
512
|
+
return out;
|
|
513
|
+
};
|
|
514
|
+
const groupNativeMacros = (children) => children.map((child) => parseTocParagraph(child) ?? child);
|
|
515
|
+
const transform = (node) => {
|
|
516
|
+
// ADF codeBlock permits only plain text children — expanding placeholder-
|
|
517
|
+
// looking text inside one would inject schema-invalid nodes and corrupt
|
|
518
|
+
// code samples that merely *quote* the placeholder syntax.
|
|
519
|
+
if (node.type === "codeBlock")
|
|
520
|
+
return node;
|
|
521
|
+
if (!node.content)
|
|
522
|
+
return node;
|
|
523
|
+
const newContent = [];
|
|
524
|
+
for (const child of node.content) {
|
|
525
|
+
if (child.type === "text" && child.text && !hasCodeMark(child)) {
|
|
526
|
+
const mention = tryParseMentionTextNode(child);
|
|
527
|
+
if (mention) {
|
|
528
|
+
newContent.push(mention);
|
|
529
|
+
}
|
|
530
|
+
else {
|
|
531
|
+
for (const piece of expandInlineText(child.text, child.marks)) {
|
|
532
|
+
newContent.push(piece);
|
|
533
|
+
}
|
|
534
|
+
}
|
|
535
|
+
}
|
|
536
|
+
else {
|
|
537
|
+
newContent.push(transform(child));
|
|
538
|
+
}
|
|
539
|
+
}
|
|
540
|
+
const nativeMacrosRestored = groupNativeMacros(newContent);
|
|
541
|
+
const paragraphsRestored = groupMarkedParagraphs(nativeMacrosRestored);
|
|
542
|
+
const encodedBlocksRestored = groupEncodedBlockNodes(paragraphsRestored);
|
|
543
|
+
return { ...node, content: groupPanels(groupBlockExtensions(encodedBlocksRestored, node.type)) };
|
|
544
|
+
};
|
|
545
|
+
/** Walk the document tree and rewrite placeholder text into proper ADF nodes. */
|
|
546
|
+
export const revertPlaceholders = (doc) => transform(doc);
|
|
547
|
+
//# sourceMappingURL=AdfPlaceholders.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AdfPlaceholders.js","sourceRoot":"","sources":["../src/AdfPlaceholders.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime JSON-Schema validator for ADF documents.
|
|
3
|
+
*
|
|
4
|
+
* Wraps Ajv compiled against the canonical schema bundled in
|
|
5
|
+
* `@atlaskit/adf-schema` (`json-schema/v1/full.json`). Used on both
|
|
6
|
+
* directions of the conversion: incoming (after `JSON.parse`, before walking)
|
|
7
|
+
* and outgoing (after the @atlaskit transformer produces JSON, before
|
|
8
|
+
* `JSON.stringify`). The single project-wide cast `as DocNode` lives here,
|
|
9
|
+
* bridging Ajv's runtime predicate to the TypeScript types.
|
|
10
|
+
*
|
|
11
|
+
* @module
|
|
12
|
+
*/
|
|
13
|
+
import type { DocNode } from "@atlaskit/adf-schema";
|
|
14
|
+
import * as Context from "effect/Context";
|
|
15
|
+
import * as Effect from "effect/Effect";
|
|
16
|
+
import * as Layer from "effect/Layer";
|
|
17
|
+
import { AdfSchemaError } from "./ConfluenceError.js";
|
|
18
|
+
declare const AdfSchemaValidator_base: Context.ServiceClass<AdfSchemaValidator, "@knpkv/confluence-to-markdown/AdfSchemaValidator", {
|
|
19
|
+
readonly check: (doc: unknown, direction: "incoming" | "outgoing") => Effect.Effect<DocNode, AdfSchemaError>;
|
|
20
|
+
}>;
|
|
21
|
+
/**
|
|
22
|
+
* Effect service that runtime-validates ADF documents against the canonical
|
|
23
|
+
* @atlaskit/adf-schema JSON Schema and narrows the success type to `DocNode`.
|
|
24
|
+
*
|
|
25
|
+
* @category Service
|
|
26
|
+
*/
|
|
27
|
+
export declare class AdfSchemaValidator extends AdfSchemaValidator_base {
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Live Layer for `AdfSchemaValidator`. The Ajv validator is compiled once at
|
|
31
|
+
* module load.
|
|
32
|
+
*
|
|
33
|
+
* @category Layers
|
|
34
|
+
*/
|
|
35
|
+
export declare const layer: Layer.Layer<AdfSchemaValidator>;
|
|
36
|
+
export {};
|
|
37
|
+
//# sourceMappingURL=AdfSchemaValidator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AdfSchemaValidator.d.ts","sourceRoot":"","sources":["../src/AdfSchemaValidator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAGnD,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,cAAc,EAAuB,MAAM,sBAAsB,CAAA;;oBActD,CACd,GAAG,EAAE,OAAO,EACZ,SAAS,EAAE,UAAU,GAAG,UAAU,KAC/B,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,cAAc,CAAC;;AAZ/C;;;;;GAKG;AACH,qBAAa,kBAAmB,SAAQ,uBAQe;CAAG;AAE1D;;;;;GAKG;AACH,eAAO,MAAM,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,kBAAkB,CAmBjD,CAAA"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import adfJsonSchema from "@atlaskit/adf-schema/json-schema/v1/full.json" with { type: "json" };
|
|
2
|
+
import Ajv from "ajv-draft-04";
|
|
3
|
+
import * as Context from "effect/Context";
|
|
4
|
+
import * as Effect from "effect/Effect";
|
|
5
|
+
import * as Layer from "effect/Layer";
|
|
6
|
+
import { AdfSchemaError } from "./ConfluenceError.js";
|
|
7
|
+
const ajv = new Ajv({ strict: false, allErrors: true });
|
|
8
|
+
const validate = ajv.compile(adfJsonSchema);
|
|
9
|
+
/**
|
|
10
|
+
* Effect service that runtime-validates ADF documents against the canonical
|
|
11
|
+
* @atlaskit/adf-schema JSON Schema and narrows the success type to `DocNode`.
|
|
12
|
+
*
|
|
13
|
+
* @category Service
|
|
14
|
+
*/
|
|
15
|
+
export class AdfSchemaValidator extends Context.Service()("@knpkv/confluence-to-markdown/AdfSchemaValidator") {
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Live Layer for `AdfSchemaValidator`. The Ajv validator is compiled once at
|
|
19
|
+
* module load.
|
|
20
|
+
*
|
|
21
|
+
* @category Layers
|
|
22
|
+
*/
|
|
23
|
+
export const layer = Layer.succeed(AdfSchemaValidator, AdfSchemaValidator.of({
|
|
24
|
+
check: (doc, direction) => validate(doc)
|
|
25
|
+
? Effect.succeed(doc)
|
|
26
|
+
: Effect.fail(new AdfSchemaError({
|
|
27
|
+
direction,
|
|
28
|
+
issues: (validate.errors ?? []).map((e) => ({
|
|
29
|
+
instancePath: e.instancePath,
|
|
30
|
+
schemaPath: e.schemaPath,
|
|
31
|
+
keyword: e.keyword,
|
|
32
|
+
params: e.params,
|
|
33
|
+
...(e.message !== undefined ? { message: e.message } : {})
|
|
34
|
+
}))
|
|
35
|
+
}))
|
|
36
|
+
}));
|
|
37
|
+
//# sourceMappingURL=AdfSchemaValidator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AdfSchemaValidator.js","sourceRoot":"","sources":["../src/AdfSchemaValidator.ts"],"names":[],"mappings":"AAaA,OAAO,aAAa,MAAM,+CAA+C,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAA;AAC/F,OAAO,GAAG,MAAM,cAAc,CAAA;AAC9B,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,cAAc,EAAuB,MAAM,sBAAsB,CAAA;AAE1E,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;AACvD,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,aAAuB,CAAC,CAAA;AAErD;;;;;GAKG;AACH,MAAM,OAAO,kBAAmB,SAAQ,OAAO,CAAC,OAAO,EAQpD,CAAC,kDAAkD,CAAC;CAAG;AAE1D;;;;;GAKG;AACH,MAAM,CAAC,MAAM,KAAK,GAAoC,KAAK,CAAC,OAAO,CACjE,kBAAkB,EAClB,kBAAkB,CAAC,EAAE,CAAC;IACpB,KAAK,EAAE,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,CACxB,QAAQ,CAAC,GAAG,CAAC;QACX,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAc,CAAC;QAChC,CAAC,CAAC,MAAM,CAAC,IAAI,CACX,IAAI,cAAc,CAAC;YACjB,SAAS;YACT,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAkB,EAAE,CAAC,CAAC;gBAC1D,YAAY,EAAE,CAAC,CAAC,YAAY;gBAC5B,UAAU,EAAE,CAAC,CAAC,UAAU;gBACxB,OAAO,EAAE,CAAC,CAAC,OAAO;gBAClB,MAAM,EAAE,CAAC,CAAC,MAAM;gBAChB,GAAG,CAAC,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC3D,CAAC,CAAC;SACJ,CAAC,CACH;CACN,CAAC,CACH,CAAA"}
|