slackmark 0.1.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/LICENSE +21 -0
- package/README.md +134 -0
- package/dist/adapters/blockquote-adapter.d.ts +11 -0
- package/dist/adapters/blockquote-adapter.d.ts.map +1 -0
- package/dist/adapters/code-fence-adapter.d.ts +12 -0
- package/dist/adapters/code-fence-adapter.d.ts.map +1 -0
- package/dist/adapters/heading-adapter.d.ts +11 -0
- package/dist/adapters/heading-adapter.d.ts.map +1 -0
- package/dist/adapters/html-block-adapter.d.ts +11 -0
- package/dist/adapters/html-block-adapter.d.ts.map +1 -0
- package/dist/adapters/inline.d.ts +41 -0
- package/dist/adapters/inline.d.ts.map +1 -0
- package/dist/adapters/list-adapter.d.ts +12 -0
- package/dist/adapters/list-adapter.d.ts.map +1 -0
- package/dist/adapters/math-block-adapter.d.ts +11 -0
- package/dist/adapters/math-block-adapter.d.ts.map +1 -0
- package/dist/adapters/mermaid-fence-adapter.d.ts +19 -0
- package/dist/adapters/mermaid-fence-adapter.d.ts.map +1 -0
- package/dist/adapters/node-adapter.d.ts +21 -0
- package/dist/adapters/node-adapter.d.ts.map +1 -0
- package/dist/adapters/paragraph-adapter.d.ts +11 -0
- package/dist/adapters/paragraph-adapter.d.ts.map +1 -0
- package/dist/adapters/skip-adapter.d.ts +11 -0
- package/dist/adapters/skip-adapter.d.ts.map +1 -0
- package/dist/adapters/table-adapter.d.ts +11 -0
- package/dist/adapters/table-adapter.d.ts.map +1 -0
- package/dist/adapters/task-list-adapter.d.ts +11 -0
- package/dist/adapters/task-list-adapter.d.ts.map +1 -0
- package/dist/adapters/thematic-break-adapter.d.ts +11 -0
- package/dist/adapters/thematic-break-adapter.d.ts.map +1 -0
- package/dist/assemble/message-assembler.d.ts +24 -0
- package/dist/assemble/message-assembler.d.ts.map +1 -0
- package/dist/assemble/text-fallback.d.ts +10 -0
- package/dist/assemble/text-fallback.d.ts.map +1 -0
- package/dist/assert-never.d.ts +5 -0
- package/dist/assert-never.d.ts.map +1 -0
- package/dist/blocks/types.d.ts +196 -0
- package/dist/blocks/types.d.ts.map +1 -0
- package/dist/budget/conversion-context.d.ts +44 -0
- package/dist/budget/conversion-context.d.ts.map +1 -0
- package/dist/budget/recording-degradation-collector.d.ts +11 -0
- package/dist/budget/recording-degradation-collector.d.ts.map +1 -0
- package/dist/budget/standard-budget-ledger.d.ts +35 -0
- package/dist/budget/standard-budget-ledger.d.ts.map +1 -0
- package/dist/capabilities/capabilities.d.ts +42 -0
- package/dist/capabilities/capabilities.d.ts.map +1 -0
- package/dist/constants.d.ts +59 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/converter/create-converter.d.ts +25 -0
- package/dist/converter/create-converter.d.ts.map +1 -0
- package/dist/converter/resolve-config.d.ts +7 -0
- package/dist/converter/resolve-config.d.ts.map +1 -0
- package/dist/converter/slackmark-converter.d.ts +33 -0
- package/dist/converter/slackmark-converter.d.ts.map +1 -0
- package/dist/errors.d.ts +10 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3402 -0
- package/dist/index.js.map +1 -0
- package/dist/mermaid/mermaid-pie-parser.d.ts +10 -0
- package/dist/mermaid/mermaid-pie-parser.d.ts.map +1 -0
- package/dist/mermaid/mermaid-xychart-parser.d.ts +10 -0
- package/dist/mermaid/mermaid-xychart-parser.d.ts.map +1 -0
- package/dist/parsers/remark-markdown-parser.d.ts +9 -0
- package/dist/parsers/remark-markdown-parser.d.ts.map +1 -0
- package/dist/registry/adapter-registry.d.ts +13 -0
- package/dist/registry/adapter-registry.d.ts.map +1 -0
- package/dist/renderers/codecogs-renderer.d.ts +18 -0
- package/dist/renderers/codecogs-renderer.d.ts.map +1 -0
- package/dist/renderers/encoding.d.ts +5 -0
- package/dist/renderers/encoding.d.ts.map +1 -0
- package/dist/renderers/kroki-renderer.d.ts +27 -0
- package/dist/renderers/kroki-renderer.d.ts.map +1 -0
- package/dist/renderers/mermaid-ink-renderer.d.ts +24 -0
- package/dist/renderers/mermaid-ink-renderer.d.ts.map +1 -0
- package/dist/renderers/quickchart-renderer.d.ts +25 -0
- package/dist/renderers/quickchart-renderer.d.ts.map +1 -0
- package/dist/renderers/url-utils.d.ts +3 -0
- package/dist/renderers/url-utils.d.ts.map +1 -0
- package/dist/renderers.d.ts +12 -0
- package/dist/renderers.d.ts.map +1 -0
- package/dist/renderers.js +269 -0
- package/dist/renderers.js.map +1 -0
- package/dist/slack/fetch-slack-uploader.d.ts +52 -0
- package/dist/slack/fetch-slack-uploader.d.ts.map +1 -0
- package/dist/slack/slack-upload-error.d.ts +25 -0
- package/dist/slack/slack-upload-error.d.ts.map +1 -0
- package/dist/slack.d.ts +8 -0
- package/dist/slack.d.ts.map +1 -0
- package/dist/slack.js +255 -0
- package/dist/slack.js.map +1 -0
- package/dist/types.d.ts +202 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/validate/validate-blocks.d.ts +18 -0
- package/dist/validate/validate-blocks.d.ts.map +1 -0
- package/package.json +76 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Siraj Chokshi
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
# slackmark
|
|
2
|
+
|
|
3
|
+
SlackMark is the Markdown dialect this compiler understands: CommonMark → GFM
|
|
4
|
+
→ **SlackMark**. It adds Mermaid charts, math, admonitions, task lists, and
|
|
5
|
+
mentions to GFM, then compiles the result to Slack Block Kit JSON. Compilation
|
|
6
|
+
is rich_text-first, capability-gated, and reports structured degradations.
|
|
7
|
+
|
|
8
|
+
Need a React preview? [`react-blockkit`](https://github.com/SirajChokshi/slackmark/tree/main/packages/react-renderer)
|
|
9
|
+
renders any Block Kit JSON and pairs perfectly with `slackmark`.
|
|
10
|
+
|
|
11
|
+
## Features
|
|
12
|
+
|
|
13
|
+
- SlackMark → Block Kit (`rich_text`, `header`, `table`, `data_table`, `markdown`, `data_visualization`, `container`, …)
|
|
14
|
+
- Capability profiles (`latest`, `conservative`, dated presets)
|
|
15
|
+
- Ordered fallback chains with `Degradation` records (never silent)
|
|
16
|
+
- Message budgets (50 blocks, table/markdown/chart caps)
|
|
17
|
+
- Mermaid `pie` / `xychart-beta` → native charts; other diagrams via injectable renderers
|
|
18
|
+
- OOP + constructor DI; `convert()` convenience for simple use
|
|
19
|
+
|
|
20
|
+
## Quickstart
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
pnpm add slackmark
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
```ts
|
|
27
|
+
import { convert } from "slackmark";
|
|
28
|
+
|
|
29
|
+
const { blocks, text, degradations } = await convert("# Hello **Slack**");
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Advanced (inject fakes / custom adapters):
|
|
33
|
+
|
|
34
|
+
```ts
|
|
35
|
+
import { createConverter } from "slackmark";
|
|
36
|
+
|
|
37
|
+
const converter = createConverter({
|
|
38
|
+
capabilities: "2026-03",
|
|
39
|
+
renderers: [myRenderer],
|
|
40
|
+
uploader: myUploader,
|
|
41
|
+
});
|
|
42
|
+
const result = await converter.convert(markdown);
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## API
|
|
46
|
+
|
|
47
|
+
| Export | Role |
|
|
48
|
+
| --- | --- |
|
|
49
|
+
| `convert` / `convertToMessages` | Convenience functions (default wiring per call) |
|
|
50
|
+
| `createConverter` | Composition root |
|
|
51
|
+
| `SlackMarkConverter` | Stateless converter class |
|
|
52
|
+
| `NodeAdapter` / `Candidate` | Extension seams |
|
|
53
|
+
| `ImageRenderer` / `SlackUploader` | Renderer and upload seams |
|
|
54
|
+
| `validateBlocks` | Limit validator |
|
|
55
|
+
|
|
56
|
+
Result shape: `{ blocks, text, degradations }` — total on user markdown (never throws).
|
|
57
|
+
|
|
58
|
+
## Compat profiles
|
|
59
|
+
|
|
60
|
+
| Preset | Flags |
|
|
61
|
+
| --- | --- |
|
|
62
|
+
| `latest` (default) | all |
|
|
63
|
+
| `conservative` | `richText` only |
|
|
64
|
+
| `2025-02` | + `markdownBlock` |
|
|
65
|
+
| `2025-08` | + `tableBlock` |
|
|
66
|
+
| `2026-03` | + `preformattedLanguage`, `headerLevel` |
|
|
67
|
+
| `2026-05` | + `dataTable` |
|
|
68
|
+
| `2026-06` | + `dataVisualization`, `containerBlock` |
|
|
69
|
+
|
|
70
|
+
Pass a preset name, a flags object, and/or `capabilityOverrides`.
|
|
71
|
+
|
|
72
|
+
## Renderers & uploads
|
|
73
|
+
|
|
74
|
+
Built-in adapters cover the mapping matrix. Prepend custom `NodeAdapter`s via `createConverter({ adapters })`.
|
|
75
|
+
|
|
76
|
+
No renderer or uploader is enabled by default, so default conversion performs no network I/O. Hosted renderers only compose durable public PNG URLs; they return `null` when Slack's 3,000-character `image_url` limit would be exceeded. An absent or declining renderer falls back to preformatted source and records a degradation.
|
|
77
|
+
|
|
78
|
+
Import first-party URL adapters from the dedicated subpath:
|
|
79
|
+
|
|
80
|
+
```ts
|
|
81
|
+
import { createConverter } from "slackmark";
|
|
82
|
+
import {
|
|
83
|
+
CodeCogsRenderer,
|
|
84
|
+
KrokiRenderer,
|
|
85
|
+
MermaidInkRenderer,
|
|
86
|
+
QuickChartRenderer,
|
|
87
|
+
} from "slackmark/renderers";
|
|
88
|
+
|
|
89
|
+
const converter = createConverter({
|
|
90
|
+
renderers: [new KrokiRenderer()],
|
|
91
|
+
});
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
- `KrokiRenderer` covers Mermaid, PlantUML, GraphViz/Dot, D2, Vega-Lite, and other Kroki diagram types.
|
|
95
|
+
- `MermaidInkRenderer` emits pako-state PNG URLs with a non-transparent background by default.
|
|
96
|
+
- `CodeCogsRenderer` emits `png.image` URLs for math/LaTeX requests.
|
|
97
|
+
- `QuickChartRenderer` emits full Chart.js GET URLs and never uses expiring `/chart/create` short URLs.
|
|
98
|
+
|
|
99
|
+
Hosted services receive the diagram, formula, or chart configuration encoded in the URL when Slack fetches the image. Treat them as explicit data-egress opt-ins. Each adapter accepts `baseUrl` for a self-hosted deployment:
|
|
100
|
+
|
|
101
|
+
```ts
|
|
102
|
+
const privateRenderers = [
|
|
103
|
+
new KrokiRenderer({ baseUrl: "https://kroki.internal.example" }),
|
|
104
|
+
new MermaidInkRenderer({ baseUrl: "https://mermaid.internal.example" }),
|
|
105
|
+
new QuickChartRenderer({ baseUrl: "https://charts.internal.example" }),
|
|
106
|
+
];
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Bytes-producing renderers need a `SlackUploader`. The fetch implementation uses Slack's external upload flow and waits for `files.info` to report processed image metadata before returning:
|
|
110
|
+
|
|
111
|
+
```ts
|
|
112
|
+
import { createConverter } from "slackmark";
|
|
113
|
+
import { FetchSlackUploader } from "slackmark/slack";
|
|
114
|
+
|
|
115
|
+
const uploader = new FetchSlackUploader({
|
|
116
|
+
token: slackBotToken,
|
|
117
|
+
channelId: targetChannelId,
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
const converter = createConverter({
|
|
121
|
+
renderers: [localBytesRenderer],
|
|
122
|
+
uploader,
|
|
123
|
+
});
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
Inject `fetch`, sleep, and clock functions for deterministic tests. The Slack token needs `files:write` and `files:read`; supplying `channelId` shares the upload to the target channel for reliable `slack_file` rendering.
|
|
127
|
+
|
|
128
|
+
## Optional remark plugins
|
|
129
|
+
|
|
130
|
+
`remark-math` and `remark-frontmatter` are dependencies; enable with `enableMath` / `enableFrontmatter`.
|
|
131
|
+
|
|
132
|
+
## License
|
|
133
|
+
|
|
134
|
+
MIT © Siraj
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { RootContent } from "mdast";
|
|
2
|
+
import type { ConversionContext } from "../budget/conversion-context.js";
|
|
3
|
+
import type { Candidate, NodeAdapter } from "./node-adapter.js";
|
|
4
|
+
/**
|
|
5
|
+
* Blockquotes → rich_text_quote; GitHub admonitions get styled first line.
|
|
6
|
+
*/
|
|
7
|
+
export declare class BlockquoteAdapter implements NodeAdapter {
|
|
8
|
+
match(node: RootContent, _ctx: ConversionContext): boolean;
|
|
9
|
+
plan(node: RootContent, _ctx: ConversionContext): ReadonlyArray<Candidate>;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=blockquote-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blockquote-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/blockquote-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAc,WAAW,EAAE,MAAM,OAAO,CAAC;AAIrD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAGzE,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAYhE;;GAEG;AACH,qBAAa,iBAAkB,YAAW,WAAW;IACnD,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAEzD;IAED,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,iBAAiB,GAAG,aAAa,CAAC,SAAS,CAAC,CAezE;CACF"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { RootContent } from "mdast";
|
|
2
|
+
import type { ConversionContext } from "../budget/conversion-context.js";
|
|
3
|
+
import type { Candidate, NodeAdapter } from "./node-adapter.js";
|
|
4
|
+
/**
|
|
5
|
+
* Plain code fences → rich_text_preformatted (+language when flagged).
|
|
6
|
+
* Mermaid/math dialects are handled by more specific adapters that match first.
|
|
7
|
+
*/
|
|
8
|
+
export declare class CodeFenceAdapter implements NodeAdapter {
|
|
9
|
+
match(node: RootContent, _ctx: ConversionContext): boolean;
|
|
10
|
+
plan(node: RootContent, _ctx: ConversionContext): ReadonlyArray<Candidate>;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=code-fence-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code-fence-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/code-fence-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,WAAW,EAAE,MAAM,OAAO,CAAC;AAG/C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAGzE,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhE;;;GAGG;AACH,qBAAa,gBAAiB,YAAW,WAAW;IAClD,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAEzD;IAED,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,iBAAiB,GAAG,aAAa,CAAC,SAAS,CAAC,CAyBzE;CACF"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { RootContent } from "mdast";
|
|
2
|
+
import type { ConversionContext } from "../budget/conversion-context.js";
|
|
3
|
+
import type { Candidate, NodeAdapter } from "./node-adapter.js";
|
|
4
|
+
/**
|
|
5
|
+
* Headings 1–4 → header (+level); 5–6 / overflow → bold rich_text.
|
|
6
|
+
*/
|
|
7
|
+
export declare class HeadingAdapter implements NodeAdapter {
|
|
8
|
+
match(node: RootContent, _ctx: ConversionContext): boolean;
|
|
9
|
+
plan(node: RootContent, ctx: ConversionContext): ReadonlyArray<Candidate>;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=heading-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"heading-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/heading-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAW,WAAW,EAAE,MAAM,OAAO,CAAC;AAGlD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAUzE,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhE;;GAEG;AACH,qBAAa,cAAe,YAAW,WAAW;IAChD,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAEzD;IAED,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,iBAAiB,GAAG,aAAa,CAAC,SAAS,CAAC,CAsDxE;CACF"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { RootContent } from "mdast";
|
|
2
|
+
import type { ConversionContext } from "../budget/conversion-context.js";
|
|
3
|
+
import type { Candidate, NodeAdapter } from "./node-adapter.js";
|
|
4
|
+
/**
|
|
5
|
+
* Block HTML — details/summary → container; else strip+warn.
|
|
6
|
+
*/
|
|
7
|
+
export declare class HtmlBlockAdapter implements NodeAdapter {
|
|
8
|
+
match(node: RootContent, _ctx: ConversionContext): boolean;
|
|
9
|
+
plan(node: RootContent, _ctx: ConversionContext): ReadonlyArray<Candidate>;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=html-block-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html-block-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/html-block-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,WAAW,EAAE,MAAM,OAAO,CAAC;AAG/C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAIzE,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAKhE;;GAEG;AACH,qBAAa,gBAAiB,YAAW,WAAW;IAClD,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAEzD;IAED,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,iBAAiB,GAAG,aAAa,CAAC,SAAS,CAAC,CA8EzE;CACF"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { PhrasingContent } from "mdast";
|
|
2
|
+
import type { ImageBlock, RichTextBlock, RichTextInline, RichTextStyle } from "../blocks/types.js";
|
|
3
|
+
import type { ConversionContext } from "../budget/conversion-context.js";
|
|
4
|
+
export type HoistedImage = {
|
|
5
|
+
readonly url: string;
|
|
6
|
+
readonly alt: string;
|
|
7
|
+
readonly title: string | undefined;
|
|
8
|
+
};
|
|
9
|
+
export interface InlineEmitResult {
|
|
10
|
+
readonly elements: ReadonlyArray<RichTextInline>;
|
|
11
|
+
readonly hoistedImages: ReadonlyArray<HoistedImage>;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Convert mdast phrasing content into rich_text inline elements.
|
|
15
|
+
*/
|
|
16
|
+
export declare function emitPhrasing(nodes: ReadonlyArray<PhrasingContent>, ctx: ConversionContext, baseStyle?: RichTextStyle): InlineEmitResult;
|
|
17
|
+
/**
|
|
18
|
+
* Plain string from phrasing (strips styles) — for headers etc.
|
|
19
|
+
*/
|
|
20
|
+
export declare function phrasingToPlain(nodes: ReadonlyArray<PhrasingContent>): string;
|
|
21
|
+
export declare function isPublicImageUrl(url: string): boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Count images that {@link emitPhrasing} would hoist into separate image blocks.
|
|
24
|
+
*/
|
|
25
|
+
export declare function countHoistableImages(nodes: ReadonlyArray<PhrasingContent>, ctx: ConversionContext): number;
|
|
26
|
+
export declare function truncateLabel(label: string, max: number): {
|
|
27
|
+
text: string;
|
|
28
|
+
truncated: boolean;
|
|
29
|
+
};
|
|
30
|
+
/** Standalone image block for an image hoisted out of phrasing content. */
|
|
31
|
+
export declare function hoistedImageBlock(h: HoistedImage, ctx: ConversionContext): ImageBlock;
|
|
32
|
+
/** Clamp section mrkdwn to 3000 chars and record a degradation when clipped. */
|
|
33
|
+
export declare function clampSectionText(text: string, ctx: ConversionContext, nodeType: string): string;
|
|
34
|
+
/** rich_text_preformatted block shared by code/math/mermaid/table fallbacks. */
|
|
35
|
+
export declare function preformattedRichText(text: string, language: string | undefined): RichTextBlock;
|
|
36
|
+
/** Clamp image alt/title to Slack limits and record a degradation when clipped. */
|
|
37
|
+
export declare function clampImageText(value: string, ctx: ConversionContext, field: "alt_text" | "title"): string;
|
|
38
|
+
export declare function styleOrUndefined(style: RichTextStyle): RichTextStyle | undefined;
|
|
39
|
+
/** True when mention resolvers are configured and phrasing contains @user / #channel tokens. */
|
|
40
|
+
export declare function phrasingNeedsMentionResolution(nodes: ReadonlyArray<PhrasingContent>, ctx: ConversionContext): boolean;
|
|
41
|
+
//# sourceMappingURL=inline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inline.d.ts","sourceRoot":"","sources":["../../src/adapters/inline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiC,eAAe,EAAgB,MAAM,OAAO,CAAC;AAG1F,OAAO,KAAK,EACV,UAAU,EACV,aAAa,EAEb,cAAc,EAEd,aAAa,EAEd,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAqDzE,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;CACpC,CAAC;AAEF,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;IACjD,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC;CACrD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,aAAa,CAAC,eAAe,CAAC,EACrC,GAAG,EAAE,iBAAiB,EACtB,SAAS,GAAE,aAAkB,GAC5B,gBAAgB,CAkMlB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,aAAa,CAAC,eAAe,CAAC,GAAG,MAAM,CAE7E;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAerD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,aAAa,CAAC,eAAe,CAAC,EACrC,GAAG,EAAE,iBAAiB,GACrB,MAAM,CAuCR;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAK9F;AAED,2EAA2E;AAC3E,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,iBAAiB,GAAG,UAAU,CAUrF;AAED,gFAAgF;AAChF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAY/F;AAED,gFAAgF;AAChF,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,aAAa,CAY9F;AAED,mFAAmF;AACnF,wBAAgB,cAAc,CAC5B,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,iBAAiB,EACtB,KAAK,EAAE,UAAU,GAAG,OAAO,GAC1B,MAAM,CAYR;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,aAAa,GAAG,aAAa,GAAG,SAAS,CAWhF;AAMD,gGAAgG;AAChG,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,aAAa,CAAC,eAAe,CAAC,EACrC,GAAG,EAAE,iBAAiB,GACrB,OAAO,CAQT"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { List, RootContent } from "mdast";
|
|
2
|
+
import type { ConversionContext } from "../budget/conversion-context.js";
|
|
3
|
+
import type { Candidate, NodeAdapter } from "./node-adapter.js";
|
|
4
|
+
/**
|
|
5
|
+
* Non-task lists → rich_text_list with sibling-indent nesting.
|
|
6
|
+
*/
|
|
7
|
+
export declare class ListAdapter implements NodeAdapter {
|
|
8
|
+
match(node: RootContent, _ctx: ConversionContext): boolean;
|
|
9
|
+
plan(node: RootContent, ctx: ConversionContext): ReadonlyArray<Candidate>;
|
|
10
|
+
}
|
|
11
|
+
export declare function isTaskList(list: List): boolean;
|
|
12
|
+
//# sourceMappingURL=list-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/list-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAA6B,WAAW,EAAE,MAAM,OAAO,CAAC;AAI1E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AASzE,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhE;;GAEG;AACH,qBAAa,WAAY,YAAW,WAAW;IAC7C,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAKzD;IAED,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,iBAAiB,GAAG,aAAa,CAAC,SAAS,CAAC,CA2BxE;CACF;AAmBD,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAE9C"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { RootContent } from "mdast";
|
|
2
|
+
import type { ConversionContext } from "../budget/conversion-context.js";
|
|
3
|
+
import type { Candidate, NodeAdapter } from "./node-adapter.js";
|
|
4
|
+
/**
|
|
5
|
+
* Display math → preformatted TeX (renderer path is phase 2).
|
|
6
|
+
*/
|
|
7
|
+
export declare class MathBlockAdapter implements NodeAdapter {
|
|
8
|
+
match(node: RootContent, _ctx: ConversionContext): boolean;
|
|
9
|
+
plan(node: RootContent, _ctx: ConversionContext): ReadonlyArray<Candidate>;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=math-block-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"math-block-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/math-block-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAGzC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAGzE,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhE;;GAEG;AACH,qBAAa,gBAAiB,YAAW,WAAW;IAClD,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAEzD;IAED,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,iBAAiB,GAAG,aAAa,CAAC,SAAS,CAAC,CAwBzE;CACF"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { RootContent } from "mdast";
|
|
2
|
+
import type { ConversionContext } from "../budget/conversion-context.js";
|
|
3
|
+
import type { MermaidChartParser } from "../types.js";
|
|
4
|
+
import type { Candidate, NodeAdapter } from "./node-adapter.js";
|
|
5
|
+
export interface MermaidFenceAdapterDeps {
|
|
6
|
+
readonly pieParser: MermaidChartParser;
|
|
7
|
+
readonly xyParser: MermaidChartParser;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Mermaid fences → data_visualization / image renderer / preformatted.
|
|
11
|
+
*/
|
|
12
|
+
export declare class MermaidFenceAdapter implements NodeAdapter {
|
|
13
|
+
private readonly pieParser;
|
|
14
|
+
private readonly xyParser;
|
|
15
|
+
constructor(deps: MermaidFenceAdapterDeps);
|
|
16
|
+
match(node: RootContent, _ctx: ConversionContext): boolean;
|
|
17
|
+
plan(node: RootContent, ctx: ConversionContext): ReadonlyArray<Candidate>;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=mermaid-fence-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mermaid-fence-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/mermaid-fence-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,WAAW,EAAE,MAAM,OAAO,CAAC;AAG/C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAUzE,OAAO,KAAK,EACV,kBAAkB,EAKnB,MAAM,aAAa,CAAC;AAGrB,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhE,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,SAAS,EAAE,kBAAkB,CAAC;IACvC,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC;CACvC;AAED;;GAEG;AACH,qBAAa,mBAAoB,YAAW,WAAW;IACrD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqB;IAC/C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqB;IAE9C,YAAY,IAAI,EAAE,uBAAuB,EAGxC;IAED,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAEzD;IAED,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,iBAAiB,GAAG,aAAa,CAAC,SAAS,CAAC,CA+DxE;CACF"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { RootContent } from "mdast";
|
|
2
|
+
import type { Block } from "../blocks/types.js";
|
|
3
|
+
import type { ConversionContext } from "../budget/conversion-context.js";
|
|
4
|
+
import type { CapabilityFlag } from "../capabilities/capabilities.js";
|
|
5
|
+
import type { BudgetClaim } from "../types.js";
|
|
6
|
+
/**
|
|
7
|
+
* Ordered emission candidate for an adapter.
|
|
8
|
+
*/
|
|
9
|
+
export interface Candidate {
|
|
10
|
+
readonly requires?: ReadonlyArray<CapabilityFlag>;
|
|
11
|
+
readonly budget?: BudgetClaim;
|
|
12
|
+
emit(ctx: ConversionContext): ReadonlyArray<Block> | Promise<ReadonlyArray<Block>>;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* mdast node → Block Kit adapter seam.
|
|
16
|
+
*/
|
|
17
|
+
export interface NodeAdapter {
|
|
18
|
+
match(node: RootContent, ctx: ConversionContext): boolean;
|
|
19
|
+
plan(node: RootContent, ctx: ConversionContext): ReadonlyArray<Candidate>;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=node-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/node-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAEzC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;IAClD,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAC9B,IAAI,CAAC,GAAG,EAAE,iBAAiB,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;CACpF;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,iBAAiB,GAAG,OAAO,CAAC;IAC1D,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,iBAAiB,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;CAC3E"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { RootContent } from "mdast";
|
|
2
|
+
import type { ConversionContext } from "../budget/conversion-context.js";
|
|
3
|
+
import type { Candidate, NodeAdapter } from "./node-adapter.js";
|
|
4
|
+
/**
|
|
5
|
+
* Paragraph → rich_text_section (coalesced later by assembler).
|
|
6
|
+
*/
|
|
7
|
+
export declare class ParagraphAdapter implements NodeAdapter {
|
|
8
|
+
match(node: RootContent, _ctx: ConversionContext): boolean;
|
|
9
|
+
plan(node: RootContent, ctx: ConversionContext): ReadonlyArray<Candidate>;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=paragraph-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paragraph-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/paragraph-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAa,WAAW,EAAE,MAAM,OAAO,CAAC;AAGpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAUzE,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhE;;GAEG;AACH,qBAAa,gBAAiB,YAAW,WAAW;IAClD,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAEzD;IAED,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,iBAAiB,GAAG,aAAa,CAAC,SAAS,CAAC,CAgCxE;CACF"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { RootContent } from "mdast";
|
|
2
|
+
import type { ConversionContext } from "../budget/conversion-context.js";
|
|
3
|
+
import type { Candidate, NodeAdapter } from "./node-adapter.js";
|
|
4
|
+
/**
|
|
5
|
+
* Consumes definition / yaml / toml nodes without emitting blocks.
|
|
6
|
+
*/
|
|
7
|
+
export declare class SkipAdapter implements NodeAdapter {
|
|
8
|
+
match(node: RootContent, _ctx: ConversionContext): boolean;
|
|
9
|
+
plan(node: RootContent, _ctx: ConversionContext): ReadonlyArray<Candidate>;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=skip-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skip-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/skip-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAGzC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAEzE,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhE;;GAEG;AACH,qBAAa,WAAY,YAAW,WAAW;IAC7C,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAGzD;IAED,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,iBAAiB,GAAG,aAAa,CAAC,SAAS,CAAC,CAkBzE;CACF"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { RootContent } from "mdast";
|
|
2
|
+
import type { ConversionContext } from "../budget/conversion-context.js";
|
|
3
|
+
import type { Candidate, NodeAdapter } from "./node-adapter.js";
|
|
4
|
+
/**
|
|
5
|
+
* GFM tables → table / data_table / markdown / ASCII fallbacks.
|
|
6
|
+
*/
|
|
7
|
+
export declare class TableAdapter implements NodeAdapter {
|
|
8
|
+
match(node: RootContent, _ctx: ConversionContext): boolean;
|
|
9
|
+
plan(node: RootContent, ctx: ConversionContext): ReadonlyArray<Candidate>;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=table-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/table-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAa,WAAW,EAAsC,MAAM,OAAO,CAAC;AAYxF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAUzE,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhE;;GAEG;AACH,qBAAa,YAAa,YAAW,WAAW;IAC9C,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAEzD;IAED,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,iBAAiB,GAAG,aAAa,CAAC,SAAS,CAAC,CAkFxE;CACF"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { RootContent } from "mdast";
|
|
2
|
+
import type { ConversionContext } from "../budget/conversion-context.js";
|
|
3
|
+
import type { Candidate, NodeAdapter } from "./node-adapter.js";
|
|
4
|
+
/**
|
|
5
|
+
* Task lists → markdown block (checkboxes); fallback unicode in rich_text_list.
|
|
6
|
+
*/
|
|
7
|
+
export declare class TaskListAdapter implements NodeAdapter {
|
|
8
|
+
match(node: RootContent, _ctx: ConversionContext): boolean;
|
|
9
|
+
plan(node: RootContent, _ctx: ConversionContext): ReadonlyArray<Candidate>;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=task-list-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-list-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/task-list-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAkB,WAAW,EAAE,MAAM,OAAO,CAAC;AAUzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAIzE,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhE;;GAEG;AACH,qBAAa,eAAgB,YAAW,WAAW;IACjD,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAEzD;IAED,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,iBAAiB,GAAG,aAAa,CAAC,SAAS,CAAC,CA0BzE;CACF"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { RootContent } from "mdast";
|
|
2
|
+
import type { ConversionContext } from "../budget/conversion-context.js";
|
|
3
|
+
import type { Candidate, NodeAdapter } from "./node-adapter.js";
|
|
4
|
+
/**
|
|
5
|
+
* thematicBreak → divider.
|
|
6
|
+
*/
|
|
7
|
+
export declare class ThematicBreakAdapter implements NodeAdapter {
|
|
8
|
+
match(node: RootContent, _ctx: ConversionContext): boolean;
|
|
9
|
+
plan(_node: RootContent, _ctx: ConversionContext): ReadonlyArray<Candidate>;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=thematic-break-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thematic-break-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/thematic-break-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAGzC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAEzE,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhE;;GAEG;AACH,qBAAa,oBAAqB,YAAW,WAAW;IACtD,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAEzD;IAED,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,iBAAiB,GAAG,aAAa,CAAC,SAAS,CAAC,CAO1E;CACF"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { Block } from "../blocks/types.js";
|
|
2
|
+
import type { ConversionContext } from "../budget/conversion-context.js";
|
|
3
|
+
import type { ConversionMessage, DegradationCollector, PlainTextRenderer } from "../types.js";
|
|
4
|
+
export interface MessageAssemblerDeps {
|
|
5
|
+
readonly plainText: PlainTextRenderer;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Packs blocks into messages, coalesces adjacent rich_text, attaches footnotes.
|
|
9
|
+
*/
|
|
10
|
+
export declare class MessageAssembler {
|
|
11
|
+
private readonly plainText;
|
|
12
|
+
constructor(deps: MessageAssemblerDeps);
|
|
13
|
+
assemble(blocks: ReadonlyArray<Block>, ctx: ConversionContext, footnoteBlocks: ReadonlyArray<Block>): ReadonlyArray<ConversionMessage>;
|
|
14
|
+
private splitMessages;
|
|
15
|
+
private toMessage;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Build trailing divider + context chunks for footnotes.
|
|
19
|
+
*/
|
|
20
|
+
export declare function buildFootnoteBlocks(entries: ReadonlyArray<{
|
|
21
|
+
readonly n: number;
|
|
22
|
+
readonly text: string;
|
|
23
|
+
}>, degradations?: DegradationCollector): ReadonlyArray<Block>;
|
|
24
|
+
//# sourceMappingURL=message-assembler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message-assembler.d.ts","sourceRoot":"","sources":["../../src/assemble/message-assembler.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,KAAK,EAMN,MAAM,oBAAoB,CAAC;AAE5B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAOzE,OAAO,KAAK,EAEV,iBAAiB,EACjB,oBAAoB,EACpB,iBAAiB,EAClB,MAAM,aAAa,CAAC;AAGrB,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAC;CACvC;AAED;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAoB;IAE9C,YAAY,IAAI,EAAE,oBAAoB,EAErC;IAED,QAAQ,CACN,MAAM,EAAE,aAAa,CAAC,KAAK,CAAC,EAC5B,GAAG,EAAE,iBAAiB,EACtB,cAAc,EAAE,aAAa,CAAC,KAAK,CAAC,GACnC,aAAa,CAAC,iBAAiB,CAAC,CAsClC;IAED,OAAO,CAAC,aAAa;IAkDrB,OAAO,CAAC,SAAS;CAclB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,aAAa,CAAC;IAAE,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,EACrE,YAAY,CAAC,EAAE,oBAAoB,GAClC,aAAa,CAAC,KAAK,CAAC,CA0BtB"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Block } from "../blocks/types.js";
|
|
2
|
+
import type { PlainTextRenderer } from "../types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Deterministic plain-text renderer for notifications / screen readers.
|
|
5
|
+
*/
|
|
6
|
+
export declare class DeterministicPlainTextRenderer implements PlainTextRenderer {
|
|
7
|
+
render(markdown: string): string;
|
|
8
|
+
renderFromBlocks(blocks: ReadonlyArray<Block>): string;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=text-fallback.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text-fallback.d.ts","sourceRoot":"","sources":["../../src/assemble/text-fallback.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAmC,MAAM,oBAAoB,CAAC;AACjF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAErD;;GAEG;AACH,qBAAa,8BAA+B,YAAW,iBAAiB;IACtE,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CA2B/B;IAED,gBAAgB,CAAC,MAAM,EAAE,aAAa,CAAC,KAAK,CAAC,GAAG,MAAM,CAsDrD;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assert-never.d.ts","sourceRoot":"","sources":["../src/assert-never.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,KAAK,CAGjE"}
|