@breadstone-tools/markdowner-core 0.0.32 → 0.0.34
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/Index.d.ts +11 -7
- package/Index.d.ts.map +1 -1
- package/Index.js +8 -15
- package/Index.js.map +1 -1
- package/Process/MarkdownProcessor.d.ts.map +1 -1
- package/Process/MarkdownProcessor.js +20 -17
- package/Process/MarkdownProcessor.js.map +1 -1
- package/Process/Processors/Abstracts/BaseProcessor.d.ts +11 -6
- package/Process/Processors/Abstracts/BaseProcessor.d.ts.map +1 -1
- package/Process/Processors/Abstracts/BaseProcessor.js +6 -13
- package/Process/Processors/Abstracts/BaseProcessor.js.map +1 -1
- package/Process/Processors/BlockquoteProcessor.Test.js +19 -21
- package/Process/Processors/BlockquoteProcessor.Test.js.map +1 -1
- package/Process/Processors/BlockquoteProcessor.d.ts +13 -7
- package/Process/Processors/BlockquoteProcessor.d.ts.map +1 -1
- package/Process/Processors/BlockquoteProcessor.js +48 -42
- package/Process/Processors/BlockquoteProcessor.js.map +1 -1
- package/Process/Processors/CalloutProcessor.d.ts +23 -4
- package/Process/Processors/CalloutProcessor.d.ts.map +1 -1
- package/Process/Processors/CalloutProcessor.js +60 -36
- package/Process/Processors/CalloutProcessor.js.map +1 -1
- package/Process/Processors/CodeBlockProcessor.d.ts +17 -3
- package/Process/Processors/CodeBlockProcessor.d.ts.map +1 -1
- package/Process/Processors/CodeBlockProcessor.js +54 -35
- package/Process/Processors/CodeBlockProcessor.js.map +1 -1
- package/Process/Processors/Interfaces/IProcessor.d.ts +2 -2
- package/Process/Processors/Interfaces/IProcessor.d.ts.map +1 -1
- package/Process/Processors/Interfaces/IProcessor.js +1 -2
- package/Process/Processors/Interfaces/IProcessor.js.map +1 -1
- package/Process/Processors/SplitProcessor.d.ts +49 -0
- package/Process/Processors/SplitProcessor.d.ts.map +1 -0
- package/Process/Processors/SplitProcessor.js +123 -0
- package/Process/Processors/SplitProcessor.js.map +1 -0
- package/Process/Processors/TabProcessor.d.ts +36 -4
- package/Process/Processors/TabProcessor.d.ts.map +1 -1
- package/Process/Processors/TabProcessor.js +84 -49
- package/Process/Processors/TabProcessor.js.map +1 -1
- package/Process/Processors/Utils.js +2 -5
- package/Process/Processors/Utils.js.map +1 -1
- package/Processing/MarkdownProcessor.d.ts +46 -0
- package/Processing/MarkdownProcessor.d.ts.map +1 -0
- package/Processing/MarkdownProcessor.js +92 -0
- package/Processing/MarkdownProcessor.js.map +1 -0
- package/Processing/Processors/Abstracts/BaseProcessor.d.ts +60 -0
- package/Processing/Processors/Abstracts/BaseProcessor.d.ts.map +1 -0
- package/Processing/Processors/Abstracts/BaseProcessor.js +71 -0
- package/Processing/Processors/Abstracts/BaseProcessor.js.map +1 -0
- package/Processing/Processors/BlockquoteProcessor.Test.d.ts +2 -0
- package/Processing/Processors/BlockquoteProcessor.Test.d.ts.map +1 -0
- package/Processing/Processors/BlockquoteProcessor.Test.js +36 -0
- package/Processing/Processors/BlockquoteProcessor.Test.js.map +1 -0
- package/Processing/Processors/BlockquoteProcessor.d.ts +25 -0
- package/Processing/Processors/BlockquoteProcessor.d.ts.map +1 -0
- package/Processing/Processors/BlockquoteProcessor.js +67 -0
- package/Processing/Processors/BlockquoteProcessor.js.map +1 -0
- package/Processing/Processors/CalloutProcessor.d.ts +29 -0
- package/Processing/Processors/CalloutProcessor.d.ts.map +1 -0
- package/Processing/Processors/CalloutProcessor.js +68 -0
- package/Processing/Processors/CalloutProcessor.js.map +1 -0
- package/Processing/Processors/CodeBlockProcessor.d.ts +24 -0
- package/Processing/Processors/CodeBlockProcessor.d.ts.map +1 -0
- package/Processing/Processors/CodeBlockProcessor.js +65 -0
- package/Processing/Processors/CodeBlockProcessor.js.map +1 -0
- package/Processing/Processors/Interfaces/IProcessor.d.ts +9 -0
- package/Processing/Processors/Interfaces/IProcessor.d.ts.map +1 -0
- package/Processing/Processors/Interfaces/IProcessor.js +3 -0
- package/Processing/Processors/Interfaces/IProcessor.js.map +1 -0
- package/Processing/Processors/SplitProcessor.d.ts +47 -0
- package/Processing/Processors/SplitProcessor.d.ts.map +1 -0
- package/Processing/Processors/SplitProcessor.js +113 -0
- package/Processing/Processors/SplitProcessor.js.map +1 -0
- package/Processing/Processors/TabProcessor.d.ts +43 -0
- package/Processing/Processors/TabProcessor.d.ts.map +1 -0
- package/Processing/Processors/TabProcessor.js +110 -0
- package/Processing/Processors/TabProcessor.js.map +1 -0
- package/Templating/Html.d.ts +2 -0
- package/Templating/Html.d.ts.map +1 -0
- package/Templating/Html.js +11 -0
- package/Templating/Html.js.map +1 -0
- package/package.json +4 -4
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { BaseProcessor } from './Abstracts/BaseProcessor.js';
|
|
2
|
+
import type { TokenizerAndRendererExtension, Tokens } from 'marked';
|
|
3
|
+
type CalloutVariant = 'primary' | 'secondary' | 'tertiary' | 'info' | 'warning' | 'danger' | 'success' | 'highlight' | 'neutral';
|
|
4
|
+
export interface ICalloutToken extends Tokens.Generic {
|
|
5
|
+
type: 'callout';
|
|
6
|
+
raw: string;
|
|
7
|
+
variant: CalloutVariant;
|
|
8
|
+
title?: string;
|
|
9
|
+
tokens: Array<Tokens.Generic>;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* A processor that transforms :::callout-style blocks into styled callout boxes.
|
|
13
|
+
*
|
|
14
|
+
* Supported types: info, warning, tip, success, danger, note
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```markdown
|
|
18
|
+
* ::: warning Be cautious!
|
|
19
|
+
* This is a warning box.
|
|
20
|
+
* :::
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* @public
|
|
24
|
+
*/
|
|
25
|
+
export declare class CalloutProcessor extends BaseProcessor {
|
|
26
|
+
get extension(): TokenizerAndRendererExtension;
|
|
27
|
+
}
|
|
28
|
+
export {};
|
|
29
|
+
//# sourceMappingURL=CalloutProcessor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CalloutProcessor.d.ts","sourceRoot":"","sources":["../../../src/Processing/Processors/CalloutProcessor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,EAAsC,MAAM,QAAQ,CAAC;AAExG,KAAK,cAAc,GAAK,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,CAAC;AAMnI,MAAM,WAAW,aAAc,SAAQ,MAAM,CAAC,OAAO;IACjD,IAAI,EAAE,SAAS,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,cAAc,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;CACjC;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,gBAAiB,SAAQ,aAAa;IAE/C,IAAoB,SAAS,IAAI,6BAA6B,CAc7D;CAEJ"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { BaseProcessor } from './Abstracts/BaseProcessor.js';
|
|
2
|
+
const KNOWN_VARIANTS = new Set([
|
|
3
|
+
'primary', 'secondary', 'tertiary', 'info', 'warning', 'danger', 'success', 'highlight', 'neutral'
|
|
4
|
+
]);
|
|
5
|
+
/**
|
|
6
|
+
* A processor that transforms :::callout-style blocks into styled callout boxes.
|
|
7
|
+
*
|
|
8
|
+
* Supported types: info, warning, tip, success, danger, note
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```markdown
|
|
12
|
+
* ::: warning Be cautious!
|
|
13
|
+
* This is a warning box.
|
|
14
|
+
* :::
|
|
15
|
+
* ```
|
|
16
|
+
*
|
|
17
|
+
* @public
|
|
18
|
+
*/
|
|
19
|
+
export class CalloutProcessor extends BaseProcessor {
|
|
20
|
+
get extension() {
|
|
21
|
+
return {
|
|
22
|
+
name: 'callout',
|
|
23
|
+
level: 'block',
|
|
24
|
+
start(src) {
|
|
25
|
+
return (/^::: (primary|secondary|tertiary|info|warning|danger|success|highlight|neutral)/i).exec(src)?.index;
|
|
26
|
+
},
|
|
27
|
+
tokenizer(src) {
|
|
28
|
+
return CalloutTokenizer.tokenize(src, this.lexer);
|
|
29
|
+
},
|
|
30
|
+
renderer(token) {
|
|
31
|
+
return CalloutRenderer.render(token, this);
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
class CalloutTokenizer {
|
|
37
|
+
static tokenize(src, lexer) {
|
|
38
|
+
const match = (/^::: (\w+)(?:\s+([^\n]+))?\n([\s\S]+?)\n:::/m).exec(src);
|
|
39
|
+
if (!match) {
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
const variant = match[1].toLowerCase();
|
|
43
|
+
if (!KNOWN_VARIANTS.has(variant)) {
|
|
44
|
+
return undefined;
|
|
45
|
+
}
|
|
46
|
+
const title = match[2].trim();
|
|
47
|
+
const content = match[3].trim();
|
|
48
|
+
const contentTokens = lexer.inlineTokens(content);
|
|
49
|
+
return {
|
|
50
|
+
type: 'callout',
|
|
51
|
+
raw: match[0],
|
|
52
|
+
variant,
|
|
53
|
+
title,
|
|
54
|
+
tokens: contentTokens
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
class CalloutRenderer {
|
|
59
|
+
static render(token, renderer) {
|
|
60
|
+
const classes = ['callout', token.variant];
|
|
61
|
+
const title = token.title
|
|
62
|
+
? `<div class="callout-title">${token.title}</div>`
|
|
63
|
+
: '';
|
|
64
|
+
const body = renderer.parser.parse(token.tokens);
|
|
65
|
+
return `<div class="${classes.join(' ')}">${title}${body}</div>`;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=CalloutProcessor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CalloutProcessor.js","sourceRoot":"","sources":["../../../src/Processing/Processors/CalloutProcessor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAK7D,MAAM,cAAc,GAAG,IAAI,GAAG,CAAiB;IAC3C,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS;CACrG,CAAC,CAAC;AAUH;;;;;;;;;;;;;GAaG;AACH,MAAM,OAAO,gBAAiB,SAAQ,aAAa;IAE/C,IAAoB,SAAS;QACzB,OAAO;YACH,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,OAAO;YACd,KAAK,CAAC,GAAW;gBACb,OAAO,CAAC,kFAAkF,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC;YACjH,CAAC;YACD,SAAS,CAAsB,GAAW;gBACtC,OAAO,gBAAgB,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YACtD,CAAC;YACD,QAAQ,CAAqB,KAAqB;gBAC9C,OAAO,eAAe,CAAC,MAAM,CAAC,KAAsB,EAAE,IAAI,CAAC,CAAC;YAChE,CAAC;SACJ,CAAC;IACN,CAAC;CAEJ;AAED,MAAM,gBAAgB;IAEX,MAAM,CAAC,QAAQ,CAAC,GAAW,EAAE,KAAY;QAC5C,MAAM,KAAK,GAAG,CAAC,8CAA8C,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACzE,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,OAAO,SAAS,CAAC;QACrB,CAAC;QAED,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAoB,CAAC;QACzD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YAC/B,OAAO,SAAS,CAAC;QACrB,CAAC;QAED,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAEhC,MAAM,aAAa,GAAG,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAElD,OAAO;YACH,IAAI,EAAE,SAAS;YACf,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;YACb,OAAO;YACP,KAAK;YACL,MAAM,EAAE,aAAa;SACxB,CAAC;IACN,CAAC;CAEJ;AAED,MAAM,eAAe;IAEV,MAAM,CAAC,MAAM,CAAC,KAAoB,EAAE,QAAsB;QAC7D,MAAM,OAAO,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3C,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK;YACrB,CAAC,CAAC,8BAA8B,KAAK,CAAC,KAAK,QAAQ;YACnD,CAAC,CAAC,EAAE,CAAC;QAET,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAEjD,OAAO,eAAe,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK,GAAG,IAAI,QAAQ,CAAC;IACrE,CAAC;CAEJ"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { BaseProcessor } from './Abstracts/BaseProcessor.js';
|
|
2
|
+
import type { TokenizerAndRendererExtension, Tokens } from 'marked';
|
|
3
|
+
/**
|
|
4
|
+
* A processor that transforms fenced code blocks with extended metadata
|
|
5
|
+
* (language, filename, highlighted lines).
|
|
6
|
+
*
|
|
7
|
+
* Example:
|
|
8
|
+
* ```ts name="example.ts" {1,3-4}
|
|
9
|
+
* const foo = 42;
|
|
10
|
+
* const bar = 7;
|
|
11
|
+
* ```
|
|
12
|
+
*
|
|
13
|
+
* This will extract:
|
|
14
|
+
* - language: "ts"
|
|
15
|
+
* - filename: "example.ts"
|
|
16
|
+
* - highlights: "1,3-4"
|
|
17
|
+
*
|
|
18
|
+
* @public
|
|
19
|
+
*/
|
|
20
|
+
export declare class CodeBlockProcessor extends BaseProcessor {
|
|
21
|
+
get extension(): TokenizerAndRendererExtension;
|
|
22
|
+
walkTokens(token: Tokens.Generic): void;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=CodeBlockProcessor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CodeBlockProcessor.d.ts","sourceRoot":"","sources":["../../../src/Processing/Processors/CodeBlockProcessor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,EAAgB,MAAM,QAAQ,CAAC;AAclF;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,kBAAmB,SAAQ,aAAa;IAEjD,IAAoB,SAAS,IAAI,6BAA6B,CAQ7D;IAEe,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI;CAK1D"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { BaseProcessor } from './Abstracts/BaseProcessor.js';
|
|
2
|
+
/**
|
|
3
|
+
* A processor that transforms fenced code blocks with extended metadata
|
|
4
|
+
* (language, filename, highlighted lines).
|
|
5
|
+
*
|
|
6
|
+
* Example:
|
|
7
|
+
* ```ts name="example.ts" {1,3-4}
|
|
8
|
+
* const foo = 42;
|
|
9
|
+
* const bar = 7;
|
|
10
|
+
* ```
|
|
11
|
+
*
|
|
12
|
+
* This will extract:
|
|
13
|
+
* - language: "ts"
|
|
14
|
+
* - filename: "example.ts"
|
|
15
|
+
* - highlights: "1,3-4"
|
|
16
|
+
*
|
|
17
|
+
* @public
|
|
18
|
+
*/
|
|
19
|
+
export class CodeBlockProcessor extends BaseProcessor {
|
|
20
|
+
get extension() {
|
|
21
|
+
return {
|
|
22
|
+
name: 'code',
|
|
23
|
+
level: 'block',
|
|
24
|
+
renderer(token) {
|
|
25
|
+
return CodeBlockRenderer.render(token);
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
walkTokens(token) {
|
|
30
|
+
if (token.type !== 'code') {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
CodeBlockTokenizer.enrich(token);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
class CodeBlockTokenizer {
|
|
37
|
+
static enrich(token) {
|
|
38
|
+
const match = (/^(\w+)(?:\s+name="(.+?)")?(?:\s+\{([\d,-]+)\})?/i).exec(token.lang ?? '');
|
|
39
|
+
if (!match) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
const [, lang, fileName, highlights] = match;
|
|
43
|
+
token.meta = {
|
|
44
|
+
lang,
|
|
45
|
+
fileName,
|
|
46
|
+
highlights
|
|
47
|
+
};
|
|
48
|
+
token.lang = lang; // override lang so PrismJS still works
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
class CodeBlockRenderer {
|
|
52
|
+
static render(token) {
|
|
53
|
+
const lang = token.meta?.lang ?? 'plaintext';
|
|
54
|
+
const file = token.meta?.fileName;
|
|
55
|
+
const lines = token.meta?.highlights;
|
|
56
|
+
const filenameBlock = file
|
|
57
|
+
? `<div class="code-filename">${file}</div>\n`
|
|
58
|
+
: '';
|
|
59
|
+
const highlightAttr = lines
|
|
60
|
+
? ` data-lines="${lines}"`
|
|
61
|
+
: '';
|
|
62
|
+
return `${filenameBlock}<pre><code class="language-${lang}"${highlightAttr}>${token.text}</code></pre>`;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=CodeBlockProcessor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CodeBlockProcessor.js","sourceRoot":"","sources":["../../../src/Processing/Processors/CodeBlockProcessor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAe7D;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,OAAO,kBAAmB,SAAQ,aAAa;IAEjD,IAAoB,SAAS;QACzB,OAAO;YACH,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,OAAO;YACd,QAAQ,CAAqB,KAAqB;gBAC9C,OAAO,iBAAiB,CAAC,MAAM,CAAC,KAAwB,CAAC,CAAC;YAC9D,CAAC;SACJ,CAAC;IACN,CAAC;IAEe,UAAU,CAAC,KAAqB;QAC5C,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAAC,OAAO;QAAC,CAAC;QACtC,kBAAkB,CAAC,MAAM,CAAC,KAAwB,CAAC,CAAC;IACxD,CAAC;CAEJ;AAED,MAAM,kBAAkB;IAEb,MAAM,CAAC,MAAM,CAAC,KAAsB;QACvC,MAAM,KAAK,GAAG,CAAC,kDAAkD,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QAC1F,IAAI,CAAC,KAAK,EAAE,CAAC;YAAC,OAAO;QAAC,CAAC;QAEvB,MAAM,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,CAAC,GAAG,KAAK,CAAC;QAE7C,KAAK,CAAC,IAAI,GAAG;YACT,IAAI;YACJ,QAAQ;YACR,UAAU;SACb,CAAC;QAEF,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,uCAAuC;IAC9D,CAAC;CAEJ;AAED,MAAM,iBAAiB;IAEZ,MAAM,CAAC,MAAM,CAAC,KAAsB;QACvC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,IAAI,WAAW,CAAC;QAC7C,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC;QAClC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC;QAErC,MAAM,aAAa,GAAG,IAAI;YACtB,CAAC,CAAC,8BAA8B,IAAI,UAAU;YAC9C,CAAC,CAAC,EAAE,CAAC;QAET,MAAM,aAAa,GAAG,KAAK;YACvB,CAAC,CAAC,gBAAgB,KAAK,GAAG;YAC1B,CAAC,CAAC,EAAE,CAAC;QAET,OAAO,GAAG,aAAa,8BAA8B,IAAI,IAAI,aAAa,IAAI,KAAK,CAAC,IAAI,eAAe,CAAC;IAC5G,CAAC;CAEJ"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { MarkedExtension, TokenizerAndRendererExtension, Tokens } from 'marked';
|
|
2
|
+
/**
|
|
3
|
+
* Represents a processor that can handle a specific type of Markdown token.
|
|
4
|
+
*/
|
|
5
|
+
export interface IProcessor extends Pick<MarkedExtension, 'extensions' | 'walkTokens'> {
|
|
6
|
+
get extension(): TokenizerAndRendererExtension;
|
|
7
|
+
walkTokens?(token: Tokens.Generic): void;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=IProcessor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IProcessor.d.ts","sourceRoot":"","sources":["../../../../src/Processing/Processors/Interfaces/IProcessor.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,6BAA6B,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAIrF;;GAEG;AACH,MAAM,WAAW,UAAW,SAAQ,IAAI,CAAC,eAAe,EAAE,YAAY,GAAG,YAAY,CAAC;IAIlF,IAAI,SAAS,IAAI,6BAA6B,CAAC;IAM/C,UAAU,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;CAI5C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IProcessor.js","sourceRoot":"","sources":["../../../../src/Processing/Processors/Interfaces/IProcessor.ts"],"names":[],"mappings":"AAAA,kBAAkB"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { BaseProcessor } from './Abstracts/BaseProcessor.js';
|
|
2
|
+
import type { TokenizerAndRendererExtension, Tokens } from 'marked';
|
|
3
|
+
type SplitVariant = 'primary' | 'secondary' | 'tertiary' | 'info' | 'warning' | 'danger' | 'error' | 'success' | 'highlight' | 'neutral';
|
|
4
|
+
export interface ISplitsToken extends Tokens.Generic {
|
|
5
|
+
type: 'splits';
|
|
6
|
+
raw: string;
|
|
7
|
+
splits: Array<ISplitToken>;
|
|
8
|
+
}
|
|
9
|
+
export interface ISplitToken extends Tokens.Generic {
|
|
10
|
+
type: 'split';
|
|
11
|
+
id: string;
|
|
12
|
+
title: Array<Tokens.Generic>;
|
|
13
|
+
tokens: Array<Tokens.Generic>;
|
|
14
|
+
variant?: SplitVariant;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* A processor that transforms `:::split` blocks into a two-column layout.
|
|
18
|
+
* Each column may include a heading, a list, and an optional variant like `[!INFO]`.
|
|
19
|
+
*
|
|
20
|
+
* Supported variants: `primary`, `secondary`, `tertiary`, `info`, `warning`, `danger`, `error`, `success`, `highlight`, `neutral`.
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```markdown
|
|
24
|
+
* ::: splits
|
|
25
|
+
* ::: split Split 1
|
|
26
|
+
* [!INFO]
|
|
27
|
+
* - Split 1 point a
|
|
28
|
+
* - Split 1 point b
|
|
29
|
+
* - Split 1 point c
|
|
30
|
+
* ::: end-split
|
|
31
|
+
*
|
|
32
|
+
* ::: split Split 2
|
|
33
|
+
* [!ERROR]
|
|
34
|
+
* - Split 2 point a
|
|
35
|
+
* - Split 2 point b
|
|
36
|
+
* - Split 2 point c
|
|
37
|
+
* ::: end-split
|
|
38
|
+
* ::: end-splits
|
|
39
|
+
* ```
|
|
40
|
+
*
|
|
41
|
+
* @public
|
|
42
|
+
*/
|
|
43
|
+
export declare class SplitProcessor extends BaseProcessor {
|
|
44
|
+
get extension(): TokenizerAndRendererExtension;
|
|
45
|
+
}
|
|
46
|
+
export {};
|
|
47
|
+
//# sourceMappingURL=SplitProcessor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SplitProcessor.d.ts","sourceRoot":"","sources":["../../../src/Processing/Processors/SplitProcessor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,KAAK,EAA+B,6BAA6B,EAAiB,MAAM,EAAE,MAAM,QAAQ,CAAC;AAIhH,KAAK,YAAY,GAAK,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,CAAC;AAQ3I,MAAM,WAAW,YAAa,SAAQ,MAAM,CAAC,OAAO;IAChD,IAAI,EAAE,QAAQ,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,WAAY,SAAQ,MAAM,CAAC,OAAO;IAC/C,IAAI,EAAE,OAAO,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC7B,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC9B,OAAO,CAAC,EAAE,YAAY,CAAC;CAC1B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,qBAAa,cAAe,SAAQ,aAAa;IAE7C,IAAoB,SAAS,IAAI,6BAA6B,CAc7D;CAEJ"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
// #region Imports
|
|
2
|
+
import { BaseProcessor } from './Abstracts/BaseProcessor.js';
|
|
3
|
+
const KNOWN_VARIANTS = new Set([
|
|
4
|
+
'primary', 'secondary', 'tertiary',
|
|
5
|
+
'info', 'warning', 'danger', 'error',
|
|
6
|
+
'success', 'highlight', 'neutral'
|
|
7
|
+
]);
|
|
8
|
+
/**
|
|
9
|
+
* A processor that transforms `:::split` blocks into a two-column layout.
|
|
10
|
+
* Each column may include a heading, a list, and an optional variant like `[!INFO]`.
|
|
11
|
+
*
|
|
12
|
+
* Supported variants: `primary`, `secondary`, `tertiary`, `info`, `warning`, `danger`, `error`, `success`, `highlight`, `neutral`.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```markdown
|
|
16
|
+
* ::: splits
|
|
17
|
+
* ::: split Split 1
|
|
18
|
+
* [!INFO]
|
|
19
|
+
* - Split 1 point a
|
|
20
|
+
* - Split 1 point b
|
|
21
|
+
* - Split 1 point c
|
|
22
|
+
* ::: end-split
|
|
23
|
+
*
|
|
24
|
+
* ::: split Split 2
|
|
25
|
+
* [!ERROR]
|
|
26
|
+
* - Split 2 point a
|
|
27
|
+
* - Split 2 point b
|
|
28
|
+
* - Split 2 point c
|
|
29
|
+
* ::: end-split
|
|
30
|
+
* ::: end-splits
|
|
31
|
+
* ```
|
|
32
|
+
*
|
|
33
|
+
* @public
|
|
34
|
+
*/
|
|
35
|
+
export class SplitProcessor extends BaseProcessor {
|
|
36
|
+
get extension() {
|
|
37
|
+
return {
|
|
38
|
+
name: 'splits',
|
|
39
|
+
level: 'block',
|
|
40
|
+
start(src) {
|
|
41
|
+
return (/^::: splits/).exec(src)?.index;
|
|
42
|
+
},
|
|
43
|
+
tokenizer(src) {
|
|
44
|
+
return SplitTokenizer.tokenize(this.lexer, src);
|
|
45
|
+
},
|
|
46
|
+
renderer(token) {
|
|
47
|
+
return SplitRenderer.render(this.parser, token);
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* @private
|
|
54
|
+
*/
|
|
55
|
+
class SplitTokenizer {
|
|
56
|
+
static tokenize(lexer, src) {
|
|
57
|
+
const match = (/^::: splits\n([\s\S]+?)\n::: end-splits/m).exec(src);
|
|
58
|
+
if (!match) {
|
|
59
|
+
return undefined;
|
|
60
|
+
}
|
|
61
|
+
const splitRegex = /^::: split (.+?)\n([\s\S]+?)\n::: end-split/gm;
|
|
62
|
+
const splits = [];
|
|
63
|
+
let splitMatch = null;
|
|
64
|
+
let index = 0;
|
|
65
|
+
while ((splitMatch = splitRegex.exec(match[1])) !== null) {
|
|
66
|
+
const rawLines = splitMatch[2].trim().split('\n');
|
|
67
|
+
let variant = undefined;
|
|
68
|
+
const variantMatch = (/^\[\!(\w+)\]/).exec(rawLines[0]);
|
|
69
|
+
if (variantMatch) {
|
|
70
|
+
const v = variantMatch[1].toLowerCase();
|
|
71
|
+
if (KNOWN_VARIANTS.has(v)) {
|
|
72
|
+
variant = v;
|
|
73
|
+
rawLines.shift(); // Remove variant line
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
const content = rawLines.join('\n').trim();
|
|
77
|
+
splits.push({
|
|
78
|
+
type: 'split',
|
|
79
|
+
raw: splitMatch[0],
|
|
80
|
+
tokens: lexer.inline(content),
|
|
81
|
+
id: `split-${index++}`,
|
|
82
|
+
title: lexer.inlineTokens(splitMatch[1].trim()),
|
|
83
|
+
content: content,
|
|
84
|
+
variant: variant
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
return {
|
|
88
|
+
type: 'splits',
|
|
89
|
+
raw: match[0],
|
|
90
|
+
splits: splits
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* @private
|
|
96
|
+
*/
|
|
97
|
+
class SplitRenderer {
|
|
98
|
+
static render(parser, token) {
|
|
99
|
+
return `
|
|
100
|
+
<div class="splits">
|
|
101
|
+
${token.splits.map((split) => `
|
|
102
|
+
<div class="split ${split.variant}">
|
|
103
|
+
<h6>${parser.parse(split.title)}</h6>
|
|
104
|
+
<div class="split-content">
|
|
105
|
+
${parser.parse(split.tokens)}
|
|
106
|
+
</div>
|
|
107
|
+
</div>
|
|
108
|
+
`).join('')}
|
|
109
|
+
</div>
|
|
110
|
+
`.trim();
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=SplitProcessor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SplitProcessor.js","sourceRoot":"","sources":["../../../src/Processing/Processors/SplitProcessor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { BaseProcessor } from './Abstracts/BaseProcessor.js';
|
|
2
|
+
import type { Tokens, TokenizerAndRendererExtension } from 'marked';
|
|
3
|
+
type TabVariant = 'primary' | 'secondary' | 'tertiary' | 'info' | 'warning' | 'danger' | 'error' | 'success' | 'highlight' | 'neutral';
|
|
4
|
+
export interface ITabsToken extends Tokens.Generic {
|
|
5
|
+
type: 'tabs';
|
|
6
|
+
raw: string;
|
|
7
|
+
tabs: Array<ITabToken>;
|
|
8
|
+
}
|
|
9
|
+
export interface ITabToken extends Tokens.Generic {
|
|
10
|
+
type: 'tab';
|
|
11
|
+
id: string;
|
|
12
|
+
title: string;
|
|
13
|
+
content: string;
|
|
14
|
+
variant?: TabVariant;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* A processor that transforms `:::tabs` blocks into tabbed layout structures.
|
|
18
|
+
* Each tab may include a title, content, and an optional variant using `[!TYPE]`.
|
|
19
|
+
*
|
|
20
|
+
* Supported variants: `primary`, `secondary`, `tertiary`, `info`, `warning`, `danger`, `error`, `success`, `highlight`, `neutral`.
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```markdown
|
|
24
|
+
* ::: tabs
|
|
25
|
+
* ::: tab Tab 1
|
|
26
|
+
* [!INFO]
|
|
27
|
+
* Content for the first tab.
|
|
28
|
+
* ::: end-tab
|
|
29
|
+
*
|
|
30
|
+
* ::: tab Tab 2
|
|
31
|
+
* [!WARNING]
|
|
32
|
+
* Content for the second tab.
|
|
33
|
+
* ::: end-tab
|
|
34
|
+
* ::: end-tabs
|
|
35
|
+
* ```
|
|
36
|
+
*
|
|
37
|
+
* @public
|
|
38
|
+
*/
|
|
39
|
+
export declare class TabProcessor extends BaseProcessor {
|
|
40
|
+
get extension(): TokenizerAndRendererExtension;
|
|
41
|
+
}
|
|
42
|
+
export {};
|
|
43
|
+
//# sourceMappingURL=TabProcessor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TabProcessor.d.ts","sourceRoot":"","sources":["../../../src/Processing/Processors/TabProcessor.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,KAAK,EAAgB,MAAM,EAAE,6BAA6B,EAAgC,MAAM,QAAQ,CAAC;AAIhH,KAAK,UAAU,GAAK,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,CAAC;AAQzI,MAAM,WAAW,UAAW,SAAQ,MAAM,CAAC,OAAO;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;CAC1B;AAED,MAAM,WAAW,SAAU,SAAQ,MAAM,CAAC,OAAO;IAC7C,IAAI,EAAE,KAAK,CAAC;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,UAAU,CAAC;CACxB;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,YAAa,SAAQ,aAAa;IAE3C,IAAoB,SAAS,IAAI,6BAA6B,CAc7D;CAEJ"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
// #region Imports
|
|
2
|
+
import { html } from '../../Templating/Html.js';
|
|
3
|
+
import { BaseProcessor } from './Abstracts/BaseProcessor.js';
|
|
4
|
+
const KNOWN_VARIANTS = new Set([
|
|
5
|
+
'primary', 'secondary', 'tertiary',
|
|
6
|
+
'info', 'warning', 'danger', 'error',
|
|
7
|
+
'success', 'highlight', 'neutral'
|
|
8
|
+
]);
|
|
9
|
+
/**
|
|
10
|
+
* A processor that transforms `:::tabs` blocks into tabbed layout structures.
|
|
11
|
+
* Each tab may include a title, content, and an optional variant using `[!TYPE]`.
|
|
12
|
+
*
|
|
13
|
+
* Supported variants: `primary`, `secondary`, `tertiary`, `info`, `warning`, `danger`, `error`, `success`, `highlight`, `neutral`.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```markdown
|
|
17
|
+
* ::: tabs
|
|
18
|
+
* ::: tab Tab 1
|
|
19
|
+
* [!INFO]
|
|
20
|
+
* Content for the first tab.
|
|
21
|
+
* ::: end-tab
|
|
22
|
+
*
|
|
23
|
+
* ::: tab Tab 2
|
|
24
|
+
* [!WARNING]
|
|
25
|
+
* Content for the second tab.
|
|
26
|
+
* ::: end-tab
|
|
27
|
+
* ::: end-tabs
|
|
28
|
+
* ```
|
|
29
|
+
*
|
|
30
|
+
* @public
|
|
31
|
+
*/
|
|
32
|
+
export class TabProcessor extends BaseProcessor {
|
|
33
|
+
get extension() {
|
|
34
|
+
return {
|
|
35
|
+
name: 'tabs',
|
|
36
|
+
level: 'block',
|
|
37
|
+
start(src) {
|
|
38
|
+
return (/^::: tabs/).exec(src)?.index;
|
|
39
|
+
},
|
|
40
|
+
tokenizer(src) {
|
|
41
|
+
return TabTokenizer.tokenize(this.lexer, src);
|
|
42
|
+
},
|
|
43
|
+
renderer(token) {
|
|
44
|
+
return TabRenderer.render(this.parser, token);
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* @private
|
|
51
|
+
*/
|
|
52
|
+
class TabTokenizer {
|
|
53
|
+
static tokenize(lexer, src) {
|
|
54
|
+
const match = (/^::: tabs\n([\s\S]+?)\n::: end-tabs/m).exec(src);
|
|
55
|
+
if (!match) {
|
|
56
|
+
return undefined;
|
|
57
|
+
}
|
|
58
|
+
const tabRegex = /^::: tab (.+?)\n([\s\S]+?)\n::: end-tab/gm;
|
|
59
|
+
const tabs = [];
|
|
60
|
+
let tabMatch = null;
|
|
61
|
+
let index = 0;
|
|
62
|
+
while ((tabMatch = tabRegex.exec(match[1])) !== null) {
|
|
63
|
+
const rawLines = tabMatch[2].trim().split('\n');
|
|
64
|
+
let variant = undefined;
|
|
65
|
+
const variantMatch = (/^\[\!(\w+)\]/).exec(rawLines[0]);
|
|
66
|
+
if (variantMatch) {
|
|
67
|
+
const v = variantMatch[1].toLowerCase();
|
|
68
|
+
if (KNOWN_VARIANTS.has(v)) {
|
|
69
|
+
variant = v;
|
|
70
|
+
rawLines.shift(); // Remove variant line
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
const content = rawLines.join('\n').trim();
|
|
74
|
+
tabs.push({
|
|
75
|
+
type: 'tab',
|
|
76
|
+
raw: tabMatch[0],
|
|
77
|
+
tokens: [], // Inline tokens can be added if needed
|
|
78
|
+
id: `tab-${index++}`,
|
|
79
|
+
title: tabMatch[1].trim(),
|
|
80
|
+
content,
|
|
81
|
+
variant
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
return {
|
|
85
|
+
type: 'tabs',
|
|
86
|
+
raw: match[0],
|
|
87
|
+
tabs: tabs
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* @private
|
|
93
|
+
*/
|
|
94
|
+
class TabRenderer {
|
|
95
|
+
static render(parser, token) {
|
|
96
|
+
return html `
|
|
97
|
+
<div class="tabs">
|
|
98
|
+
<ul class="tab-list">
|
|
99
|
+
${token.tabs.map((tab) => `
|
|
100
|
+
<li class="tab-item${tab.variant ? ` ${tab.variant}` : ''}" data-tab="${tab.id}">${tab.title}
|
|
101
|
+
</li>`).join('')}
|
|
102
|
+
</ul>
|
|
103
|
+
${token.tabs.map((tab) => `
|
|
104
|
+
<div class="tab-content${tab.variant ? ` ${tab.variant}` : ''}" id="${tab.id}">${tab.content}
|
|
105
|
+
</div>`).join('')}
|
|
106
|
+
</div>
|
|
107
|
+
`.trim();
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=TabProcessor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TabProcessor.js","sourceRoot":"","sources":["../../../src/Processing/Processors/TabProcessor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Html.d.ts","sourceRoot":"","sources":["../../src/Templating/Html.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @internal
|
|
3
|
+
*/
|
|
4
|
+
export function html(strings, ...values) {
|
|
5
|
+
return strings.reduce((result, str, i) => {
|
|
6
|
+
const value = values[i];
|
|
7
|
+
// eslint-disable-next-line @typescript-eslint/restrict-plus-operands, @typescript-eslint/no-base-to-string
|
|
8
|
+
return (result + str + (value !== null ? value : '')).trim();
|
|
9
|
+
}, '').trim();
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=Html.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Html.js","sourceRoot":"","sources":["../../src/Templating/Html.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,UAAU,IAAI,CAAC,OAA6B,EAAE,GAAG,MAAsB;IACzE,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACxB,2GAA2G;QAC3G,OAAO,CAAC,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACjE,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AAClB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@breadstone-tools/markdowner-core",
|
|
3
3
|
"description": "Markdowner core library",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.34",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "andre.wehlert <awehlert@breadstone.de> (https://www.breadstone.de)",
|
|
7
7
|
"repository": {
|
|
8
8
|
"url": "git+ssh://git@github.com/RueDeRennes/mosaik.git"
|
|
9
9
|
},
|
|
10
|
-
"type": "commonjs",
|
|
11
10
|
"main": "./Index.js",
|
|
12
|
-
"commonjs": "./Index.js",
|
|
13
11
|
"module": "./Index.js",
|
|
12
|
+
"commonjs": "./Index.js",
|
|
13
|
+
"typings": "./Index.d.ts",
|
|
14
14
|
"types": "./Index.d.ts",
|
|
15
15
|
"dependencies": {
|
|
16
|
-
"@breadstone-infrastructure/utilities": "^0.0.
|
|
16
|
+
"@breadstone-infrastructure/utilities": "^0.0.34",
|
|
17
17
|
"marked": "^15.0.12"
|
|
18
18
|
}
|
|
19
19
|
}
|