@mdsnai/sdk 0.2.2 → 0.3.3
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/README.md +40 -76
- package/dist/core/errors.d.ts +14 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +13 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/index.d.ts +16 -4
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +69 -13
- package/dist/core/index.js.map +1 -0
- package/dist/core/markdown-body.d.ts +3 -0
- package/dist/core/markdown-body.d.ts.map +1 -0
- package/dist/core/markdown-body.js +65 -0
- package/dist/core/markdown-body.js.map +1 -0
- package/dist/core/markdown-renderer.d.ts +5 -0
- package/dist/core/markdown-renderer.d.ts.map +1 -0
- package/dist/core/markdown-renderer.js +75 -0
- package/dist/core/markdown-renderer.js.map +1 -0
- package/dist/core/negotiate.d.ts +3 -0
- package/dist/core/negotiate.d.ts.map +1 -0
- package/dist/core/negotiate.js +63 -0
- package/dist/core/negotiate.js.map +1 -0
- package/dist/core/parse/anchors.d.ts +2 -0
- package/dist/core/parse/anchors.d.ts.map +1 -0
- package/dist/core/parse/anchors.js +26 -0
- package/dist/core/parse/anchors.js.map +1 -0
- package/dist/core/parse/block-parser.d.ts +3 -0
- package/dist/core/parse/block-parser.d.ts.map +1 -0
- package/dist/core/parse/block-parser.js +116 -0
- package/dist/core/parse/block-parser.js.map +1 -0
- package/dist/core/parse/executable-block.d.ts +6 -0
- package/dist/core/parse/executable-block.d.ts.map +1 -0
- package/dist/core/parse/executable-block.js +48 -0
- package/dist/core/parse/executable-block.js.map +1 -0
- package/dist/core/parse/frontmatter.d.ts +7 -0
- package/dist/core/parse/frontmatter.d.ts.map +1 -0
- package/dist/core/parse/frontmatter.js +45 -0
- package/dist/core/parse/frontmatter.js.map +1 -0
- package/dist/core/serialize.d.ts +4 -0
- package/dist/core/serialize.d.ts.map +1 -0
- package/dist/core/serialize.js +123 -0
- package/dist/core/serialize.js.map +1 -0
- package/dist/core/types.d.ts +66 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +2 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/validate.d.ts +3 -0
- package/dist/core/validate.d.ts.map +1 -0
- package/dist/core/validate.js +91 -0
- package/dist/core/validate.js.map +1 -0
- package/dist/elements/components/mdsn-action.d.ts +6 -0
- package/dist/elements/components/mdsn-action.d.ts.map +1 -0
- package/dist/elements/components/mdsn-action.js +34 -0
- package/dist/elements/components/mdsn-action.js.map +1 -0
- package/dist/elements/components/mdsn-block.d.ts +9 -0
- package/dist/elements/components/mdsn-block.d.ts.map +1 -0
- package/dist/elements/components/mdsn-block.js +36 -0
- package/dist/elements/components/mdsn-block.js.map +1 -0
- package/dist/elements/components/mdsn-error.d.ts +9 -0
- package/dist/elements/components/mdsn-error.d.ts.map +1 -0
- package/dist/elements/components/mdsn-error.js +36 -0
- package/dist/elements/components/mdsn-error.js.map +1 -0
- package/dist/elements/components/mdsn-field.d.ts +6 -0
- package/dist/elements/components/mdsn-field.d.ts.map +1 -0
- package/dist/elements/components/mdsn-field.js +35 -0
- package/dist/elements/components/mdsn-field.js.map +1 -0
- package/dist/elements/components/mdsn-form.d.ts +6 -0
- package/dist/elements/components/mdsn-form.d.ts.map +1 -0
- package/dist/elements/components/mdsn-form.js +22 -0
- package/dist/elements/components/mdsn-form.js.map +1 -0
- package/dist/elements/components/mdsn-page.d.ts +9 -0
- package/dist/elements/components/mdsn-page.d.ts.map +1 -0
- package/dist/elements/components/mdsn-page.js +46 -0
- package/dist/elements/components/mdsn-page.js.map +1 -0
- package/dist/elements/index.d.ts +3 -0
- package/dist/elements/index.d.ts.map +1 -0
- package/dist/elements/index.js +3 -0
- package/dist/elements/index.js.map +1 -0
- package/dist/elements/mount.d.ts +11 -0
- package/dist/elements/mount.d.ts.map +1 -0
- package/dist/elements/mount.js +245 -0
- package/dist/elements/mount.js.map +1 -0
- package/dist/elements/register.d.ts +2 -0
- package/dist/elements/register.d.ts.map +1 -0
- package/dist/elements/register.js +27 -0
- package/dist/elements/register.js.map +1 -0
- package/dist/elements/theme.d.ts +2 -0
- package/dist/elements/theme.d.ts.map +1 -0
- package/dist/elements/theme.js +13 -0
- package/dist/elements/theme.js.map +1 -0
- package/dist/index.d.ts +4 -8
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -35
- package/dist/index.js.map +1 -0
- package/dist/server/hosted-app.d.ts +35 -0
- package/dist/server/hosted-app.d.ts.map +1 -0
- package/dist/server/hosted-app.js +105 -0
- package/dist/server/hosted-app.js.map +1 -0
- package/dist/server/html-render.d.ts +13 -0
- package/dist/server/html-render.d.ts.map +1 -0
- package/dist/server/html-render.js +316 -0
- package/dist/server/html-render.js.map +1 -0
- package/dist/server/index.d.ts +8 -15
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +6 -32
- package/dist/server/index.js.map +1 -0
- package/dist/server/node.d.ts +23 -0
- package/dist/server/node.d.ts.map +1 -0
- package/dist/server/node.js +200 -0
- package/dist/server/node.js.map +1 -0
- package/dist/server/result.d.ts +15 -0
- package/dist/server/result.d.ts.map +1 -0
- package/dist/server/result.js +64 -0
- package/dist/server/result.js.map +1 -0
- package/dist/server/router.d.ts +12 -0
- package/dist/server/router.d.ts.map +1 -0
- package/dist/server/router.js +24 -0
- package/dist/server/router.js.map +1 -0
- package/dist/server/runtime.d.ts +15 -0
- package/dist/server/runtime.d.ts.map +1 -0
- package/dist/server/runtime.js +245 -0
- package/dist/server/runtime.js.map +1 -0
- package/dist/server/session.d.ts +5 -40
- package/dist/server/session.d.ts.map +1 -0
- package/dist/server/session.js +11 -213
- package/dist/server/session.js.map +1 -0
- package/dist/server/types.d.ts +62 -0
- package/dist/server/types.d.ts.map +1 -0
- package/dist/server/types.js +2 -0
- package/dist/server/types.js.map +1 -0
- package/dist/web/headless.d.ts +22 -92
- package/dist/web/headless.d.ts.map +1 -0
- package/dist/web/headless.js +311 -337
- package/dist/web/headless.js.map +1 -0
- package/dist/web/index.d.ts +2 -11
- package/dist/web/index.d.ts.map +1 -0
- package/dist/web/index.js +2 -23
- package/dist/web/index.js.map +1 -0
- package/package.json +19 -43
- package/LICENSE +0 -21
- package/dist/cli/args.d.ts +0 -8
- package/dist/cli/args.js +0 -63
- package/dist/cli/commands/build.d.ts +0 -5
- package/dist/cli/commands/build.js +0 -19
- package/dist/cli/commands/create.d.ts +0 -2
- package/dist/cli/commands/create.js +0 -39
- package/dist/cli/commands/dev.d.ts +0 -10
- package/dist/cli/commands/dev.js +0 -13
- package/dist/cli/commands/start.d.ts +0 -9
- package/dist/cli/commands/start.js +0 -13
- package/dist/cli/entry.d.ts +0 -2
- package/dist/cli/entry.js +0 -8
- package/dist/cli/index.d.ts +0 -9
- package/dist/cli/index.js +0 -58
- package/dist/core/document/frontmatter.d.ts +0 -5
- package/dist/core/document/frontmatter.js +0 -41
- package/dist/core/document/markdown.d.ts +0 -5
- package/dist/core/document/markdown.js +0 -81
- package/dist/core/document/page-definition.d.ts +0 -2
- package/dist/core/document/page-definition.js +0 -23
- package/dist/core/model/block.d.ts +0 -26
- package/dist/core/model/block.js +0 -8
- package/dist/core/model/document.d.ts +0 -11
- package/dist/core/model/document.js +0 -2
- package/dist/core/model/fragment.d.ts +0 -4
- package/dist/core/model/fragment.js +0 -2
- package/dist/core/model/index.d.ts +0 -4
- package/dist/core/model/index.js +0 -2
- package/dist/core/model/input.d.ts +0 -10
- package/dist/core/model/input.js +0 -2
- package/dist/core/protocol/mdsn.d.ts +0 -4
- package/dist/core/protocol/mdsn.js +0 -66
- package/dist/core/protocol/statements.d.ts +0 -7
- package/dist/core/protocol/statements.js +0 -115
- package/dist/core/protocol/validation.d.ts +0 -3
- package/dist/core/protocol/validation.js +0 -70
- package/dist/core/utils/html.d.ts +0 -6
- package/dist/core/utils/html.js +0 -28
- package/dist/core/utils/index.d.ts +0 -2
- package/dist/core/utils/index.js +0 -12
- package/dist/core/utils/logger.d.ts +0 -12
- package/dist/core/utils/logger.js +0 -45
- package/dist/framework/create-framework-app.d.ts +0 -13
- package/dist/framework/create-framework-app.js +0 -12
- package/dist/framework/hosted-app.d.ts +0 -34
- package/dist/framework/hosted-app.js +0 -223
- package/dist/framework/index.d.ts +0 -6
- package/dist/framework/index.js +0 -9
- package/dist/framework/site-app.d.ts +0 -13
- package/dist/framework/site-app.js +0 -147
- package/dist/server/action-context.d.ts +0 -11
- package/dist/server/action-context.js +0 -26
- package/dist/server/action-host.d.ts +0 -2
- package/dist/server/action-host.js +0 -10
- package/dist/server/action-inputs.d.ts +0 -3
- package/dist/server/action-inputs.js +0 -178
- package/dist/server/action-runtime.d.ts +0 -8
- package/dist/server/action-runtime.js +0 -62
- package/dist/server/action.d.ts +0 -33
- package/dist/server/action.js +0 -101
- package/dist/server/build.d.ts +0 -10
- package/dist/server/build.js +0 -170
- package/dist/server/config.d.ts +0 -56
- package/dist/server/config.js +0 -42
- package/dist/server/dev.d.ts +0 -48
- package/dist/server/dev.js +0 -90
- package/dist/server/error-fragments.d.ts +0 -46
- package/dist/server/error-fragments.js +0 -77
- package/dist/server/init.d.ts +0 -1
- package/dist/server/init.js +0 -176
- package/dist/server/layout.d.ts +0 -17
- package/dist/server/layout.js +0 -40
- package/dist/server/markdown.d.ts +0 -49
- package/dist/server/markdown.js +0 -77
- package/dist/server/module-loader.d.ts +0 -4
- package/dist/server/module-loader.js +0 -71
- package/dist/server/negotiate.d.ts +0 -3
- package/dist/server/negotiate.js +0 -61
- package/dist/server/page-host.d.ts +0 -21
- package/dist/server/page-host.js +0 -66
- package/dist/server/page-links.d.ts +0 -10
- package/dist/server/page-links.js +0 -80
- package/dist/server/route-matcher.d.ts +0 -6
- package/dist/server/route-matcher.js +0 -73
- package/dist/server/routes.d.ts +0 -6
- package/dist/server/routes.js +0 -73
- package/dist/server/server.d.ts +0 -28
- package/dist/server/server.js +0 -161
- package/dist/server/site.d.ts +0 -11
- package/dist/server/site.js +0 -59
- package/dist/server/targets.d.ts +0 -7
- package/dist/server/targets.js +0 -21
- package/dist/web/block-runtime.d.ts +0 -2
- package/dist/web/block-runtime.js +0 -25
- package/dist/web/fragment-render.d.ts +0 -8
- package/dist/web/fragment-render.js +0 -58
- package/dist/web/i18n.d.ts +0 -29
- package/dist/web/i18n.js +0 -65
- package/dist/web/navigation.d.ts +0 -3
- package/dist/web/navigation.js +0 -32
- package/dist/web/page-bootstrap.d.ts +0 -6
- package/dist/web/page-bootstrap.js +0 -28
- package/dist/web/page-client-runtime.d.ts +0 -4
- package/dist/web/page-client-runtime.js +0 -7
- package/dist/web/page-client-script.d.ts +0 -1
- package/dist/web/page-client-script.js +0 -579
- package/dist/web/page-html.d.ts +0 -8
- package/dist/web/page-html.js +0 -42
- package/dist/web/page-render.d.ts +0 -20
- package/dist/web/page-render.js +0 -84
- package/dist/web/public-client-runtime.d.ts +0 -1
- package/dist/web/public-client-runtime.js +0 -5
- package/dist/web/public-render.d.ts +0 -12
- package/dist/web/public-render.js +0 -18
- package/dist/web/target-path.d.ts +0 -1
- package/dist/web/target-path.js +0 -35
package/README.md
CHANGED
|
@@ -1,39 +1,8 @@
|
|
|
1
1
|
# @mdsnai/sdk
|
|
2
2
|
|
|
3
|
-
`@mdsnai/sdk` is the reference SDK
|
|
3
|
+
`@mdsnai/sdk` is the reference SDK for building apps with MDSN.
|
|
4
4
|
|
|
5
|
-
MDSN
|
|
6
|
-
|
|
7
|
-
## Start With One Package
|
|
8
|
-
|
|
9
|
-
For most projects, start with:
|
|
10
|
-
|
|
11
|
-
```ts
|
|
12
|
-
import { createFrameworkApp, defineConfig } from "@mdsnai/sdk";
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
```ts
|
|
16
|
-
import {
|
|
17
|
-
createHostedApp,
|
|
18
|
-
createActionContextFromRequest,
|
|
19
|
-
defineActions,
|
|
20
|
-
renderHostedPage,
|
|
21
|
-
renderMarkdownFragment,
|
|
22
|
-
renderMarkdownValue,
|
|
23
|
-
} from "@mdsnai/sdk";
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
```ts
|
|
27
|
-
import { parsePage, parseFragment } from "@mdsnai/sdk";
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
Use the root entry point for the common paths:
|
|
31
|
-
|
|
32
|
-
- build a site with the built-in framework
|
|
33
|
-
- host MDSN pages and actions inside your own server
|
|
34
|
-
- render the UI yourself with React or Vue
|
|
35
|
-
|
|
36
|
-
Move to `@mdsnai/sdk/framework`, `@mdsnai/sdk/server`, `@mdsnai/sdk/web`, or `@mdsnai/sdk/core` only when you want stricter boundaries or narrower imports.
|
|
5
|
+
MDSN is a Markdown-first page and interaction format. `@mdsnai/sdk` gives you the parser, server runtime, browser runtime, and default UI for working with it.
|
|
37
6
|
|
|
38
7
|
## Why MDSN
|
|
39
8
|
|
|
@@ -41,67 +10,62 @@ Plain Markdown is good for content, but weak at expressing interaction.
|
|
|
41
10
|
|
|
42
11
|
Once a page needs inputs, actions, partial updates, or navigation, that structure usually gets pushed into templates, frontend state, and custom API glue.
|
|
43
12
|
|
|
44
|
-
MDSN makes that interaction layer explicit while keeping the page source readable for humans, AI agents, and agentic
|
|
13
|
+
MDSN makes that interaction layer explicit while keeping the page source readable for humans, AI agents, and agentic systems.
|
|
45
14
|
|
|
46
|
-
In MDSN, page content is not
|
|
15
|
+
In MDSN, page content is not only presentation. It is also shared prompt context for AI agents.
|
|
47
16
|
|
|
48
|
-
|
|
17
|
+
The same Markdown source can carry:
|
|
49
18
|
|
|
50
19
|
- content for humans to read
|
|
51
20
|
- state and task context for AI agents to interpret
|
|
52
21
|
- explicit interaction structure for both sides to continue from
|
|
53
22
|
|
|
54
|
-
##
|
|
23
|
+
## Use Cases
|
|
55
24
|
|
|
56
|
-
-
|
|
57
|
-
-
|
|
58
|
-
-
|
|
59
|
-
-
|
|
60
|
-
-
|
|
25
|
+
- skills apps with guided inputs and step-by-step actions for non-technical users
|
|
26
|
+
- agent apps that agents can read, enter, and continue over HTTP
|
|
27
|
+
- interactive docs, runbooks, and internal tools with embedded actions
|
|
28
|
+
- shared pages where humans and agents work from the same content and next-step actions
|
|
29
|
+
- agentic workflows where the server returns both updated results and the next actions to take
|
|
30
|
+
- custom hosted interfaces built with React, Vue, or your own server stack
|
|
61
31
|
|
|
62
|
-
##
|
|
32
|
+
## Syntax
|
|
63
33
|
|
|
64
|
-
|
|
65
|
-
- `@mdsnai/sdk/core`
|
|
66
|
-
- `@mdsnai/sdk/server`
|
|
67
|
-
- `@mdsnai/sdk/web`
|
|
68
|
-
- `@mdsnai/sdk/framework`
|
|
69
|
-
- `@mdsnai/sdk/cli`
|
|
34
|
+
The starter uses this minimal page shape:
|
|
70
35
|
|
|
71
|
-
|
|
36
|
+
````md
|
|
37
|
+
---
|
|
38
|
+
title: "Agent App"
|
|
39
|
+
---
|
|
72
40
|
|
|
73
|
-
|
|
74
|
-
- agent apps that agents can enter and operate directly
|
|
75
|
-
- interactive documents with embedded actions
|
|
76
|
-
- human-agent collaboration on the same page model
|
|
77
|
-
- agentic workflows and AI workflow automation
|
|
78
|
-
- custom hosted interfaces with React, Vue, or your own server stack
|
|
41
|
+
# Agent App
|
|
79
42
|
|
|
80
|
-
|
|
43
|
+
Use this starter as the smallest end-to-end MDSN app.
|
|
81
44
|
|
|
82
|
-
|
|
83
|
-
npm create mdsn@latest skills-app
|
|
84
|
-
cd skills-app
|
|
85
|
-
npm install
|
|
86
|
-
npm run dev
|
|
87
|
-
```
|
|
45
|
+
<!-- mdsn:block main -->
|
|
88
46
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
47
|
+
```mdsn
|
|
48
|
+
BLOCK main {
|
|
49
|
+
INPUT text required -> message
|
|
50
|
+
GET "/list" -> refresh label:"Refresh"
|
|
51
|
+
POST "/post" (message) -> submit label:"Submit"
|
|
52
|
+
}
|
|
93
53
|
```
|
|
54
|
+
````
|
|
94
55
|
|
|
95
|
-
|
|
56
|
+
## Quick Start
|
|
96
57
|
|
|
97
|
-
|
|
98
|
-
-
|
|
58
|
+
```bash
|
|
59
|
+
npm create mdsn@latest agent-app
|
|
60
|
+
cd agent-app
|
|
61
|
+
npm install
|
|
62
|
+
npm start
|
|
63
|
+
```
|
|
99
64
|
|
|
100
65
|
## Docs
|
|
101
66
|
|
|
102
|
-
- [Getting Started](https://docs.mdsn.ai/
|
|
103
|
-
- [
|
|
104
|
-
- [
|
|
105
|
-
- [
|
|
106
|
-
- [
|
|
107
|
-
- [SDK Reference](https://docs.mdsn.ai/docs/sdk-reference)
|
|
67
|
+
- [Getting Started](https://docs.mdsn.ai/getting-started)
|
|
68
|
+
- [Understanding MDSN](https://docs.mdsn.ai/understanding-mdsn)
|
|
69
|
+
- [SDK Overview](https://docs.mdsn.ai/sdk)
|
|
70
|
+
- [Custom Rendering](https://docs.mdsn.ai/custom-rendering)
|
|
71
|
+
- [API Reference](https://docs.mdsn.ai/api-reference)
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface MdsnSourceLocation {
|
|
2
|
+
line: number;
|
|
3
|
+
column: number;
|
|
4
|
+
}
|
|
5
|
+
declare class MdsnBaseError extends Error {
|
|
6
|
+
readonly location: MdsnSourceLocation | undefined;
|
|
7
|
+
constructor(message: string, location?: MdsnSourceLocation);
|
|
8
|
+
}
|
|
9
|
+
export declare class MdsnParseError extends MdsnBaseError {
|
|
10
|
+
}
|
|
11
|
+
export declare class MdsnValidationError extends MdsnBaseError {
|
|
12
|
+
}
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,cAAM,aAAc,SAAQ,KAAK;IAC/B,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,GAAG,SAAS,CAAC;gBAEtC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,kBAAkB;CAK3D;AAED,qBAAa,cAAe,SAAQ,aAAa;CAAG;AAEpD,qBAAa,mBAAoB,SAAQ,aAAa;CAAG"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
class MdsnBaseError extends Error {
|
|
2
|
+
location;
|
|
3
|
+
constructor(message, location) {
|
|
4
|
+
super(message);
|
|
5
|
+
this.name = new.target.name;
|
|
6
|
+
this.location = location;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
export class MdsnParseError extends MdsnBaseError {
|
|
10
|
+
}
|
|
11
|
+
export class MdsnValidationError extends MdsnBaseError {
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"AAKA,MAAM,aAAc,SAAQ,KAAK;IACtB,QAAQ,CAAiC;IAElD,YAAY,OAAe,EAAE,QAA6B;QACxD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;QAC5B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;CACF;AAED,MAAM,OAAO,cAAe,SAAQ,aAAa;CAAG;AAEpD,MAAM,OAAO,mBAAoB,SAAQ,aAAa;CAAG"}
|
package/dist/core/index.d.ts
CHANGED
|
@@ -1,4 +1,16 @@
|
|
|
1
|
-
|
|
2
|
-
export
|
|
3
|
-
export
|
|
4
|
-
export
|
|
1
|
+
import type { MdsnComposedPage, MdsnPage } from "./types.js";
|
|
2
|
+
export * from "./errors.js";
|
|
3
|
+
export * from "./markdown-renderer.js";
|
|
4
|
+
export * from "./markdown-body.js";
|
|
5
|
+
export * from "./negotiate.js";
|
|
6
|
+
export * from "./serialize.js";
|
|
7
|
+
export * from "./types.js";
|
|
8
|
+
export * from "./validate.js";
|
|
9
|
+
export interface ComposePageOptions {
|
|
10
|
+
blocks?: Record<string, string>;
|
|
11
|
+
visibleBlocks?: string[];
|
|
12
|
+
}
|
|
13
|
+
export declare function parsePage(source: string): MdsnPage;
|
|
14
|
+
export declare function parseAndValidatePage(source: string): MdsnPage;
|
|
15
|
+
export declare function composePage(source: string, options?: ComposePageOptions): MdsnComposedPage;
|
|
16
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,gBAAgB,EAAgB,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3E,cAAc,aAAa,CAAC;AAC5B,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAE9B,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAgBlD;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAE7D;AAaD,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,kBAAuB,GAAG,gBAAgB,CAS9F"}
|
package/dist/core/index.js
CHANGED
|
@@ -1,13 +1,69 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
1
|
+
import { MdsnParseError } from "./errors.js";
|
|
2
|
+
import { parseAnchors } from "./parse/anchors.js";
|
|
3
|
+
import { parseBlocks } from "./parse/block-parser.js";
|
|
4
|
+
import { extractExecutableBlock } from "./parse/executable-block.js";
|
|
5
|
+
import { parseFrontmatter } from "./parse/frontmatter.js";
|
|
6
|
+
import { validatePage } from "./validate.js";
|
|
7
|
+
export * from "./errors.js";
|
|
8
|
+
export * from "./markdown-renderer.js";
|
|
9
|
+
export * from "./markdown-body.js";
|
|
10
|
+
export * from "./negotiate.js";
|
|
11
|
+
export * from "./serialize.js";
|
|
12
|
+
export * from "./types.js";
|
|
13
|
+
export * from "./validate.js";
|
|
14
|
+
export function parsePage(source) {
|
|
15
|
+
const { frontmatter, body } = parseFrontmatter(source);
|
|
16
|
+
const { markdown, executableContent } = extractExecutableBlock(body);
|
|
17
|
+
try {
|
|
18
|
+
return {
|
|
19
|
+
frontmatter,
|
|
20
|
+
markdown,
|
|
21
|
+
blocks: parseBlocks(executableContent),
|
|
22
|
+
blockAnchors: parseAnchors(markdown)
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
if (error instanceof Error) {
|
|
27
|
+
throw error;
|
|
28
|
+
}
|
|
29
|
+
throw new MdsnParseError("Unknown parse failure.");
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
export function parseAndValidatePage(source) {
|
|
33
|
+
return validatePage(parsePage(source));
|
|
34
|
+
}
|
|
35
|
+
function attachFragmentHelper(page) {
|
|
36
|
+
const composed = page;
|
|
37
|
+
Object.defineProperty(composed, "fragment", {
|
|
38
|
+
value(blockName) {
|
|
39
|
+
return resolveFragmentForBlock(composed, blockName);
|
|
40
|
+
},
|
|
41
|
+
enumerable: false
|
|
42
|
+
});
|
|
43
|
+
return composed;
|
|
44
|
+
}
|
|
45
|
+
export function composePage(source, options = {}) {
|
|
46
|
+
const page = parseAndValidatePage(source);
|
|
47
|
+
if (options.blocks) {
|
|
48
|
+
page.blockContent = { ...options.blocks };
|
|
49
|
+
}
|
|
50
|
+
if (options.visibleBlocks) {
|
|
51
|
+
page.visibleBlockNames = [...options.visibleBlocks];
|
|
52
|
+
}
|
|
53
|
+
return attachFragmentHelper(page);
|
|
54
|
+
}
|
|
55
|
+
function resolveFragmentForBlock(page, blockName) {
|
|
56
|
+
const block = page.blocks.find((candidate) => candidate.name === blockName);
|
|
57
|
+
if (!block) {
|
|
58
|
+
throw new Error(`Unknown block "${blockName}".`);
|
|
59
|
+
}
|
|
60
|
+
const markdown = page.blockContent?.[blockName];
|
|
61
|
+
if (!markdown?.trim()) {
|
|
62
|
+
throw new Error(`Block "${blockName}" has no composed markdown content.`);
|
|
63
|
+
}
|
|
64
|
+
return {
|
|
65
|
+
markdown,
|
|
66
|
+
blocks: [block]
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown-body.d.ts","sourceRoot":"","sources":["../../src/core/markdown-body.ts"],"names":[],"mappings":"AA+CA,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAqBtE;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAI5E"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { MdsnParseError } from "./errors.js";
|
|
2
|
+
function splitMarkdownBody(body) {
|
|
3
|
+
const parts = [];
|
|
4
|
+
let current = "";
|
|
5
|
+
let inString = false;
|
|
6
|
+
let escaped = false;
|
|
7
|
+
for (const char of body) {
|
|
8
|
+
if (escaped) {
|
|
9
|
+
current += char;
|
|
10
|
+
escaped = false;
|
|
11
|
+
continue;
|
|
12
|
+
}
|
|
13
|
+
if (char === "\\") {
|
|
14
|
+
current += char;
|
|
15
|
+
escaped = true;
|
|
16
|
+
continue;
|
|
17
|
+
}
|
|
18
|
+
if (char === "\"") {
|
|
19
|
+
current += char;
|
|
20
|
+
inString = !inString;
|
|
21
|
+
continue;
|
|
22
|
+
}
|
|
23
|
+
if (!inString && (char === "," || char === "\n")) {
|
|
24
|
+
const trimmed = current.trim();
|
|
25
|
+
if (trimmed) {
|
|
26
|
+
parts.push(trimmed);
|
|
27
|
+
}
|
|
28
|
+
current = "";
|
|
29
|
+
continue;
|
|
30
|
+
}
|
|
31
|
+
current += char;
|
|
32
|
+
}
|
|
33
|
+
const trimmed = current.trim();
|
|
34
|
+
if (trimmed) {
|
|
35
|
+
parts.push(trimmed);
|
|
36
|
+
}
|
|
37
|
+
return parts;
|
|
38
|
+
}
|
|
39
|
+
export function parseMarkdownBody(body) {
|
|
40
|
+
const result = {};
|
|
41
|
+
for (const part of splitMarkdownBody(body)) {
|
|
42
|
+
const match = part.match(/^([a-zA-Z_][\w-]*)\s*:\s*(.+)$/);
|
|
43
|
+
if (!match) {
|
|
44
|
+
throw new MdsnParseError(`Invalid markdown body line: ${part}`);
|
|
45
|
+
}
|
|
46
|
+
let value;
|
|
47
|
+
try {
|
|
48
|
+
value = JSON.parse(match[2].trim());
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
throw new MdsnParseError(`Invalid markdown body line: ${part}`);
|
|
52
|
+
}
|
|
53
|
+
if (typeof value !== "string") {
|
|
54
|
+
throw new MdsnParseError(`Invalid markdown body line: ${part}`);
|
|
55
|
+
}
|
|
56
|
+
result[match[1]] = value;
|
|
57
|
+
}
|
|
58
|
+
return result;
|
|
59
|
+
}
|
|
60
|
+
export function serializeMarkdownBody(values) {
|
|
61
|
+
return Object.entries(values)
|
|
62
|
+
.map(([key, value]) => `${key}: ${JSON.stringify(value)}`)
|
|
63
|
+
.join(", ");
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=markdown-body.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown-body.js","sourceRoot":"","sources":["../../src/core/markdown-body.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,SAAS,iBAAiB,CAAC,IAAY;IACrC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,OAAO,GAAG,KAAK,CAAC;IAEpB,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;QACxB,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,IAAI,IAAI,CAAC;YAChB,OAAO,GAAG,KAAK,CAAC;YAChB,SAAS;QACX,CAAC;QAED,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAClB,OAAO,IAAI,IAAI,CAAC;YAChB,OAAO,GAAG,IAAI,CAAC;YACf,SAAS;QACX,CAAC;QAED,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAClB,OAAO,IAAI,IAAI,CAAC;YAChB,QAAQ,GAAG,CAAC,QAAQ,CAAC;YACrB,SAAS;QACX,CAAC;QAED,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;YACjD,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;YAC/B,IAAI,OAAO,EAAE,CAAC;gBACZ,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACtB,CAAC;YACD,OAAO,GAAG,EAAE,CAAC;YACb,SAAS;QACX,CAAC;QAED,OAAO,IAAI,IAAI,CAAC;IAClB,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAC/B,IAAI,OAAO,EAAE,CAAC;QACZ,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtB,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,KAAK,MAAM,IAAI,IAAI,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;QAC3D,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,cAAc,CAAC,+BAA+B,IAAI,EAAE,CAAC,CAAC;QAClE,CAAC;QAED,IAAI,KAAc,CAAC;QACnB,IAAI,CAAC;YACH,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,CAAC,CAAC;QACvC,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,cAAc,CAAC,+BAA+B,IAAI,EAAE,CAAC,CAAC;QAClE,CAAC;QAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,MAAM,IAAI,cAAc,CAAC,+BAA+B,IAAI,EAAE,CAAC,CAAC;QAClE,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,GAAG,KAAK,CAAC;IAC5B,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,MAA8B;IAClE,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;SAC1B,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;SACzD,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown-renderer.d.ts","sourceRoot":"","sources":["../../src/core/markdown-renderer.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;CAClC;AAoED,eAAO,MAAM,qBAAqB,EAAE,oBAiBnC,CAAC"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
function escapeHtml(value) {
|
|
2
|
+
return value
|
|
3
|
+
.replaceAll("&", "&")
|
|
4
|
+
.replaceAll("<", "<")
|
|
5
|
+
.replaceAll(">", ">")
|
|
6
|
+
.replaceAll('"', """);
|
|
7
|
+
}
|
|
8
|
+
function parseRenderableMarkdown(markdown) {
|
|
9
|
+
const lines = markdown.split("\n");
|
|
10
|
+
const visible = [];
|
|
11
|
+
let inFrontmatter = false;
|
|
12
|
+
let frontmatterHandled = false;
|
|
13
|
+
let inCode = false;
|
|
14
|
+
for (const line of lines) {
|
|
15
|
+
const trimmed = line.trim();
|
|
16
|
+
if (!frontmatterHandled && trimmed === "---") {
|
|
17
|
+
inFrontmatter = !inFrontmatter;
|
|
18
|
+
if (!inFrontmatter) {
|
|
19
|
+
frontmatterHandled = true;
|
|
20
|
+
}
|
|
21
|
+
continue;
|
|
22
|
+
}
|
|
23
|
+
if (inFrontmatter) {
|
|
24
|
+
continue;
|
|
25
|
+
}
|
|
26
|
+
if (trimmed.startsWith("```")) {
|
|
27
|
+
inCode = !inCode;
|
|
28
|
+
continue;
|
|
29
|
+
}
|
|
30
|
+
if (inCode || trimmed.startsWith("<!-- mdsn:block")) {
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
visible.push(line);
|
|
34
|
+
}
|
|
35
|
+
return visible
|
|
36
|
+
.join("\n")
|
|
37
|
+
.split(/\n{2,}/)
|
|
38
|
+
.map((chunk) => chunk.trim())
|
|
39
|
+
.filter(Boolean)
|
|
40
|
+
.map((chunk) => {
|
|
41
|
+
const rows = chunk.split("\n").map((row) => row.trim()).filter(Boolean);
|
|
42
|
+
if (rows.every((row) => row.startsWith("- "))) {
|
|
43
|
+
return {
|
|
44
|
+
type: "ul",
|
|
45
|
+
items: rows.map((row) => row.slice(2).trim())
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
if (chunk.startsWith("# ")) {
|
|
49
|
+
return { type: "h1", text: chunk.slice(2).trim() };
|
|
50
|
+
}
|
|
51
|
+
if (chunk.startsWith("## ")) {
|
|
52
|
+
return { type: "h2", text: chunk.slice(3).trim() };
|
|
53
|
+
}
|
|
54
|
+
return { type: "p", text: rows.join(" ") };
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
export const basicMarkdownRenderer = {
|
|
58
|
+
render(markdown) {
|
|
59
|
+
return parseRenderableMarkdown(markdown)
|
|
60
|
+
.map((node) => {
|
|
61
|
+
if (node.type === "h1") {
|
|
62
|
+
return `<h1>${escapeHtml(node.text)}</h1>`;
|
|
63
|
+
}
|
|
64
|
+
if (node.type === "h2") {
|
|
65
|
+
return `<h2>${escapeHtml(node.text)}</h2>`;
|
|
66
|
+
}
|
|
67
|
+
if (node.type === "p") {
|
|
68
|
+
return `<p>${escapeHtml(node.text)}</p>`;
|
|
69
|
+
}
|
|
70
|
+
return `<ul>${node.items.map((item) => `<li>${escapeHtml(item)}</li>`).join("")}</ul>`;
|
|
71
|
+
})
|
|
72
|
+
.join("\n");
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
//# sourceMappingURL=markdown-renderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown-renderer.js","sourceRoot":"","sources":["../../src/core/markdown-renderer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"negotiate.d.ts","sourceRoot":"","sources":["../../src/core/negotiate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAuBrD,wBAAgB,uBAAuB,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,kBAAkB,CA0DjF"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
function parseAcceptHeader(acceptHeader) {
|
|
2
|
+
return acceptHeader
|
|
3
|
+
.split(",")
|
|
4
|
+
.map((part) => part.trim())
|
|
5
|
+
.filter(Boolean)
|
|
6
|
+
.map((part) => {
|
|
7
|
+
const [mediaType = "", ...params] = part.split(";").map((value) => value.trim());
|
|
8
|
+
const qParam = params.find((value) => value.startsWith("q="));
|
|
9
|
+
const q = qParam ? Number(qParam.slice(2)) : 1;
|
|
10
|
+
return {
|
|
11
|
+
mediaType: mediaType.toLowerCase(),
|
|
12
|
+
q: Number.isFinite(q) ? q : 1
|
|
13
|
+
};
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
export function negotiateRepresentation(acceptHeader) {
|
|
17
|
+
if (!acceptHeader) {
|
|
18
|
+
return "html";
|
|
19
|
+
}
|
|
20
|
+
const accepted = parseAcceptHeader(acceptHeader);
|
|
21
|
+
const weightByRepresentation = {
|
|
22
|
+
"event-stream": 0,
|
|
23
|
+
markdown: 0,
|
|
24
|
+
html: 0
|
|
25
|
+
};
|
|
26
|
+
for (const entry of accepted) {
|
|
27
|
+
if (entry.q <= 0) {
|
|
28
|
+
continue;
|
|
29
|
+
}
|
|
30
|
+
if (entry.mediaType === "text/event-stream") {
|
|
31
|
+
weightByRepresentation["event-stream"] = Math.max(weightByRepresentation["event-stream"], entry.q);
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
if (entry.mediaType === "text/markdown") {
|
|
35
|
+
weightByRepresentation.markdown = Math.max(weightByRepresentation.markdown, entry.q);
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
if (["text/html", "text/*", "*/*"].includes(entry.mediaType)) {
|
|
39
|
+
weightByRepresentation.html = Math.max(weightByRepresentation.html, entry.q);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
const candidates = Object.entries(weightByRepresentation).filter(([, weight]) => weight > 0);
|
|
43
|
+
if (candidates.length === 0) {
|
|
44
|
+
return "not-acceptable";
|
|
45
|
+
}
|
|
46
|
+
const tieBreaker = {
|
|
47
|
+
"event-stream": 3,
|
|
48
|
+
markdown: 2,
|
|
49
|
+
html: 1
|
|
50
|
+
};
|
|
51
|
+
candidates.sort((left, right) => {
|
|
52
|
+
if (right[1] !== left[1]) {
|
|
53
|
+
return right[1] - left[1];
|
|
54
|
+
}
|
|
55
|
+
return tieBreaker[right[0]] - tieBreaker[left[0]];
|
|
56
|
+
});
|
|
57
|
+
const winner = candidates[0]?.[0];
|
|
58
|
+
if (!winner) {
|
|
59
|
+
return "not-acceptable";
|
|
60
|
+
}
|
|
61
|
+
return winner;
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=negotiate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"negotiate.js","sourceRoot":"","sources":["../../src/core/negotiate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anchors.d.ts","sourceRoot":"","sources":["../../../src/core/parse/anchors.ts"],"names":[],"mappings":"AAIA,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CA0BvD"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { MdsnParseError } from "../errors.js";
|
|
2
|
+
const anchorPattern = /<!--\s*mdsn:block\s+([a-zA-Z_][\w-]*)\s*-->/g;
|
|
3
|
+
export function parseAnchors(markdown) {
|
|
4
|
+
const anchors = [];
|
|
5
|
+
const lines = markdown.split("\n");
|
|
6
|
+
let insideFence = false;
|
|
7
|
+
for (const line of lines) {
|
|
8
|
+
if (/^```/.test(line.trim())) {
|
|
9
|
+
insideFence = !insideFence;
|
|
10
|
+
continue;
|
|
11
|
+
}
|
|
12
|
+
if (insideFence) {
|
|
13
|
+
continue;
|
|
14
|
+
}
|
|
15
|
+
const matches = [...line.matchAll(anchorPattern)];
|
|
16
|
+
for (const match of matches) {
|
|
17
|
+
const name = match[1];
|
|
18
|
+
if (!name) {
|
|
19
|
+
throw new MdsnParseError("Encountered malformed block anchor.");
|
|
20
|
+
}
|
|
21
|
+
anchors.push(name);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return anchors;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=anchors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anchors.js","sourceRoot":"","sources":["../../../src/core/parse/anchors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,aAAa,GAAG,8CAA8C,CAAC;AAErE,MAAM,UAAU,YAAY,CAAC,QAAgB;IAC3C,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,WAAW,GAAG,KAAK,CAAC;IAExB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YAC7B,WAAW,GAAG,CAAC,WAAW,CAAC;YAC3B,SAAS;QACX,CAAC;QAED,IAAI,WAAW,EAAE,CAAC;YAChB,SAAS;QACX,CAAC;QAED,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;QAClD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACtB,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,MAAM,IAAI,cAAc,CAAC,qCAAqC,CAAC,CAAC;YAClE,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"block-parser.d.ts","sourceRoot":"","sources":["../../../src/core/parse/block-parser.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAA4B,MAAM,aAAa,CAAC;AA0EvE,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,CA0DvD"}
|