@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.
Files changed (162) hide show
  1. package/README.md +4 -0
  2. package/dist/internal/application/incremental-build-coordinator.d.ts +69 -0
  3. package/dist/internal/application/incremental-build-coordinator.d.ts.map +1 -0
  4. package/dist/internal/application/incremental-build-coordinator.js +184 -0
  5. package/dist/internal/application/incremental-build-coordinator.js.map +1 -0
  6. package/dist/internal/application/incremental-ssg.d.ts +8 -0
  7. package/dist/internal/application/incremental-ssg.d.ts.map +1 -0
  8. package/dist/internal/application/incremental-ssg.js +23 -0
  9. package/dist/internal/application/incremental-ssg.js.map +1 -0
  10. package/dist/internal/application/ssg.d.ts +19 -1
  11. package/dist/internal/application/ssg.d.ts.map +1 -1
  12. package/dist/internal/application/ssg.js +29 -4
  13. package/dist/internal/application/ssg.js.map +1 -1
  14. package/dist/internal/application/test-incremental-ssg.d.ts +9 -0
  15. package/dist/internal/application/test-incremental-ssg.d.ts.map +1 -0
  16. package/dist/internal/application/test-incremental-ssg.js +80 -0
  17. package/dist/internal/application/test-incremental-ssg.js.map +1 -0
  18. package/dist/internal/application/test-ssg.d.ts.map +1 -1
  19. package/dist/internal/application/test-ssg.js +1 -1
  20. package/dist/internal/application/test-ssg.js.map +1 -1
  21. package/dist/internal/domain/config/entity/dir.d.ts +3 -2
  22. package/dist/internal/domain/config/entity/dir.d.ts.map +1 -1
  23. package/dist/internal/domain/config/entity/dir.js +5 -4
  24. package/dist/internal/domain/config/entity/dir.js.map +1 -1
  25. package/dist/internal/domain/config/factory/config.d.ts.map +1 -1
  26. package/dist/internal/domain/config/factory/config.js +5 -2
  27. package/dist/internal/domain/config/factory/config.js.map +1 -1
  28. package/dist/internal/domain/content/entity/content.d.ts +6 -2
  29. package/dist/internal/domain/content/entity/content.d.ts.map +1 -1
  30. package/dist/internal/domain/content/entity/content.js +51 -16
  31. package/dist/internal/domain/content/entity/content.js.map +1 -1
  32. package/dist/internal/domain/content/entity/pagebuilder.d.ts.map +1 -1
  33. package/dist/internal/domain/content/entity/pagebuilder.js +5 -1
  34. package/dist/internal/domain/content/entity/pagebuilder.js.map +1 -1
  35. package/dist/internal/domain/content/entity/pagecollector.d.ts.map +1 -1
  36. package/dist/internal/domain/content/entity/pagecollector.js +10 -8
  37. package/dist/internal/domain/content/entity/pagecollector.js.map +1 -1
  38. package/dist/internal/domain/content/entity/pagesource.d.ts.map +1 -1
  39. package/dist/internal/domain/content/entity/pagesource.js +1 -2
  40. package/dist/internal/domain/content/entity/pagesource.js.map +1 -1
  41. package/dist/internal/domain/content/type.d.ts +3 -0
  42. package/dist/internal/domain/content/type.d.ts.map +1 -1
  43. package/dist/internal/domain/content/type.js.map +1 -1
  44. package/dist/internal/domain/content/vo/identity.d.ts +4 -0
  45. package/dist/internal/domain/content/vo/identity.d.ts.map +1 -1
  46. package/dist/internal/domain/content/vo/identity.js +17 -0
  47. package/dist/internal/domain/content/vo/identity.js.map +1 -1
  48. package/dist/internal/domain/fs/entity/basefs.d.ts.map +1 -1
  49. package/dist/internal/domain/fs/entity/basefs.js +21 -9
  50. package/dist/internal/domain/fs/entity/basefs.js.map +1 -1
  51. package/dist/internal/domain/fs/entity/fs.d.ts +1 -0
  52. package/dist/internal/domain/fs/entity/fs.d.ts.map +1 -1
  53. package/dist/internal/domain/fs/entity/fs.js +4 -0
  54. package/dist/internal/domain/fs/entity/fs.js.map +1 -1
  55. package/dist/internal/domain/fs/factory/fs.d.ts +1 -0
  56. package/dist/internal/domain/fs/factory/fs.d.ts.map +1 -1
  57. package/dist/internal/domain/fs/factory/fs.js.map +1 -1
  58. package/dist/internal/domain/fs/vo/file.d.ts +1 -0
  59. package/dist/internal/domain/fs/vo/file.d.ts.map +1 -1
  60. package/dist/internal/domain/fs/vo/file.js +6 -3
  61. package/dist/internal/domain/fs/vo/file.js.map +1 -1
  62. package/dist/internal/domain/fs/vo/fileinfo.d.ts.map +1 -1
  63. package/dist/internal/domain/fs/vo/fileinfo.js +1 -2
  64. package/dist/internal/domain/fs/vo/fileinfo.js.map +1 -1
  65. package/dist/internal/domain/fs/vo/filemeta.d.ts +0 -4
  66. package/dist/internal/domain/fs/vo/filemeta.d.ts.map +1 -1
  67. package/dist/internal/domain/fs/vo/filemeta.js +0 -9
  68. package/dist/internal/domain/fs/vo/filemeta.js.map +1 -1
  69. package/dist/internal/domain/fs/vo/incremental-file-collector.d.ts +3 -0
  70. package/dist/internal/domain/fs/vo/incremental-file-collector.d.ts.map +1 -0
  71. package/dist/internal/domain/fs/vo/incremental-file-collector.js +37 -0
  72. package/dist/internal/domain/fs/vo/incremental-file-collector.js.map +1 -0
  73. package/dist/internal/domain/fs/vo/overlay-factory.d.ts +1 -0
  74. package/dist/internal/domain/fs/vo/overlay-factory.d.ts.map +1 -1
  75. package/dist/internal/domain/fs/vo/overlay-factory.js +1 -38
  76. package/dist/internal/domain/fs/vo/overlay-factory.js.map +1 -1
  77. package/dist/internal/domain/fs/vo/walkway.d.ts.map +1 -1
  78. package/dist/internal/domain/fs/vo/walkway.js +1 -4
  79. package/dist/internal/domain/fs/vo/walkway.js.map +1 -1
  80. package/dist/internal/domain/markdown/type.d.ts +1 -0
  81. package/dist/internal/domain/markdown/type.d.ts.map +1 -1
  82. package/dist/internal/domain/markdown/type.js.map +1 -1
  83. package/dist/internal/domain/markdown/vo/shortcode.d.ts +1 -0
  84. package/dist/internal/domain/markdown/vo/shortcode.d.ts.map +1 -1
  85. package/dist/internal/domain/markdown/vo/shortcode.js +3 -0
  86. package/dist/internal/domain/markdown/vo/shortcode.js.map +1 -1
  87. package/dist/internal/domain/site/entity/page.d.ts +4 -2
  88. package/dist/internal/domain/site/entity/page.d.ts.map +1 -1
  89. package/dist/internal/domain/site/entity/page.js +13 -2
  90. package/dist/internal/domain/site/entity/page.js.map +1 -1
  91. package/dist/internal/domain/site/entity/site.d.ts +2 -1
  92. package/dist/internal/domain/site/entity/site.d.ts.map +1 -1
  93. package/dist/internal/domain/site/entity/site.js +9 -1
  94. package/dist/internal/domain/site/entity/site.js.map +1 -1
  95. package/dist/internal/domain/template/entity/template.d.ts.map +1 -1
  96. package/dist/internal/domain/template/entity/template.js +3 -0
  97. package/dist/internal/domain/template/entity/template.js.map +1 -1
  98. package/dist/pkg/log/logger.d.ts.map +1 -1
  99. package/dist/pkg/log/logger.js +1 -0
  100. package/dist/pkg/log/logger.js.map +1 -1
  101. package/dist/pkg/log/manager.js +1 -1
  102. package/dist/pkg/web/server/livereload-server.d.ts +23 -0
  103. package/dist/pkg/web/server/livereload-server.d.ts.map +1 -0
  104. package/dist/pkg/web/server/livereload-server.js +370 -0
  105. package/dist/pkg/web/server/livereload-server.js.map +1 -0
  106. package/dist/pkg/web/server/types.d.ts +25 -0
  107. package/dist/pkg/web/server/types.d.ts.map +1 -0
  108. package/dist/pkg/web/server/types.js +3 -0
  109. package/dist/pkg/web/server/types.js.map +1 -0
  110. package/dist/pkg/web/watcher/content-file-watcher.d.ts +20 -0
  111. package/dist/pkg/web/watcher/content-file-watcher.d.ts.map +1 -0
  112. package/dist/pkg/web/watcher/content-file-watcher.js +154 -0
  113. package/dist/pkg/web/watcher/content-file-watcher.js.map +1 -0
  114. package/dist/pkg/web/watcher/types.d.ts +18 -0
  115. package/dist/pkg/web/watcher/types.d.ts.map +1 -0
  116. package/dist/pkg/web/watcher/types.js +3 -0
  117. package/dist/pkg/web/watcher/types.js.map +1 -0
  118. package/package.json +7 -2
  119. package/dist/internal/domain/markdown/examples/obsidian-example.d.ts +0 -79
  120. package/dist/internal/domain/markdown/examples/obsidian-example.d.ts.map +0 -1
  121. package/dist/internal/domain/markdown/examples/obsidian-example.js +0 -302
  122. package/dist/internal/domain/markdown/examples/obsidian-example.js.map +0 -1
  123. package/dist/internal/domain/markdown/examples/shortcode.d.ts +0 -43
  124. package/dist/internal/domain/markdown/examples/shortcode.d.ts.map +0 -1
  125. package/dist/internal/domain/markdown/examples/shortcode.js +0 -99
  126. package/dist/internal/domain/markdown/examples/shortcode.js.map +0 -1
  127. package/dist/internal/domain/prompt/entity/collector.d.ts +0 -88
  128. package/dist/internal/domain/prompt/entity/collector.d.ts.map +0 -1
  129. package/dist/internal/domain/prompt/entity/collector.js +0 -254
  130. package/dist/internal/domain/prompt/entity/collector.js.map +0 -1
  131. package/dist/internal/domain/prompt/entity/finder.d.ts +0 -88
  132. package/dist/internal/domain/prompt/entity/finder.d.ts.map +0 -1
  133. package/dist/internal/domain/prompt/entity/finder.js +0 -293
  134. package/dist/internal/domain/prompt/entity/finder.js.map +0 -1
  135. package/dist/internal/domain/prompt/entity/hub.d.ts +0 -112
  136. package/dist/internal/domain/prompt/entity/hub.d.ts.map +0 -1
  137. package/dist/internal/domain/prompt/entity/hub.js +0 -259
  138. package/dist/internal/domain/prompt/entity/hub.js.map +0 -1
  139. package/dist/internal/domain/prompt/entity/prompt.d.ts +0 -133
  140. package/dist/internal/domain/prompt/entity/prompt.d.ts.map +0 -1
  141. package/dist/internal/domain/prompt/entity/prompt.js +0 -237
  142. package/dist/internal/domain/prompt/entity/prompt.js.map +0 -1
  143. package/dist/internal/domain/prompt/factory/prompt.d.ts +0 -55
  144. package/dist/internal/domain/prompt/factory/prompt.d.ts.map +0 -1
  145. package/dist/internal/domain/prompt/factory/prompt.js +0 -212
  146. package/dist/internal/domain/prompt/factory/prompt.js.map +0 -1
  147. package/dist/internal/domain/prompt/index.d.ts +0 -10
  148. package/dist/internal/domain/prompt/index.d.ts.map +0 -1
  149. package/dist/internal/domain/prompt/index.js +0 -72
  150. package/dist/internal/domain/prompt/index.js.map +0 -1
  151. package/dist/internal/domain/prompt/type.d.ts +0 -180
  152. package/dist/internal/domain/prompt/type.d.ts.map +0 -1
  153. package/dist/internal/domain/prompt/type.js +0 -23
  154. package/dist/internal/domain/prompt/type.js.map +0 -1
  155. package/dist/internal/domain/prompt/vo/file.d.ts +0 -103
  156. package/dist/internal/domain/prompt/vo/file.d.ts.map +0 -1
  157. package/dist/internal/domain/prompt/vo/file.js +0 -265
  158. package/dist/internal/domain/prompt/vo/file.js.map +0 -1
  159. package/dist/internal/domain/prompt/vo/rule.d.ts +0 -139
  160. package/dist/internal/domain/prompt/vo/rule.d.ts.map +0 -1
  161. package/dist/internal/domain/prompt/vo/rule.js +0 -268
  162. 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.0",
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":"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"}
@@ -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