@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
|
@@ -1,43 +1,27 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* HTML to Markdown conversion service using AST-based approach.
|
|
3
|
-
*
|
|
4
|
-
* @module
|
|
5
|
-
*/
|
|
6
1
|
import * as Context from "effect/Context";
|
|
7
2
|
import * as Effect from "effect/Effect";
|
|
8
3
|
import * as Layer from "effect/Layer";
|
|
9
|
-
import
|
|
4
|
+
import { AdfSchemaValidator } from "./AdfSchemaValidator.js";
|
|
5
|
+
import { AtlaskitTransformers } from "./AtlaskitTransformers.js";
|
|
10
6
|
import { ConversionError } from "./ConfluenceError.js";
|
|
11
|
-
|
|
12
|
-
import { type SerializeOptions } from "./serializers/MarkdownSerializer.js";
|
|
13
|
-
declare const MarkdownConverter_base: Context.TagClass<MarkdownConverter, "@knpkv/confluence-to-markdown/MarkdownConverter", {
|
|
14
|
-
/**
|
|
15
|
-
* Convert Confluence storage format (HTML) to GitHub Flavored Markdown.
|
|
16
|
-
*/
|
|
17
|
-
readonly htmlToMarkdown: (html: string, options?: SerializeOptions) => Effect.Effect<string, ConversionError>;
|
|
18
|
-
/**
|
|
19
|
-
* Convert GitHub Flavored Markdown to HTML (Confluence storage format).
|
|
20
|
-
*/
|
|
21
|
-
readonly markdownToHtml: (markdown: string) => Effect.Effect<string, ConversionError>;
|
|
7
|
+
declare const MarkdownConverter_base: Context.ServiceClass<MarkdownConverter, "@knpkv/confluence-to-markdown/MarkdownConverter", {
|
|
22
8
|
/**
|
|
23
|
-
*
|
|
9
|
+
* Convert an ADF JSON document (as wire-format string) to GitHub Flavored
|
|
10
|
+
* Markdown. Checks against the canonical @atlaskit/adf-schema before
|
|
11
|
+
* walking; violations are logged as warnings (remote drift), and only a
|
|
12
|
+
* document too malformed to walk at all fails with ConversionError.
|
|
24
13
|
*/
|
|
25
|
-
readonly
|
|
14
|
+
readonly adfToMarkdown: (adfJson: string) => Effect.Effect<string, ConversionError>;
|
|
26
15
|
/**
|
|
27
|
-
*
|
|
16
|
+
* Convert GitHub Flavored Markdown to a JSON-stringified ADF document.
|
|
17
|
+
* Routes through the official @atlaskit transformers; validates the
|
|
18
|
+
* produced ADF against the canonical schema before stringification.
|
|
28
19
|
*/
|
|
29
|
-
readonly
|
|
30
|
-
/**
|
|
31
|
-
* Serialize Document AST to Confluence HTML.
|
|
32
|
-
*/
|
|
33
|
-
readonly astToHtml: (doc: Document) => Effect.Effect<string, SerializeError>;
|
|
34
|
-
/**
|
|
35
|
-
* Serialize Document AST to Markdown.
|
|
36
|
-
*/
|
|
37
|
-
readonly astToMarkdown: (doc: Document) => Effect.Effect<string, SerializeError>;
|
|
20
|
+
readonly markdownToAdf: (markdown: string) => Effect.Effect<string, ConversionError>;
|
|
38
21
|
}>;
|
|
39
22
|
/**
|
|
40
|
-
* Markdown conversion service
|
|
23
|
+
* Markdown conversion service. Public surface is two delegating methods —
|
|
24
|
+
* `adfToMarkdown` (pull) and `markdownToAdf` (push).
|
|
41
25
|
*
|
|
42
26
|
* @example
|
|
43
27
|
* ```typescript
|
|
@@ -46,13 +30,8 @@ declare const MarkdownConverter_base: Context.TagClass<MarkdownConverter, "@knpk
|
|
|
46
30
|
*
|
|
47
31
|
* const program = Effect.gen(function* () {
|
|
48
32
|
* const converter = yield* MarkdownConverter
|
|
49
|
-
* const md = yield* converter.
|
|
50
|
-
* console.log(md) // # Hello\n\nWorld
|
|
33
|
+
* const md = yield* converter.adfToMarkdown(adfJson)
|
|
51
34
|
* })
|
|
52
|
-
*
|
|
53
|
-
* Effect.runPromise(
|
|
54
|
-
* program.pipe(Effect.provide(MarkdownConverter.layer))
|
|
55
|
-
* )
|
|
56
35
|
* ```
|
|
57
36
|
*
|
|
58
37
|
* @category Conversion
|
|
@@ -64,34 +43,6 @@ export declare class MarkdownConverter extends MarkdownConverter_base {
|
|
|
64
43
|
*
|
|
65
44
|
* @category Layers
|
|
66
45
|
*/
|
|
67
|
-
export declare const layer: Layer.Layer<MarkdownConverter>;
|
|
68
|
-
/**
|
|
69
|
-
* Schema-based layer for MarkdownConverter using Effect Schema transforms.
|
|
70
|
-
*
|
|
71
|
-
* This is an alternative implementation that uses the new Schema-based
|
|
72
|
-
* conversion pipeline. It provides the same API as the default layer.
|
|
73
|
-
*
|
|
74
|
-
* Note: For full fidelity, continue to use the default layer. This schema-based
|
|
75
|
-
* layer is useful for simpler use cases or when you want to leverage Schema
|
|
76
|
-
* composition.
|
|
77
|
-
*
|
|
78
|
-
* @example
|
|
79
|
-
* ```typescript
|
|
80
|
-
* import { MarkdownConverter, schemaBasedLayer } from "@knpkv/confluence-to-markdown/MarkdownConverter"
|
|
81
|
-
* import { Effect } from "effect"
|
|
82
|
-
*
|
|
83
|
-
* const program = Effect.gen(function* () {
|
|
84
|
-
* const converter = yield* MarkdownConverter
|
|
85
|
-
* const md = yield* converter.htmlToMarkdown("<h1>Hello</h1>")
|
|
86
|
-
* })
|
|
87
|
-
*
|
|
88
|
-
* Effect.runPromise(
|
|
89
|
-
* program.pipe(Effect.provide(schemaBasedLayer))
|
|
90
|
-
* )
|
|
91
|
-
* ```
|
|
92
|
-
*
|
|
93
|
-
* @category Layers
|
|
94
|
-
*/
|
|
95
|
-
export declare const schemaBasedLayer: Layer.Layer<MarkdownConverter>;
|
|
46
|
+
export declare const layer: Layer.Layer<MarkdownConverter, never, AtlaskitTransformers | AdfSchemaValidator>;
|
|
96
47
|
export {};
|
|
97
48
|
//# sourceMappingURL=MarkdownConverter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarkdownConverter.d.ts","sourceRoot":"","sources":["../src/MarkdownConverter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MarkdownConverter.d.ts","sourceRoot":"","sources":["../src/MarkdownConverter.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAGrC,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAE5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AAEhE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;;IAsBlD;;;;;OAKG;4BACqB,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC;IAEnF;;;;OAIG;4BACqB,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC;;AAjCxF;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,iBAAkB,SAAQ,sBAkBe;CAAG;AA8BzD;;;;GAIG;AACH,eAAO,MAAM,KAAK,EAAE,KAAK,CAAC,KAAK,CAC7B,iBAAiB,EACjB,KAAK,EACL,oBAAoB,GAAG,kBAAkB,CA0D1C,CAAA"}
|
|
@@ -1,24 +1,15 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* HTML to Markdown conversion service using AST-based approach.
|
|
3
|
-
*
|
|
4
|
-
* @module
|
|
5
|
-
*/
|
|
6
1
|
import * as Context from "effect/Context";
|
|
7
2
|
import * as Effect from "effect/Effect";
|
|
8
3
|
import * as Layer from "effect/Layer";
|
|
9
4
|
import * as Schema from "effect/Schema";
|
|
5
|
+
import { revertPlaceholders } from "./AdfPlaceholders.js";
|
|
6
|
+
import { AdfSchemaValidator } from "./AdfSchemaValidator.js";
|
|
7
|
+
import { walk } from "./AdfWalker.js";
|
|
8
|
+
import { AtlaskitTransformers } from "./AtlaskitTransformers.js";
|
|
10
9
|
import { ConversionError } from "./ConfluenceError.js";
|
|
11
|
-
import { parseConfluenceHtml } from "./parsers/ConfluenceParser.js";
|
|
12
|
-
import { parseMarkdown } from "./parsers/MarkdownParser.js";
|
|
13
|
-
import { ParseError } from "./SchemaConverterError.js";
|
|
14
|
-
import { ConfluenceToMarkdown, DocumentFromHast, DocumentFromMdast } from "./schemas/ConversionSchema.js";
|
|
15
|
-
import { HastFromHtml } from "./schemas/hast/index.js";
|
|
16
|
-
import { MdastFromMarkdown } from "./schemas/mdast/index.js";
|
|
17
|
-
import { PreprocessedHtmlFromConfluence } from "./schemas/preprocessing/index.js";
|
|
18
|
-
import { serializeToConfluence } from "./serializers/ConfluenceSerializer.js";
|
|
19
|
-
import { serializeToMarkdown } from "./serializers/MarkdownSerializer.js";
|
|
20
10
|
/**
|
|
21
|
-
* Markdown conversion service
|
|
11
|
+
* Markdown conversion service. Public surface is two delegating methods —
|
|
12
|
+
* `adfToMarkdown` (pull) and `markdownToAdf` (push).
|
|
22
13
|
*
|
|
23
14
|
* @example
|
|
24
15
|
* ```typescript
|
|
@@ -27,87 +18,75 @@ import { serializeToMarkdown } from "./serializers/MarkdownSerializer.js";
|
|
|
27
18
|
*
|
|
28
19
|
* const program = Effect.gen(function* () {
|
|
29
20
|
* const converter = yield* MarkdownConverter
|
|
30
|
-
* const md = yield* converter.
|
|
31
|
-
* console.log(md) // # Hello\n\nWorld
|
|
21
|
+
* const md = yield* converter.adfToMarkdown(adfJson)
|
|
32
22
|
* })
|
|
33
|
-
*
|
|
34
|
-
* Effect.runPromise(
|
|
35
|
-
* program.pipe(Effect.provide(MarkdownConverter.layer))
|
|
36
|
-
* )
|
|
37
23
|
* ```
|
|
38
24
|
*
|
|
39
25
|
* @category Conversion
|
|
40
26
|
*/
|
|
41
|
-
export class MarkdownConverter extends Context.
|
|
27
|
+
export class MarkdownConverter extends Context.Service()("@knpkv/confluence-to-markdown/MarkdownConverter") {
|
|
42
28
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
29
|
+
const warningSummary = (w) => {
|
|
30
|
+
switch (w._tag) {
|
|
31
|
+
case "UnsupportedNode":
|
|
32
|
+
return `${w._tag} ${w.nodeType}`;
|
|
33
|
+
case "LossyMark":
|
|
34
|
+
return `${w._tag} ${w.mark}`;
|
|
35
|
+
case "MediaWithoutUrl":
|
|
36
|
+
return `${w._tag} ${w.mediaId}`;
|
|
37
|
+
case "UnsupportedExtension":
|
|
38
|
+
return `${w._tag} ${w.nodeType} ${w.extensionKey || "?"}`;
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
const toConversionError = (direction) => (cause) => new ConversionError({ direction, cause });
|
|
42
|
+
// The least structure the walker needs: a doc node with a content array.
|
|
43
|
+
// Anything failing this isn't "schema drift", it's not an ADF document —
|
|
44
|
+
// advisory validation must not let it through (walking `null` is a defect;
|
|
45
|
+
// walking `{}` silently produces an empty page).
|
|
46
|
+
const isWalkableDoc = Schema.is(Schema.Struct({
|
|
47
|
+
type: Schema.Literal("doc"),
|
|
48
|
+
content: Schema.Array(Schema.Unknown)
|
|
63
49
|
}));
|
|
64
50
|
/**
|
|
65
|
-
*
|
|
66
|
-
*
|
|
67
|
-
* This is an alternative implementation that uses the new Schema-based
|
|
68
|
-
* conversion pipeline. It provides the same API as the default layer.
|
|
69
|
-
*
|
|
70
|
-
* Note: For full fidelity, continue to use the default layer. This schema-based
|
|
71
|
-
* layer is useful for simpler use cases or when you want to leverage Schema
|
|
72
|
-
* composition.
|
|
73
|
-
*
|
|
74
|
-
* @example
|
|
75
|
-
* ```typescript
|
|
76
|
-
* import { MarkdownConverter, schemaBasedLayer } from "@knpkv/confluence-to-markdown/MarkdownConverter"
|
|
77
|
-
* import { Effect } from "effect"
|
|
78
|
-
*
|
|
79
|
-
* const program = Effect.gen(function* () {
|
|
80
|
-
* const converter = yield* MarkdownConverter
|
|
81
|
-
* const md = yield* converter.htmlToMarkdown("<h1>Hello</h1>")
|
|
82
|
-
* })
|
|
83
|
-
*
|
|
84
|
-
* Effect.runPromise(
|
|
85
|
-
* program.pipe(Effect.provide(schemaBasedLayer))
|
|
86
|
-
* )
|
|
87
|
-
* ```
|
|
51
|
+
* Layer that provides the MarkdownConverter service.
|
|
88
52
|
*
|
|
89
53
|
* @category Layers
|
|
90
54
|
*/
|
|
91
|
-
export const
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
55
|
+
export const layer = Layer.effect(MarkdownConverter, Effect.gen(function* () {
|
|
56
|
+
const transformers = yield* AtlaskitTransformers;
|
|
57
|
+
const validator = yield* AdfSchemaValidator;
|
|
58
|
+
const adfToMarkdown = (adfJson) => Effect.gen(function* () {
|
|
59
|
+
const raw = yield* Effect.try({
|
|
60
|
+
try: () => JSON.parse(adfJson),
|
|
61
|
+
catch: (cause) => new ConversionError({ direction: "adfToMarkdown", cause })
|
|
62
|
+
});
|
|
63
|
+
// Incoming validation is advisory: the canonical @atlaskit schema is
|
|
64
|
+
// routinely stricter than what Confluence Cloud actually emits (old
|
|
65
|
+
// revisions, experimental nodes), so a failure here usually means
|
|
66
|
+
// "schema drift", not "broken document". Log + continue. Outgoing
|
|
67
|
+
// validation stays strict because we control that side.
|
|
68
|
+
const doc = yield* validator.check(raw, "incoming").pipe(Effect.catchTag("AdfSchemaError", (err) => isWalkableDoc(raw)
|
|
69
|
+
? Effect.gen(function* () {
|
|
70
|
+
yield* Effect.logWarning(`adf schema (incoming): ${err.issues.length} issue(s); first: ${err.issues.slice(0, 3).map((i) => `${i.instancePath ?? "?"} ${i.keyword ?? "?"} ${i.message ?? ""}`.trim()).join(" | ")}`);
|
|
71
|
+
return raw;
|
|
72
|
+
})
|
|
73
|
+
: Effect.fail(toConversionError("adfToMarkdown")(err))));
|
|
74
|
+
const { markdown, warnings } = walk(doc);
|
|
75
|
+
for (const w of warnings) {
|
|
76
|
+
yield* Effect.logWarning(`adf walker: ${warningSummary(w)}`, w);
|
|
96
77
|
}
|
|
97
|
-
return
|
|
98
|
-
})
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
const
|
|
107
|
-
return
|
|
108
|
-
})
|
|
109
|
-
|
|
110
|
-
astToHtml: (doc) => serializeToConfluence(doc),
|
|
111
|
-
astToMarkdown: (doc) => serializeToMarkdown(doc)
|
|
78
|
+
return markdown;
|
|
79
|
+
});
|
|
80
|
+
const markdownToAdf = (markdown) => Effect.gen(function* () {
|
|
81
|
+
const adf = yield* transformers.use(({ json, md }) => json.encode(md.parse(markdown))).pipe(Effect.mapError(toConversionError("markdownToAdf")));
|
|
82
|
+
// The walker emits HTML/comment placeholders for Confluence-only nodes
|
|
83
|
+
// (status, extension). @atlaskit's markdown transformer doesn't know
|
|
84
|
+
// these, so they come through as plain text. Rewrite them back into
|
|
85
|
+
// the structured nodes Confluence expects before validation.
|
|
86
|
+
const reverted = revertPlaceholders(adf);
|
|
87
|
+
const validated = yield* validator.check(reverted, "outgoing").pipe(Effect.mapError(toConversionError("markdownToAdf")));
|
|
88
|
+
return JSON.stringify(validated);
|
|
89
|
+
});
|
|
90
|
+
return MarkdownConverter.of({ adfToMarkdown, markdownToAdf });
|
|
112
91
|
}));
|
|
113
92
|
//# sourceMappingURL=MarkdownConverter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarkdownConverter.js","sourceRoot":"","sources":["../src/MarkdownConverter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MarkdownConverter.js","sourceRoot":"","sources":["../src/MarkdownConverter.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAC5D,OAAO,EAAE,IAAI,EAAsB,MAAM,gBAAgB,CAAA;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AAEhE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAEtD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,OAAO,iBAAkB,SAAQ,OAAO,CAAC,OAAO,EAkBnD,CAAC,iDAAiD,CAAC;CAAG;AAEzD,MAAM,cAAc,GAAG,CAAC,CAAgB,EAAU,EAAE;IAClD,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;QACf,KAAK,iBAAiB;YACpB,OAAO,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAA;QAClC,KAAK,WAAW;YACd,OAAO,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE,CAAA;QAC9B,KAAK,iBAAiB;YACpB,OAAO,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,OAAO,EAAE,CAAA;QACjC,KAAK,sBAAsB;YACzB,OAAO,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,YAAY,IAAI,GAAG,EAAE,CAAA;IAC7D,CAAC;AACH,CAAC,CAAA;AAED,MAAM,iBAAiB,GAAG,CACxB,SAA4C,EAC5C,EAAE,CACJ,CAAC,KAA+E,EAAmB,EAAE,CACnG,IAAI,eAAe,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAA;AAE3C,yEAAyE;AACzE,yEAAyE;AACzE,2EAA2E;AAC3E,iDAAiD;AACjD,MAAM,aAAa,GAAG,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;IAC5C,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC;CACtC,CAAC,CAAC,CAAA;AAEH;;;;GAIG;AACH,MAAM,CAAC,MAAM,KAAK,GAId,KAAK,CAAC,MAAM,CACd,iBAAiB,EACjB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,oBAAoB,CAAA;IAChD,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,kBAAkB,CAAA;IAE3C,MAAM,aAAa,GAAG,CAAC,OAAe,EAA0C,EAAE,CAChF,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;YAC5B,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;YAC9B,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,eAAe,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC;SAC7E,CAAC,CAAA;QACF,qEAAqE;QACrE,oEAAoE;QACpE,kEAAkE;QAClE,kEAAkE;QAClE,wDAAwD;QACxD,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,IAAI,CACtD,MAAM,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC,GAAG,EAAE,EAAE,CACxC,aAAa,CAAC,GAAG,CAAC;YAChB,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;gBACpB,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CACtB,0BAA0B,GAAG,CAAC,MAAM,CAAC,MAAM,qBACzC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAC/B,GAAG,CAAC,CAAC,YAAY,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CACzE,CAAC,IAAI,CAAC,KAAK,CACd,EAAE,CACH,CAAA;gBACD,OAAO,GAAc,CAAA;YACvB,CAAC,CAAC;YACF,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAC5D,CAAA;QACD,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAA;QACxC,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;YACzB,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,eAAe,cAAc,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;QACjE,CAAC;QACD,OAAO,QAAQ,CAAA;IACjB,CAAC,CAAC,CAAA;IAEJ,MAAM,aAAa,GAAG,CAAC,QAAgB,EAA0C,EAAE,CACjF,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CACzF,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,eAAe,CAAC,CAAC,CACpD,CAAA;QACD,uEAAuE;QACvE,qEAAqE;QACrE,oEAAoE;QACpE,6DAA6D;QAC7D,MAAM,QAAQ,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAA;QACxC,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,IAAI,CACjE,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,eAAe,CAAC,CAAC,CACpD,CAAA;QACD,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA;IAClC,CAAC,CAAC,CAAA;IAEJ,OAAO,iBAAiB,CAAC,EAAE,CAAC,EAAE,aAAa,EAAE,aAAa,EAAE,CAAC,CAAA;AAC/D,CAAC,CAAC,CACH,CAAA"}
|