@mdfriday/foundry 25.7.0 → 25.7.2
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 +4 -0
- package/dist/internal/application/incremental-build-coordinator.d.ts +69 -0
- package/dist/internal/application/incremental-build-coordinator.d.ts.map +1 -0
- package/dist/internal/application/incremental-build-coordinator.js +184 -0
- package/dist/internal/application/incremental-build-coordinator.js.map +1 -0
- package/dist/internal/application/incremental-ssg.d.ts +8 -0
- package/dist/internal/application/incremental-ssg.d.ts.map +1 -0
- package/dist/internal/application/incremental-ssg.js +23 -0
- package/dist/internal/application/incremental-ssg.js.map +1 -0
- package/dist/internal/application/ssg.d.ts +19 -1
- package/dist/internal/application/ssg.d.ts.map +1 -1
- package/dist/internal/application/ssg.js +29 -4
- package/dist/internal/application/ssg.js.map +1 -1
- package/dist/internal/application/test-incremental-ssg.d.ts +9 -0
- package/dist/internal/application/test-incremental-ssg.d.ts.map +1 -0
- package/dist/internal/application/test-incremental-ssg.js +80 -0
- package/dist/internal/application/test-incremental-ssg.js.map +1 -0
- package/dist/internal/application/test-ssg.d.ts.map +1 -1
- package/dist/internal/application/test-ssg.js +1 -1
- package/dist/internal/application/test-ssg.js.map +1 -1
- package/dist/internal/domain/config/entity/dir.d.ts +3 -2
- package/dist/internal/domain/config/entity/dir.d.ts.map +1 -1
- package/dist/internal/domain/config/entity/dir.js +5 -4
- package/dist/internal/domain/config/entity/dir.js.map +1 -1
- package/dist/internal/domain/config/factory/config.d.ts.map +1 -1
- package/dist/internal/domain/config/factory/config.js +5 -2
- package/dist/internal/domain/config/factory/config.js.map +1 -1
- package/dist/internal/domain/content/entity/content.d.ts +6 -2
- package/dist/internal/domain/content/entity/content.d.ts.map +1 -1
- package/dist/internal/domain/content/entity/content.js +51 -16
- package/dist/internal/domain/content/entity/content.js.map +1 -1
- package/dist/internal/domain/content/entity/pagebuilder.d.ts.map +1 -1
- package/dist/internal/domain/content/entity/pagebuilder.js +5 -1
- package/dist/internal/domain/content/entity/pagebuilder.js.map +1 -1
- package/dist/internal/domain/content/entity/pagecollector.d.ts.map +1 -1
- package/dist/internal/domain/content/entity/pagecollector.js +10 -8
- package/dist/internal/domain/content/entity/pagecollector.js.map +1 -1
- package/dist/internal/domain/content/entity/pagesource.d.ts.map +1 -1
- package/dist/internal/domain/content/entity/pagesource.js +1 -2
- package/dist/internal/domain/content/entity/pagesource.js.map +1 -1
- package/dist/internal/domain/content/type.d.ts +3 -0
- package/dist/internal/domain/content/type.d.ts.map +1 -1
- package/dist/internal/domain/content/type.js.map +1 -1
- package/dist/internal/domain/content/vo/identity.d.ts +4 -0
- package/dist/internal/domain/content/vo/identity.d.ts.map +1 -1
- package/dist/internal/domain/content/vo/identity.js +17 -0
- package/dist/internal/domain/content/vo/identity.js.map +1 -1
- package/dist/internal/domain/fs/entity/basefs.d.ts.map +1 -1
- package/dist/internal/domain/fs/entity/basefs.js +21 -9
- package/dist/internal/domain/fs/entity/basefs.js.map +1 -1
- package/dist/internal/domain/fs/entity/fs.d.ts +1 -0
- package/dist/internal/domain/fs/entity/fs.d.ts.map +1 -1
- package/dist/internal/domain/fs/entity/fs.js +4 -0
- package/dist/internal/domain/fs/entity/fs.js.map +1 -1
- package/dist/internal/domain/fs/factory/fs.d.ts +1 -0
- package/dist/internal/domain/fs/factory/fs.d.ts.map +1 -1
- package/dist/internal/domain/fs/factory/fs.js.map +1 -1
- package/dist/internal/domain/fs/vo/file.d.ts +1 -0
- package/dist/internal/domain/fs/vo/file.d.ts.map +1 -1
- package/dist/internal/domain/fs/vo/file.js +6 -3
- package/dist/internal/domain/fs/vo/file.js.map +1 -1
- package/dist/internal/domain/fs/vo/fileinfo.d.ts.map +1 -1
- package/dist/internal/domain/fs/vo/fileinfo.js +1 -2
- package/dist/internal/domain/fs/vo/fileinfo.js.map +1 -1
- package/dist/internal/domain/fs/vo/filemeta.d.ts +0 -4
- package/dist/internal/domain/fs/vo/filemeta.d.ts.map +1 -1
- package/dist/internal/domain/fs/vo/filemeta.js +0 -9
- package/dist/internal/domain/fs/vo/filemeta.js.map +1 -1
- package/dist/internal/domain/fs/vo/incremental-file-collector.d.ts +3 -0
- package/dist/internal/domain/fs/vo/incremental-file-collector.d.ts.map +1 -0
- package/dist/internal/domain/fs/vo/incremental-file-collector.js +37 -0
- package/dist/internal/domain/fs/vo/incremental-file-collector.js.map +1 -0
- package/dist/internal/domain/fs/vo/overlay-factory.d.ts +1 -0
- package/dist/internal/domain/fs/vo/overlay-factory.d.ts.map +1 -1
- package/dist/internal/domain/fs/vo/overlay-factory.js +1 -38
- package/dist/internal/domain/fs/vo/overlay-factory.js.map +1 -1
- package/dist/internal/domain/fs/vo/walkway.d.ts.map +1 -1
- package/dist/internal/domain/fs/vo/walkway.js +1 -4
- package/dist/internal/domain/fs/vo/walkway.js.map +1 -1
- package/dist/internal/domain/markdown/type.d.ts +1 -0
- package/dist/internal/domain/markdown/type.d.ts.map +1 -1
- package/dist/internal/domain/markdown/type.js.map +1 -1
- package/dist/internal/domain/markdown/vo/shortcode.d.ts +1 -0
- package/dist/internal/domain/markdown/vo/shortcode.d.ts.map +1 -1
- package/dist/internal/domain/markdown/vo/shortcode.js +3 -0
- package/dist/internal/domain/markdown/vo/shortcode.js.map +1 -1
- package/dist/internal/domain/site/entity/page.d.ts +4 -2
- package/dist/internal/domain/site/entity/page.d.ts.map +1 -1
- package/dist/internal/domain/site/entity/page.js +13 -2
- package/dist/internal/domain/site/entity/page.js.map +1 -1
- package/dist/internal/domain/site/entity/site.d.ts +2 -1
- package/dist/internal/domain/site/entity/site.d.ts.map +1 -1
- package/dist/internal/domain/site/entity/site.js +9 -1
- package/dist/internal/domain/site/entity/site.js.map +1 -1
- package/dist/internal/domain/template/entity/template.d.ts.map +1 -1
- package/dist/internal/domain/template/entity/template.js +3 -0
- package/dist/internal/domain/template/entity/template.js.map +1 -1
- package/dist/pkg/log/logger.d.ts.map +1 -1
- package/dist/pkg/log/logger.js +1 -0
- package/dist/pkg/log/logger.js.map +1 -1
- package/dist/pkg/log/manager.js +1 -1
- package/dist/pkg/web/server/livereload-server.d.ts +23 -0
- package/dist/pkg/web/server/livereload-server.d.ts.map +1 -0
- package/dist/pkg/web/server/livereload-server.js +370 -0
- package/dist/pkg/web/server/livereload-server.js.map +1 -0
- package/dist/pkg/web/server/types.d.ts +25 -0
- package/dist/pkg/web/server/types.d.ts.map +1 -0
- package/dist/pkg/web/server/types.js +3 -0
- package/dist/pkg/web/server/types.js.map +1 -0
- package/dist/pkg/web/watcher/content-file-watcher.d.ts +20 -0
- package/dist/pkg/web/watcher/content-file-watcher.d.ts.map +1 -0
- package/dist/pkg/web/watcher/content-file-watcher.js +154 -0
- package/dist/pkg/web/watcher/content-file-watcher.js.map +1 -0
- package/dist/pkg/web/watcher/types.d.ts +18 -0
- package/dist/pkg/web/watcher/types.d.ts.map +1 -0
- package/dist/pkg/web/watcher/types.js +3 -0
- package/dist/pkg/web/watcher/types.js.map +1 -0
- package/package.json +7 -2
- package/dist/internal/domain/markdown/examples/obsidian-example.d.ts +0 -79
- package/dist/internal/domain/markdown/examples/obsidian-example.d.ts.map +0 -1
- package/dist/internal/domain/markdown/examples/obsidian-example.js +0 -302
- package/dist/internal/domain/markdown/examples/obsidian-example.js.map +0 -1
- package/dist/internal/domain/markdown/examples/shortcode.d.ts +0 -43
- package/dist/internal/domain/markdown/examples/shortcode.d.ts.map +0 -1
- package/dist/internal/domain/markdown/examples/shortcode.js +0 -99
- package/dist/internal/domain/markdown/examples/shortcode.js.map +0 -1
- package/dist/internal/domain/prompt/entity/collector.d.ts +0 -88
- package/dist/internal/domain/prompt/entity/collector.d.ts.map +0 -1
- package/dist/internal/domain/prompt/entity/collector.js +0 -254
- package/dist/internal/domain/prompt/entity/collector.js.map +0 -1
- package/dist/internal/domain/prompt/entity/finder.d.ts +0 -88
- package/dist/internal/domain/prompt/entity/finder.d.ts.map +0 -1
- package/dist/internal/domain/prompt/entity/finder.js +0 -293
- package/dist/internal/domain/prompt/entity/finder.js.map +0 -1
- package/dist/internal/domain/prompt/entity/hub.d.ts +0 -112
- package/dist/internal/domain/prompt/entity/hub.d.ts.map +0 -1
- package/dist/internal/domain/prompt/entity/hub.js +0 -259
- package/dist/internal/domain/prompt/entity/hub.js.map +0 -1
- package/dist/internal/domain/prompt/entity/prompt.d.ts +0 -133
- package/dist/internal/domain/prompt/entity/prompt.d.ts.map +0 -1
- package/dist/internal/domain/prompt/entity/prompt.js +0 -237
- package/dist/internal/domain/prompt/entity/prompt.js.map +0 -1
- package/dist/internal/domain/prompt/factory/prompt.d.ts +0 -55
- package/dist/internal/domain/prompt/factory/prompt.d.ts.map +0 -1
- package/dist/internal/domain/prompt/factory/prompt.js +0 -212
- package/dist/internal/domain/prompt/factory/prompt.js.map +0 -1
- package/dist/internal/domain/prompt/index.d.ts +0 -10
- package/dist/internal/domain/prompt/index.d.ts.map +0 -1
- package/dist/internal/domain/prompt/index.js +0 -72
- package/dist/internal/domain/prompt/index.js.map +0 -1
- package/dist/internal/domain/prompt/type.d.ts +0 -180
- package/dist/internal/domain/prompt/type.d.ts.map +0 -1
- package/dist/internal/domain/prompt/type.js +0 -23
- package/dist/internal/domain/prompt/type.js.map +0 -1
- package/dist/internal/domain/prompt/vo/file.d.ts +0 -103
- package/dist/internal/domain/prompt/vo/file.d.ts.map +0 -1
- package/dist/internal/domain/prompt/vo/file.js +0 -265
- package/dist/internal/domain/prompt/vo/file.js.map +0 -1
- package/dist/internal/domain/prompt/vo/rule.d.ts +0 -139
- package/dist/internal/domain/prompt/vo/rule.d.ts.map +0 -1
- package/dist/internal/domain/prompt/vo/rule.js +0 -268
- package/dist/internal/domain/prompt/vo/rule.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mdfriday/foundry",
|
|
3
|
-
"version": "25.7.
|
|
3
|
+
"version": "25.7.2",
|
|
4
4
|
"description": "The core engine of MDFriday. Convert Markdown and shortcodes into fully themed static sites – Hugo-style, powered by TypeScript.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -22,7 +22,9 @@
|
|
|
22
22
|
"serve": "node server.js",
|
|
23
23
|
"serve:help": "echo 'File download server - serves files from themes directory' && echo 'Usage: npm run serve' && echo 'Access: http://localhost:8090/blank.zip'",
|
|
24
24
|
"test:ssg": "ts-node internal/application/test-ssg.ts",
|
|
25
|
+
"test:issg": "ts-node internal/application/test-incremental-ssg.ts",
|
|
25
26
|
"validate:ssg": "npm run test:ssg",
|
|
27
|
+
"validate:issg": "npm run test:issg",
|
|
26
28
|
"test:public": "http-server ws/proj -p 8091 --cors"
|
|
27
29
|
},
|
|
28
30
|
"keywords": [
|
|
@@ -44,6 +46,7 @@
|
|
|
44
46
|
"@types/markdown-it": "^13.0.7",
|
|
45
47
|
"@types/node": "^20.17.57",
|
|
46
48
|
"@types/terser": "^3.8.1",
|
|
49
|
+
"@types/ws": "^8.18.1",
|
|
47
50
|
"@typescript-eslint/eslint-plugin": "^6.13.1",
|
|
48
51
|
"@typescript-eslint/parser": "^6.13.1",
|
|
49
52
|
"eslint": "^8.54.0",
|
|
@@ -60,6 +63,7 @@
|
|
|
60
63
|
"dependencies": {
|
|
61
64
|
"@mdfriday/text-template": "^0.2.5",
|
|
62
65
|
"@types/js-yaml": "^4.0.9",
|
|
66
|
+
"chokidar": "^4.0.3",
|
|
63
67
|
"js-yaml": "^4.1.0",
|
|
64
68
|
"jszip": "^3.10.1",
|
|
65
69
|
"markdown-it": "^14.0.0",
|
|
@@ -76,6 +80,7 @@
|
|
|
76
80
|
"markdown-it-task-lists": "^2.1.1",
|
|
77
81
|
"markdown-it-toc-done-right": "^4.2.0",
|
|
78
82
|
"smol-toml": "^1.4.1",
|
|
79
|
-
"terser": "^5.43.1"
|
|
83
|
+
"terser": "^5.43.1",
|
|
84
|
+
"ws": "^8.18.3"
|
|
80
85
|
}
|
|
81
86
|
}
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Example: Integrating Markdown Domain with Obsidian
|
|
3
|
-
*
|
|
4
|
-
* This docs shows how to integrate the TypeScript markdown domain
|
|
5
|
-
* with an Obsidian plugin, demonstrating different approaches.
|
|
6
|
-
*
|
|
7
|
-
* NOTE: This is an docs file for documentation purposes.
|
|
8
|
-
* It requires Obsidian types to be installed to compile properly.
|
|
9
|
-
* To use this in a real Obsidian plugin:
|
|
10
|
-
* 1. Install Obsidian types: npm install obsidian
|
|
11
|
-
* 2. Copy the relevant parts to your plugin
|
|
12
|
-
*/
|
|
13
|
-
import { Plugin } from 'obsidian';
|
|
14
|
-
import { Markdown } from '../index';
|
|
15
|
-
/**
|
|
16
|
-
* Example Obsidian Plugin that uses our unified markdown domain
|
|
17
|
-
*/
|
|
18
|
-
export declare class ExampleMarkdownPlugin extends Plugin {
|
|
19
|
-
private unifiedMarkdown;
|
|
20
|
-
onload(): Promise<void>;
|
|
21
|
-
onunload(): void;
|
|
22
|
-
/**
|
|
23
|
-
* Method 1: Using simple render function
|
|
24
|
-
* This is the simplest approach when you only need rendering
|
|
25
|
-
*/
|
|
26
|
-
private createWithRenderFunction;
|
|
27
|
-
/**
|
|
28
|
-
* Method 2: Using external processor object
|
|
29
|
-
* This provides more flexibility and features
|
|
30
|
-
*/
|
|
31
|
-
private createWithProcessor;
|
|
32
|
-
/**
|
|
33
|
-
* Method 3: Obsidian-specific factory
|
|
34
|
-
* This is the recommended approach for Obsidian plugins
|
|
35
|
-
*/
|
|
36
|
-
private createObsidianSpecific;
|
|
37
|
-
/**
|
|
38
|
-
* Process Obsidian-specific markdown features
|
|
39
|
-
*/
|
|
40
|
-
private processObsidianFeatures;
|
|
41
|
-
/**
|
|
42
|
-
* Test the unified markdown processing
|
|
43
|
-
*/
|
|
44
|
-
private testMarkdownProcessing;
|
|
45
|
-
/**
|
|
46
|
-
* Create a new note with the processed content
|
|
47
|
-
*/
|
|
48
|
-
private createProcessedNote;
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Usage in other parts of your plugin
|
|
52
|
-
*/
|
|
53
|
-
export declare class MarkdownUtilities {
|
|
54
|
-
private markdown;
|
|
55
|
-
constructor(markdown: Markdown);
|
|
56
|
-
/**
|
|
57
|
-
* Process a file's content
|
|
58
|
-
*/
|
|
59
|
-
processFile(content: string, fileName: string): Promise<{
|
|
60
|
-
html: string;
|
|
61
|
-
headers: Array<{
|
|
62
|
-
name: string;
|
|
63
|
-
level: number;
|
|
64
|
-
}>;
|
|
65
|
-
tocHtml: string;
|
|
66
|
-
}>;
|
|
67
|
-
/**
|
|
68
|
-
* Extract just the headers from markdown
|
|
69
|
-
*/
|
|
70
|
-
extractHeaders(content: string): Promise<Array<{
|
|
71
|
-
name: string;
|
|
72
|
-
level: number;
|
|
73
|
-
}>>;
|
|
74
|
-
/**
|
|
75
|
-
* Generate table of contents
|
|
76
|
-
*/
|
|
77
|
-
generateTOC(content: string, startLevel?: number, endLevel?: number): Promise<string>;
|
|
78
|
-
}
|
|
79
|
-
//# sourceMappingURL=obsidian-example.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"obsidian-example.d.ts","sourceRoot":"","sources":["../../../../../internal/domain/markdown/examples/obsidian-example.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,MAAM,EAAgD,MAAM,UAAU,CAAC;AAChF,OAAO,EAIL,QAAQ,EAIT,MAAM,UAAU,CAAC;AAElB;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,MAAM;IAC/C,OAAO,CAAC,eAAe,CAAyB;IAE1C,MAAM;IAoBZ,QAAQ;IAIR;;;OAGG;IACH,OAAO,CAAC,wBAAwB;IAWhC;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IA+B3B;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAmB9B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAoC/B;;OAEG;YACW,sBAAsB;IA4FpC;;OAEG;YACW,mBAAmB;CAwBlC;AAED;;GAEG;AACH,qBAAa,iBAAiB;IAChB,OAAO,CAAC,QAAQ;gBAAR,QAAQ,EAAE,QAAQ;IAEtC;;OAEG;IACG,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;QAC5D,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAChD,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IA2BF;;OAEG;IACG,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAKtF;;OAEG;IACG,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,SAAI,EAAE,QAAQ,SAAI,GAAG,OAAO,CAAC,MAAM,CAAC;CAqBlF"}
|
|
@@ -1,302 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Example: Integrating Markdown Domain with Obsidian
|
|
4
|
-
*
|
|
5
|
-
* This docs shows how to integrate the TypeScript markdown domain
|
|
6
|
-
* with an Obsidian plugin, demonstrating different approaches.
|
|
7
|
-
*
|
|
8
|
-
* NOTE: This is an docs file for documentation purposes.
|
|
9
|
-
* It requires Obsidian types to be installed to compile properly.
|
|
10
|
-
* To use this in a real Obsidian plugin:
|
|
11
|
-
* 1. Install Obsidian types: npm install obsidian
|
|
12
|
-
* 2. Copy the relevant parts to your plugin
|
|
13
|
-
*/
|
|
14
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
exports.MarkdownUtilities = exports.ExampleMarkdownPlugin = void 0;
|
|
16
|
-
// @ts-nocheck - This is an docs file
|
|
17
|
-
const obsidian_1 = require("obsidian");
|
|
18
|
-
const index_1 = require("../index");
|
|
19
|
-
/**
|
|
20
|
-
* Example Obsidian Plugin that uses our unified markdown domain
|
|
21
|
-
*/
|
|
22
|
-
class ExampleMarkdownPlugin extends obsidian_1.Plugin {
|
|
23
|
-
constructor() {
|
|
24
|
-
super(...arguments);
|
|
25
|
-
this.unifiedMarkdown = null;
|
|
26
|
-
}
|
|
27
|
-
async onload() {
|
|
28
|
-
console.log('Loading Example Markdown Plugin...');
|
|
29
|
-
// Method 1: Simple render function (most common for Obsidian)
|
|
30
|
-
this.unifiedMarkdown = this.createWithRenderFunction();
|
|
31
|
-
// Method 2: Full processor object (more features)
|
|
32
|
-
// this.unifiedMarkdown = this.createWithProcessor();
|
|
33
|
-
// Method 3: Obsidian-specific factory (recommended)
|
|
34
|
-
// this.unifiedMarkdown = this.createObsidianSpecific();
|
|
35
|
-
// Add a command to test the markdown processing
|
|
36
|
-
this.addCommand({
|
|
37
|
-
id: 'test-unified-markdown',
|
|
38
|
-
name: 'Test Unified Markdown Processing',
|
|
39
|
-
callback: () => this.testMarkdownProcessing(),
|
|
40
|
-
});
|
|
41
|
-
}
|
|
42
|
-
onunload() {
|
|
43
|
-
console.log('Unloading Example Markdown Plugin...');
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* Method 1: Using simple render function
|
|
47
|
-
* This is the simplest approach when you only need rendering
|
|
48
|
-
*/
|
|
49
|
-
createWithRenderFunction() {
|
|
50
|
-
const renderFunc = (source) => {
|
|
51
|
-
// Use Obsidian's built-in markdown renderer
|
|
52
|
-
// Note: In a real plugin, you might need to handle this differently
|
|
53
|
-
// depending on your Obsidian API version
|
|
54
|
-
return this.app.renderer?.markdown?.render(source) || source;
|
|
55
|
-
};
|
|
56
|
-
return (0, index_1.createMarkdownWithRenderFunction)(renderFunc);
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* Method 2: Using external processor object
|
|
60
|
-
* This provides more flexibility and features
|
|
61
|
-
*/
|
|
62
|
-
createWithProcessor() {
|
|
63
|
-
const processor = {
|
|
64
|
-
render: (source) => {
|
|
65
|
-
// Enhanced rendering with Obsidian features
|
|
66
|
-
let html = this.app.renderer?.markdown?.render(source) || source;
|
|
67
|
-
// Add custom processing for Obsidian-specific syntax
|
|
68
|
-
html = this.processObsidianFeatures(html);
|
|
69
|
-
return html;
|
|
70
|
-
},
|
|
71
|
-
parse: (source) => {
|
|
72
|
-
// If you have access to parsing functionality
|
|
73
|
-
// This is optional but provides better token extraction
|
|
74
|
-
try {
|
|
75
|
-
return this.app.metadataCache?.getFileCache(source);
|
|
76
|
-
}
|
|
77
|
-
catch (error) {
|
|
78
|
-
console.warn('Failed to parse with Obsidian parser:', error);
|
|
79
|
-
return null;
|
|
80
|
-
}
|
|
81
|
-
},
|
|
82
|
-
metadata: {
|
|
83
|
-
name: 'Obsidian Enhanced',
|
|
84
|
-
version: this.manifest.version,
|
|
85
|
-
features: ['rendering', 'parsing', 'internal-links', 'tags', 'embeds'],
|
|
86
|
-
},
|
|
87
|
-
};
|
|
88
|
-
return (0, index_1.createMarkdownWithExternalProcessor)(processor);
|
|
89
|
-
}
|
|
90
|
-
/**
|
|
91
|
-
* Method 3: Obsidian-specific factory
|
|
92
|
-
* This is the recommended approach for Obsidian plugins
|
|
93
|
-
*/
|
|
94
|
-
createObsidianSpecific() {
|
|
95
|
-
const renderFunc = (source) => {
|
|
96
|
-
let html = this.app.renderer?.markdown?.render(source) || source;
|
|
97
|
-
// Process Obsidian-specific features
|
|
98
|
-
html = this.processObsidianFeatures(html);
|
|
99
|
-
return html;
|
|
100
|
-
};
|
|
101
|
-
return (0, index_1.createMarkdownForObsidian)(renderFunc, {
|
|
102
|
-
pluginName: this.manifest.name,
|
|
103
|
-
version: this.manifest.version
|
|
104
|
-
});
|
|
105
|
-
}
|
|
106
|
-
/**
|
|
107
|
-
* Process Obsidian-specific markdown features
|
|
108
|
-
*/
|
|
109
|
-
processObsidianFeatures(html) {
|
|
110
|
-
// Handle internal links [[Link]]
|
|
111
|
-
html = html.replace(/\[\[([^\]]+)\]\]/g, (match, linkText) => {
|
|
112
|
-
const [fileName, displayText] = linkText.split('|');
|
|
113
|
-
const display = displayText || fileName;
|
|
114
|
-
return `<a href="obsidian://open?vault=${this.app.vault.getName()}&file=${encodeURIComponent(fileName)}" class="internal-link">${display}</a>`;
|
|
115
|
-
});
|
|
116
|
-
// Handle tags #tag
|
|
117
|
-
html = html.replace(/#([a-zA-Z0-9_/-]+)/g, '<span class="tag" data-tag-name="$1">#$1</span>');
|
|
118
|
-
// Handle highlights ==text==
|
|
119
|
-
html = html.replace(/==([^=]+)==/g, '<mark>$1</mark>');
|
|
120
|
-
// Handle embeds ![[File]]
|
|
121
|
-
html = html.replace(/!\[\[([^\]]+)\]\]/g, (match, fileName) => {
|
|
122
|
-
return `<div class="embedded-file" data-file="${fileName}">
|
|
123
|
-
<span class="embed-title">${fileName}</span>
|
|
124
|
-
</div>`;
|
|
125
|
-
});
|
|
126
|
-
return html;
|
|
127
|
-
}
|
|
128
|
-
/**
|
|
129
|
-
* Test the unified markdown processing
|
|
130
|
-
*/
|
|
131
|
-
async testMarkdownProcessing() {
|
|
132
|
-
if (!this.unifiedMarkdown) {
|
|
133
|
-
console.error('Unified markdown not initialized');
|
|
134
|
-
return;
|
|
135
|
-
}
|
|
136
|
-
const testMarkdown = `# Test Document
|
|
137
|
-
|
|
138
|
-
This is a test of the unified markdown domain in Obsidian.
|
|
139
|
-
|
|
140
|
-
## Features
|
|
141
|
-
|
|
142
|
-
- **Bold text**
|
|
143
|
-
- *Italic text*
|
|
144
|
-
- ==Highlighted text==
|
|
145
|
-
- [[Internal Link]]
|
|
146
|
-
- [[Internal Link|Custom Display]]
|
|
147
|
-
- #tag #nested/tag
|
|
148
|
-
|
|
149
|
-
### Code Example
|
|
150
|
-
|
|
151
|
-
\`\`\`typescript
|
|
152
|
-
const example = "This is code";
|
|
153
|
-
console.log(example);
|
|
154
|
-
\`\`\`
|
|
155
|
-
|
|
156
|
-
### Embedded Content
|
|
157
|
-
|
|
158
|
-
![[Some Image.png]]
|
|
159
|
-
|
|
160
|
-
> This is a blockquote
|
|
161
|
-
>
|
|
162
|
-
> With multiple lines
|
|
163
|
-
|
|
164
|
-
## Table Example
|
|
165
|
-
|
|
166
|
-
| Column 1 | Column 2 |
|
|
167
|
-
|----------|----------|
|
|
168
|
-
| Cell 1 | Cell 2 |
|
|
169
|
-
| Cell 3 | Cell 4 |
|
|
170
|
-
`;
|
|
171
|
-
try {
|
|
172
|
-
// Convert string to bytes (required by our domain interface)
|
|
173
|
-
const encoder = new TextEncoder();
|
|
174
|
-
const srcBytes = encoder.encode(testMarkdown);
|
|
175
|
-
// Create render context
|
|
176
|
-
const rctx = {
|
|
177
|
-
ctx: {},
|
|
178
|
-
src: srcBytes,
|
|
179
|
-
renderTOC: true,
|
|
180
|
-
getRenderer: index_1.DefaultRendererFunc,
|
|
181
|
-
};
|
|
182
|
-
// Create document context
|
|
183
|
-
const dctx = {
|
|
184
|
-
document: null,
|
|
185
|
-
documentID: 'test-document',
|
|
186
|
-
documentName: 'Test Document.md',
|
|
187
|
-
filename: 'Test Document.md',
|
|
188
|
-
};
|
|
189
|
-
// Process the markdown
|
|
190
|
-
const result = await this.unifiedMarkdown.render(rctx, dctx);
|
|
191
|
-
// Get the results
|
|
192
|
-
const html = new TextDecoder().decode(result.bytes());
|
|
193
|
-
const headers = result.headers();
|
|
194
|
-
const toc = result.tableOfContents();
|
|
195
|
-
// Log results
|
|
196
|
-
console.log('=== Processed HTML ===');
|
|
197
|
-
console.log(html);
|
|
198
|
-
console.log('=== Headers ===');
|
|
199
|
-
headers.forEach(header => {
|
|
200
|
-
console.log(`Level ${header.level()}: ${header.name()}`);
|
|
201
|
-
});
|
|
202
|
-
console.log('=== Table of Contents ===');
|
|
203
|
-
const tocHtml = toc.toHTML(1, 6, false);
|
|
204
|
-
console.log(tocHtml);
|
|
205
|
-
// Optionally, create a new note with the processed content
|
|
206
|
-
await this.createProcessedNote(html, tocHtml);
|
|
207
|
-
}
|
|
208
|
-
catch (error) {
|
|
209
|
-
console.error('Error processing markdown:', error);
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
/**
|
|
213
|
-
* Create a new note with the processed content
|
|
214
|
-
*/
|
|
215
|
-
async createProcessedNote(html, tocHtml) {
|
|
216
|
-
const fileName = `Processed Markdown ${new Date().toISOString().slice(0, 10)}.md`;
|
|
217
|
-
const content = `# Processed Markdown Result
|
|
218
|
-
|
|
219
|
-
## Table of Contents
|
|
220
|
-
${tocHtml}
|
|
221
|
-
|
|
222
|
-
## Processed HTML
|
|
223
|
-
\`\`\`html
|
|
224
|
-
${html}
|
|
225
|
-
\`\`\`
|
|
226
|
-
|
|
227
|
-
---
|
|
228
|
-
*Generated by Unified Markdown Domain on ${new Date().toISOString()}*
|
|
229
|
-
`;
|
|
230
|
-
try {
|
|
231
|
-
await this.app.vault.create(fileName, content);
|
|
232
|
-
console.log(`Created note: ${fileName}`);
|
|
233
|
-
}
|
|
234
|
-
catch (error) {
|
|
235
|
-
console.error('Error creating processed note:', error);
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
exports.ExampleMarkdownPlugin = ExampleMarkdownPlugin;
|
|
240
|
-
/**
|
|
241
|
-
* Usage in other parts of your plugin
|
|
242
|
-
*/
|
|
243
|
-
class MarkdownUtilities {
|
|
244
|
-
constructor(markdown) {
|
|
245
|
-
this.markdown = markdown;
|
|
246
|
-
}
|
|
247
|
-
/**
|
|
248
|
-
* Process a file's content
|
|
249
|
-
*/
|
|
250
|
-
async processFile(content, fileName) {
|
|
251
|
-
const encoder = new TextEncoder();
|
|
252
|
-
const srcBytes = encoder.encode(content);
|
|
253
|
-
const rctx = {
|
|
254
|
-
ctx: {},
|
|
255
|
-
src: srcBytes,
|
|
256
|
-
renderTOC: true,
|
|
257
|
-
getRenderer: index_1.DefaultRendererFunc,
|
|
258
|
-
};
|
|
259
|
-
const dctx = {
|
|
260
|
-
document: null,
|
|
261
|
-
documentID: fileName,
|
|
262
|
-
documentName: fileName,
|
|
263
|
-
filename: fileName,
|
|
264
|
-
};
|
|
265
|
-
const result = await this.markdown.render(rctx, dctx);
|
|
266
|
-
return {
|
|
267
|
-
html: new TextDecoder().decode(result.bytes()),
|
|
268
|
-
headers: result.headers().map(h => ({ name: h.name(), level: h.level() })),
|
|
269
|
-
tocHtml: result.tableOfContents().toHTML(1, 6, false),
|
|
270
|
-
};
|
|
271
|
-
}
|
|
272
|
-
/**
|
|
273
|
-
* Extract just the headers from markdown
|
|
274
|
-
*/
|
|
275
|
-
async extractHeaders(content) {
|
|
276
|
-
const processed = await this.processFile(content, 'temp');
|
|
277
|
-
return processed.headers;
|
|
278
|
-
}
|
|
279
|
-
/**
|
|
280
|
-
* Generate table of contents
|
|
281
|
-
*/
|
|
282
|
-
async generateTOC(content, startLevel = 1, endLevel = 6) {
|
|
283
|
-
const encoder = new TextEncoder();
|
|
284
|
-
const srcBytes = encoder.encode(content);
|
|
285
|
-
const rctx = {
|
|
286
|
-
ctx: {},
|
|
287
|
-
src: srcBytes,
|
|
288
|
-
renderTOC: true,
|
|
289
|
-
getRenderer: index_1.DefaultRendererFunc,
|
|
290
|
-
};
|
|
291
|
-
const dctx = {
|
|
292
|
-
document: null,
|
|
293
|
-
documentID: 'toc-generation',
|
|
294
|
-
documentName: 'toc-generation',
|
|
295
|
-
filename: 'toc-generation',
|
|
296
|
-
};
|
|
297
|
-
const result = await this.markdown.render(rctx, dctx);
|
|
298
|
-
return result.tableOfContents().toHTML(startLevel, endLevel, false);
|
|
299
|
-
}
|
|
300
|
-
}
|
|
301
|
-
exports.MarkdownUtilities = MarkdownUtilities;
|
|
302
|
-
//# sourceMappingURL=obsidian-example.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"obsidian-example.js","sourceRoot":"","sources":["../../../../../internal/domain/markdown/examples/obsidian-example.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;;AAEH,qCAAqC;AACrC,uCAAgF;AAChF,oCAQkB;AAElB;;GAEG;AACH,MAAa,qBAAsB,SAAQ,iBAAM;IAAjD;;QACU,oBAAe,GAAoB,IAAI,CAAC;IAoQlD,CAAC;IAlQC,KAAK,CAAC,MAAM;QACV,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;QAElD,8DAA8D;QAC9D,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAEvD,kDAAkD;QAClD,qDAAqD;QAErD,oDAAoD;QACpD,wDAAwD;QAExD,gDAAgD;QAChD,IAAI,CAAC,UAAU,CAAC;YACd,EAAE,EAAE,uBAAuB;YAC3B,IAAI,EAAE,kCAAkC;YACxC,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,sBAAsB,EAAE;SAC9C,CAAC,CAAC;IACL,CAAC;IAED,QAAQ;QACN,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;IACtD,CAAC;IAED;;;OAGG;IACK,wBAAwB;QAC9B,MAAM,UAAU,GAAG,CAAC,MAAc,EAAE,EAAE;YACpC,4CAA4C;YAC5C,oEAAoE;YACpE,yCAAyC;YACzC,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC;QAC/D,CAAC,CAAC;QAEF,OAAO,IAAA,wCAAgC,EAAC,UAAU,CAAC,CAAC;IACtD,CAAC;IAED;;;OAGG;IACK,mBAAmB;QACzB,MAAM,SAAS,GAAG;YAChB,MAAM,EAAE,CAAC,MAAc,EAAE,EAAE;gBACzB,4CAA4C;gBAC5C,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC;gBAEjE,qDAAqD;gBACrD,IAAI,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;gBAE1C,OAAO,IAAI,CAAC;YACd,CAAC;YACD,KAAK,EAAE,CAAC,MAAc,EAAE,EAAE;gBACxB,8CAA8C;gBAC9C,wDAAwD;gBACxD,IAAI,CAAC;oBACH,OAAO,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;gBACtD,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,IAAI,CAAC,uCAAuC,EAAE,KAAK,CAAC,CAAC;oBAC7D,OAAO,IAAI,CAAC;gBACd,CAAC;YACH,CAAC;YACD,QAAQ,EAAE;gBACR,IAAI,EAAE,mBAAmB;gBACzB,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO;gBAC9B,QAAQ,EAAE,CAAC,WAAW,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,EAAE,QAAQ,CAAC;aACvE;SACF,CAAC;QAEF,OAAO,IAAA,2CAAmC,EAAC,SAAS,CAAC,CAAC;IACxD,CAAC;IAED;;;OAGG;IACK,sBAAsB;QAC5B,MAAM,UAAU,GAAG,CAAC,MAAc,EAAE,EAAE;YACpC,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC;YAEjE,qCAAqC;YACrC,IAAI,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;YAE1C,OAAO,IAAI,CAAC;QACd,CAAC,CAAC;QAEF,OAAO,IAAA,iCAAyB,EAC9B,UAAU,EACV;YACE,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI;YAC9B,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO;SAC/B,CACF,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,uBAAuB,CAAC,IAAY;QAC1C,iCAAiC;QACjC,IAAI,GAAG,IAAI,CAAC,OAAO,CACjB,mBAAmB,EACnB,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;YAClB,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACpD,MAAM,OAAO,GAAG,WAAW,IAAI,QAAQ,CAAC;YACxC,OAAO,kCAAkC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,SAAS,kBAAkB,CAAC,QAAQ,CAAC,2BAA2B,OAAO,MAAM,CAAC;QACjJ,CAAC,CACF,CAAC;QAEF,mBAAmB;QACnB,IAAI,GAAG,IAAI,CAAC,OAAO,CACjB,qBAAqB,EACrB,iDAAiD,CAClD,CAAC;QAEF,6BAA6B;QAC7B,IAAI,GAAG,IAAI,CAAC,OAAO,CACjB,cAAc,EACd,iBAAiB,CAClB,CAAC;QAEF,0BAA0B;QAC1B,IAAI,GAAG,IAAI,CAAC,OAAO,CACjB,oBAAoB,EACpB,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;YAClB,OAAO,yCAAyC,QAAQ;sCAC1B,QAAQ;eAC/B,CAAC;QACV,CAAC,CACF,CAAC;QAEF,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,sBAAsB;QAClC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YAC1B,OAAO,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;YAClD,OAAO;QACT,CAAC;QAED,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkCxB,CAAC;QAEE,IAAI,CAAC;YACH,6DAA6D;YAC7D,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;YAClC,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YAE9C,wBAAwB;YACxB,MAAM,IAAI,GAAkB;gBAC1B,GAAG,EAAE,EAAE;gBACP,GAAG,EAAE,QAAQ;gBACb,SAAS,EAAE,IAAI;gBACf,WAAW,EAAE,2BAAmB;aACjC,CAAC;YAEF,0BAA0B;YAC1B,MAAM,IAAI,GAAoB;gBAC5B,QAAQ,EAAE,IAAI;gBACd,UAAU,EAAE,eAAe;gBAC3B,YAAY,EAAE,kBAAkB;gBAChC,QAAQ,EAAE,kBAAkB;aAC7B,CAAC;YAEF,uBAAuB;YACvB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAE7D,kBAAkB;YAClB,MAAM,IAAI,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YACtD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;YACjC,MAAM,GAAG,GAAG,MAAM,CAAC,eAAe,EAAE,CAAC;YAErC,cAAc;YACd,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;YACtC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAElB,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;YAC/B,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;gBACvB,OAAO,CAAC,GAAG,CAAC,SAAS,MAAM,CAAC,KAAK,EAAE,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC3D,CAAC,CAAC,CAAC;YAEH,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;YACzC,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;YACxC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAErB,2DAA2D;YAC3D,MAAM,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAEhD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,mBAAmB,CAAC,IAAY,EAAE,OAAe;QAC7D,MAAM,QAAQ,GAAG,sBAAsB,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC;QAElF,MAAM,OAAO,GAAG;;;EAGlB,OAAO;;;;EAIP,IAAI;;;;2CAIqC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;CAClE,CAAC;QAEE,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC/C,OAAO,CAAC,GAAG,CAAC,iBAAiB,QAAQ,EAAE,CAAC,CAAC;QAC3C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;CACF;AArQD,sDAqQC;AAED;;GAEG;AACH,MAAa,iBAAiB;IAC5B,YAAoB,QAAkB;QAAlB,aAAQ,GAAR,QAAQ,CAAU;IAAG,CAAC;IAE1C;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,OAAe,EAAE,QAAgB;QAKjD,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAEzC,MAAM,IAAI,GAAkB;YAC1B,GAAG,EAAE,EAAE;YACP,GAAG,EAAE,QAAQ;YACb,SAAS,EAAE,IAAI;YACf,WAAW,EAAE,2BAAmB;SACjC,CAAC;QAEF,MAAM,IAAI,GAAoB;YAC5B,QAAQ,EAAE,IAAI;YACd,UAAU,EAAE,QAAQ;YACpB,YAAY,EAAE,QAAQ;YACtB,QAAQ,EAAE,QAAQ;SACnB,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAEtD,OAAO;YACL,IAAI,EAAE,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAC9C,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAC1E,OAAO,EAAE,MAAM,CAAC,eAAe,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;SACtD,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAAC,OAAe;QAClC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC1D,OAAO,SAAS,CAAC,OAAO,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,OAAe,EAAE,UAAU,GAAG,CAAC,EAAE,QAAQ,GAAG,CAAC;QAC7D,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAEzC,MAAM,IAAI,GAAkB;YAC1B,GAAG,EAAE,EAAE;YACP,GAAG,EAAE,QAAQ;YACb,SAAS,EAAE,IAAI;YACf,WAAW,EAAE,2BAAmB;SACjC,CAAC;QAEF,MAAM,IAAI,GAAoB;YAC5B,QAAQ,EAAE,IAAI;YACd,UAAU,EAAE,gBAAgB;YAC5B,YAAY,EAAE,gBAAgB;YAC9B,QAAQ,EAAE,gBAAgB;SAC3B,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACtD,OAAO,MAAM,CAAC,eAAe,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;IACtE,CAAC;CACF;AArED,8CAqEC"}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Usage Example:
|
|
3
|
-
*
|
|
4
|
-
* const markdown = new MarkdownImpl(renderer, highlighter);
|
|
5
|
-
*
|
|
6
|
-
* // Old way (deprecated):
|
|
7
|
-
* const parseResult = await markdown.parseContent(source);
|
|
8
|
-
* // Caller needs to know about parseResult structure and handle shortcodes manually
|
|
9
|
-
*
|
|
10
|
-
* // New way (recommended):
|
|
11
|
-
* const result = await markdown.parseAndRenderContent(source, {
|
|
12
|
-
* shortcodeRenderer: async (shortcode) => {
|
|
13
|
-
* // Custom shortcode rendering logic
|
|
14
|
-
* switch (shortcode.name) {
|
|
15
|
-
* case 'video':
|
|
16
|
-
* return `<video src="${shortcode.params.src}"></video>`;
|
|
17
|
-
* case 'button':
|
|
18
|
-
* return `<button class="${shortcode.params.class}">${shortcode.inner}</button>`;
|
|
19
|
-
* default:
|
|
20
|
-
* return `<!-- Unknown shortcode: ${shortcode.name} -->`;
|
|
21
|
-
* }
|
|
22
|
-
* },
|
|
23
|
-
* maxSummaryLength: 200, // Use Content.getSummary() with max length
|
|
24
|
-
* wordsPerMinute: 250 // Use Content.getReadingTime() with custom WPM
|
|
25
|
-
* });
|
|
26
|
-
*
|
|
27
|
-
* // Clean interface - caller only needs:
|
|
28
|
-
* // result.frontMatter - Record<string, any>
|
|
29
|
-
* // result.renderedContent - Final HTML string
|
|
30
|
-
* // result.summary, result.wordCount, result.readingTime
|
|
31
|
-
*
|
|
32
|
-
* // All content processing is now handled by Content class:
|
|
33
|
-
* // - content.renderedContentAsync() for shortcode rendering
|
|
34
|
-
* // - content.getSummary() for summary extraction
|
|
35
|
-
* // - content.getWordCount() for word counting
|
|
36
|
-
* // - content.getReadingTime() for reading time calculation
|
|
37
|
-
*/
|
|
38
|
-
/**
|
|
39
|
-
* Simple test function to validate the new interface
|
|
40
|
-
* @internal
|
|
41
|
-
*/
|
|
42
|
-
export declare function testParseAndRenderContent(): Promise<import("../../../domain/markdown").ContentResult>;
|
|
43
|
-
//# sourceMappingURL=shortcode.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"shortcode.d.ts","sourceRoot":"","sources":["../../../../../internal/domain/markdown/examples/shortcode.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAIH;;;GAGG;AACH,wBAAsB,yBAAyB,+DA0D9C"}
|
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Usage Example:
|
|
4
|
-
*
|
|
5
|
-
* const markdown = new MarkdownImpl(renderer, highlighter);
|
|
6
|
-
*
|
|
7
|
-
* // Old way (deprecated):
|
|
8
|
-
* const parseResult = await markdown.parseContent(source);
|
|
9
|
-
* // Caller needs to know about parseResult structure and handle shortcodes manually
|
|
10
|
-
*
|
|
11
|
-
* // New way (recommended):
|
|
12
|
-
* const result = await markdown.parseAndRenderContent(source, {
|
|
13
|
-
* shortcodeRenderer: async (shortcode) => {
|
|
14
|
-
* // Custom shortcode rendering logic
|
|
15
|
-
* switch (shortcode.name) {
|
|
16
|
-
* case 'video':
|
|
17
|
-
* return `<video src="${shortcode.params.src}"></video>`;
|
|
18
|
-
* case 'button':
|
|
19
|
-
* return `<button class="${shortcode.params.class}">${shortcode.inner}</button>`;
|
|
20
|
-
* default:
|
|
21
|
-
* return `<!-- Unknown shortcode: ${shortcode.name} -->`;
|
|
22
|
-
* }
|
|
23
|
-
* },
|
|
24
|
-
* maxSummaryLength: 200, // Use Content.getSummary() with max length
|
|
25
|
-
* wordsPerMinute: 250 // Use Content.getReadingTime() with custom WPM
|
|
26
|
-
* });
|
|
27
|
-
*
|
|
28
|
-
* // Clean interface - caller only needs:
|
|
29
|
-
* // result.frontMatter - Record<string, any>
|
|
30
|
-
* // result.renderedContent - Final HTML string
|
|
31
|
-
* // result.summary, result.wordCount, result.readingTime
|
|
32
|
-
*
|
|
33
|
-
* // All content processing is now handled by Content class:
|
|
34
|
-
* // - content.renderedContentAsync() for shortcode rendering
|
|
35
|
-
* // - content.getSummary() for summary extraction
|
|
36
|
-
* // - content.getWordCount() for word counting
|
|
37
|
-
* // - content.getReadingTime() for reading time calculation
|
|
38
|
-
*/
|
|
39
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
-
exports.testParseAndRenderContent = testParseAndRenderContent;
|
|
41
|
-
const markdown_1 = require("../../../domain/markdown");
|
|
42
|
-
/**
|
|
43
|
-
* Simple test function to validate the new interface
|
|
44
|
-
* @internal
|
|
45
|
-
*/
|
|
46
|
-
async function testParseAndRenderContent() {
|
|
47
|
-
// This would typically be imported from a test file
|
|
48
|
-
const testSource = new TextEncoder().encode(`---
|
|
49
|
-
title: Test Document
|
|
50
|
-
author: John Doe
|
|
51
|
-
---
|
|
52
|
-
|
|
53
|
-
# Hello World
|
|
54
|
-
|
|
55
|
-
This is a test document with {{< video src="test.mp4" >}} shortcode.
|
|
56
|
-
|
|
57
|
-
<!-- more -->
|
|
58
|
-
|
|
59
|
-
More content here with {{< button class="primary" >}}Click me{{< /button >}}.
|
|
60
|
-
`);
|
|
61
|
-
// Mock renderer and highlighter for testing
|
|
62
|
-
const mockRenderer = {
|
|
63
|
-
render: async (source) => `<div>${source}</div>`,
|
|
64
|
-
parse: async (source) => ({ type: 'root', children: [] })
|
|
65
|
-
};
|
|
66
|
-
const mockHighlighter = {
|
|
67
|
-
highlight: async (code, lang) => code,
|
|
68
|
-
highlightCodeBlock: async (ctx) => ({ wrapped: () => '', inner: () => '' }),
|
|
69
|
-
renderCodeblock: async () => { },
|
|
70
|
-
isDefaultCodeBlockRenderer: () => true
|
|
71
|
-
};
|
|
72
|
-
const markdown = new markdown_1.MarkdownImpl(mockRenderer, mockHighlighter);
|
|
73
|
-
const result = await markdown.parseAndRenderContent(testSource, {
|
|
74
|
-
shortcodeRenderer: async (shortcode) => {
|
|
75
|
-
switch (shortcode.name) {
|
|
76
|
-
case 'video':
|
|
77
|
-
const videoParams = shortcode.params;
|
|
78
|
-
return `<video src="${videoParams.src}"></video>`;
|
|
79
|
-
case 'button':
|
|
80
|
-
const buttonParams = shortcode.params;
|
|
81
|
-
return `<button class="${buttonParams.class}">${shortcode.inner}</button>`;
|
|
82
|
-
default:
|
|
83
|
-
return `<!-- Unknown shortcode: ${shortcode.name} -->`;
|
|
84
|
-
}
|
|
85
|
-
},
|
|
86
|
-
maxSummaryLength: 100,
|
|
87
|
-
wordsPerMinute: 250
|
|
88
|
-
});
|
|
89
|
-
console.log('Test Result:', {
|
|
90
|
-
hasFrontMatter: !!result.frontMatter,
|
|
91
|
-
frontMatterTitle: result.frontMatter?.title,
|
|
92
|
-
hasRenderedContent: !!result.renderedContent,
|
|
93
|
-
hasSummary: !!result.summary,
|
|
94
|
-
wordCount: result.wordCount,
|
|
95
|
-
readingTime: result.readingTime
|
|
96
|
-
});
|
|
97
|
-
return result;
|
|
98
|
-
}
|
|
99
|
-
//# sourceMappingURL=shortcode.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"shortcode.js","sourceRoot":"","sources":["../../../../../internal/domain/markdown/examples/shortcode.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;;AAQH,8DA0DC;AAhED,wDAAuD;AAEvD;;;GAGG;AACI,KAAK,UAAU,yBAAyB;IAC3C,oDAAoD;IACpD,MAAM,UAAU,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC;;;;;;;;;;;;CAY/C,CAAC,CAAC;IAEC,4CAA4C;IAC5C,MAAM,YAAY,GAAG;QACjB,MAAM,EAAE,KAAK,EAAE,MAAc,EAAE,EAAE,CAAC,QAAQ,MAAM,QAAQ;QACxD,KAAK,EAAE,KAAK,EAAE,MAAc,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;KACpE,CAAC;IAEF,MAAM,eAAe,GAAG;QACpB,SAAS,EAAE,KAAK,EAAE,IAAY,EAAE,IAAY,EAAE,EAAE,CAAC,IAAI;QACrD,kBAAkB,EAAE,KAAK,EAAE,GAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAChF,eAAe,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;QAC/B,0BAA0B,EAAE,GAAG,EAAE,CAAC,IAAI;KACzC,CAAC;IAEF,MAAM,QAAQ,GAAG,IAAI,uBAAY,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;IAEjE,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,qBAAqB,CAAC,UAAU,EAAE;QAC5D,iBAAiB,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;YACnC,QAAQ,SAAS,CAAC,IAAI,EAAE,CAAC;gBACrB,KAAK,OAAO;oBACR,MAAM,WAAW,GAAG,SAAS,CAAC,MAA6B,CAAC;oBAC5D,OAAO,eAAe,WAAW,CAAC,GAAG,YAAY,CAAC;gBACtD,KAAK,QAAQ;oBACT,MAAM,YAAY,GAAG,SAAS,CAAC,MAA6B,CAAC;oBAC7D,OAAO,kBAAkB,YAAY,CAAC,KAAK,KAAK,SAAS,CAAC,KAAK,WAAW,CAAC;gBAC/E;oBACI,OAAO,2BAA2B,SAAS,CAAC,IAAI,MAAM,CAAC;YAC/D,CAAC;QACL,CAAC;QACD,gBAAgB,EAAE,GAAG;QACrB,cAAc,EAAE,GAAG;KACtB,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE;QACxB,cAAc,EAAE,CAAC,CAAC,MAAM,CAAC,WAAW;QACpC,gBAAgB,EAAE,MAAM,CAAC,WAAW,EAAE,KAAK;QAC3C,kBAAkB,EAAE,CAAC,CAAC,MAAM,CAAC,eAAe;QAC5C,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO;QAC5B,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,WAAW,EAAE,MAAM,CAAC,WAAW;KAClC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAClB,CAAC"}
|
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
import { PromptCollector, PromptFs, LevelLogger } from '../type';
|
|
2
|
-
import { File } from '../vo/file';
|
|
3
|
-
/**
|
|
4
|
-
* Collector entity for collecting prompt files
|
|
5
|
-
* TypeScript version of Go's Collector struct
|
|
6
|
-
*/
|
|
7
|
-
export declare class Collector implements PromptCollector {
|
|
8
|
-
private fs;
|
|
9
|
-
private log;
|
|
10
|
-
private files;
|
|
11
|
-
constructor(fs: PromptFs, log: LevelLogger);
|
|
12
|
-
/**
|
|
13
|
-
* Collect files from filesystem
|
|
14
|
-
*/
|
|
15
|
-
collect(): Promise<void>;
|
|
16
|
-
/**
|
|
17
|
-
* Collect files from a directory
|
|
18
|
-
*/
|
|
19
|
-
private collectDir;
|
|
20
|
-
/**
|
|
21
|
-
* Handle a single file
|
|
22
|
-
*/
|
|
23
|
-
handleFile(file: File): Promise<void>;
|
|
24
|
-
/**
|
|
25
|
-
* Get collected files
|
|
26
|
-
*/
|
|
27
|
-
getFiles(): Map<string, File>;
|
|
28
|
-
/**
|
|
29
|
-
* Get files by pattern
|
|
30
|
-
*/
|
|
31
|
-
getFilesByPattern(pattern: RegExp): Map<string, File>;
|
|
32
|
-
/**
|
|
33
|
-
* Get files by extension
|
|
34
|
-
*/
|
|
35
|
-
getFilesByExtension(extension: string): Map<string, File>;
|
|
36
|
-
/**
|
|
37
|
-
* Clear collected files
|
|
38
|
-
*/
|
|
39
|
-
clear(): void;
|
|
40
|
-
/**
|
|
41
|
-
* Get collection statistics
|
|
42
|
-
*/
|
|
43
|
-
getStats(): {
|
|
44
|
-
totalFiles: number;
|
|
45
|
-
totalSize: number;
|
|
46
|
-
fileTypes: Map<string, number>;
|
|
47
|
-
largestFile: {
|
|
48
|
-
name: string;
|
|
49
|
-
size: number;
|
|
50
|
-
} | null;
|
|
51
|
-
};
|
|
52
|
-
/**
|
|
53
|
-
* Validate collected files
|
|
54
|
-
*/
|
|
55
|
-
validateFiles(): Promise<{
|
|
56
|
-
valid: number;
|
|
57
|
-
invalid: number;
|
|
58
|
-
errors: Array<{
|
|
59
|
-
path: string;
|
|
60
|
-
error: string;
|
|
61
|
-
}>;
|
|
62
|
-
}>;
|
|
63
|
-
/**
|
|
64
|
-
* Reload collection
|
|
65
|
-
*/
|
|
66
|
-
reload(): Promise<void>;
|
|
67
|
-
/**
|
|
68
|
-
* Check if collection is empty
|
|
69
|
-
*/
|
|
70
|
-
isEmpty(): boolean;
|
|
71
|
-
/**
|
|
72
|
-
* Get file count
|
|
73
|
-
*/
|
|
74
|
-
size(): number;
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* Create a new Collector instance
|
|
78
|
-
*/
|
|
79
|
-
export declare function newCollector(fs: PromptFs, log: LevelLogger): Collector;
|
|
80
|
-
/**
|
|
81
|
-
* Create a mock Collector for testing
|
|
82
|
-
*/
|
|
83
|
-
export declare function createMockCollector(files: Array<{
|
|
84
|
-
name: string;
|
|
85
|
-
content: string;
|
|
86
|
-
modTime?: Date;
|
|
87
|
-
}>, log?: LevelLogger): Collector;
|
|
88
|
-
//# sourceMappingURL=collector.d.ts.map
|