@theglitchking/hit-em-with-the-docs 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (200) hide show
  1. package/.claude-plugin/marketplace.json +46 -0
  2. package/.claude-plugin/plugin.json +114 -0
  3. package/LICENSE +21 -0
  4. package/MIGRATION.md +255 -0
  5. package/README.backup.md +714 -0
  6. package/README.md +869 -0
  7. package/action.yml +56 -0
  8. package/dist/action/action/index.d.ts +2 -0
  9. package/dist/action/action/index.d.ts.map +1 -0
  10. package/dist/action/cli/index.d.ts +3 -0
  11. package/dist/action/cli/index.d.ts.map +1 -0
  12. package/dist/action/core/audit/auditor.d.ts +43 -0
  13. package/dist/action/core/audit/auditor.d.ts.map +1 -0
  14. package/dist/action/core/audit/rules.d.ts +37 -0
  15. package/dist/action/core/audit/rules.d.ts.map +1 -0
  16. package/dist/action/core/discover/antipatterns.d.ts +24 -0
  17. package/dist/action/core/discover/antipatterns.d.ts.map +1 -0
  18. package/dist/action/core/discover/dependencies.d.ts +57 -0
  19. package/dist/action/core/discover/dependencies.d.ts.map +1 -0
  20. package/dist/action/core/discover/patterns.d.ts +38 -0
  21. package/dist/action/core/discover/patterns.d.ts.map +1 -0
  22. package/dist/action/core/discover/standards.d.ts +58 -0
  23. package/dist/action/core/discover/standards.d.ts.map +1 -0
  24. package/dist/action/core/domains/classifier.d.ts +41 -0
  25. package/dist/action/core/domains/classifier.d.ts.map +1 -0
  26. package/dist/action/core/domains/constants.d.ts +40 -0
  27. package/dist/action/core/domains/constants.d.ts.map +1 -0
  28. package/dist/action/core/domains/detector.d.ts +35 -0
  29. package/dist/action/core/domains/detector.d.ts.map +1 -0
  30. package/dist/action/core/integrate/integrator.d.ts +35 -0
  31. package/dist/action/core/integrate/integrator.d.ts.map +1 -0
  32. package/dist/action/core/links/checker.d.ts +64 -0
  33. package/dist/action/core/links/checker.d.ts.map +1 -0
  34. package/dist/action/core/links/tracker.d.ts +69 -0
  35. package/dist/action/core/links/tracker.d.ts.map +1 -0
  36. package/dist/action/core/maintain/orchestrator.d.ts +39 -0
  37. package/dist/action/core/maintain/orchestrator.d.ts.map +1 -0
  38. package/dist/action/core/metadata/generator.d.ts +26 -0
  39. package/dist/action/core/metadata/generator.d.ts.map +1 -0
  40. package/dist/action/core/metadata/schema.d.ts +201 -0
  41. package/dist/action/core/metadata/schema.d.ts.map +1 -0
  42. package/dist/action/core/metadata/sync.d.ts +36 -0
  43. package/dist/action/core/metadata/sync.d.ts.map +1 -0
  44. package/dist/action/generators/index-generator.d.ts +19 -0
  45. package/dist/action/generators/index-generator.d.ts.map +1 -0
  46. package/dist/action/generators/registry-generator.d.ts +11 -0
  47. package/dist/action/generators/registry-generator.d.ts.map +1 -0
  48. package/dist/action/generators/scaffold.d.ts +30 -0
  49. package/dist/action/generators/scaffold.d.ts.map +1 -0
  50. package/dist/action/generators/templates/document.d.ts +14 -0
  51. package/dist/action/generators/templates/document.d.ts.map +1 -0
  52. package/dist/action/generators/templates/domain-index.d.ts +6 -0
  53. package/dist/action/generators/templates/domain-index.d.ts.map +1 -0
  54. package/dist/action/generators/templates/domain-registry.d.ts +6 -0
  55. package/dist/action/generators/templates/domain-registry.d.ts.map +1 -0
  56. package/dist/action/index.d.ts +31 -0
  57. package/dist/action/index.d.ts.map +1 -0
  58. package/dist/action/index.js +17 -0
  59. package/dist/action/index.js.map +1 -0
  60. package/dist/action/package.json +3 -0
  61. package/dist/action/reports/audit-report.d.ts +15 -0
  62. package/dist/action/reports/audit-report.d.ts.map +1 -0
  63. package/dist/action/reports/health-report.d.ts +15 -0
  64. package/dist/action/reports/health-report.d.ts.map +1 -0
  65. package/dist/action/reports/link-report.d.ts +15 -0
  66. package/dist/action/reports/link-report.d.ts.map +1 -0
  67. package/dist/action/utils/frontmatter.d.ts +50 -0
  68. package/dist/action/utils/frontmatter.d.ts.map +1 -0
  69. package/dist/action/utils/glob.d.ts +63 -0
  70. package/dist/action/utils/glob.d.ts.map +1 -0
  71. package/dist/action/utils/logger.d.ts +42 -0
  72. package/dist/action/utils/logger.d.ts.map +1 -0
  73. package/dist/action/utils/markdown.d.ts +89 -0
  74. package/dist/action/utils/markdown.d.ts.map +1 -0
  75. package/dist/cli/index.d.ts +3 -0
  76. package/dist/cli/index.d.ts.map +1 -0
  77. package/dist/cli/index.js +287 -0
  78. package/dist/cli/index.js.map +1 -0
  79. package/dist/core/audit/auditor.d.ts +43 -0
  80. package/dist/core/audit/auditor.d.ts.map +1 -0
  81. package/dist/core/audit/auditor.js +273 -0
  82. package/dist/core/audit/auditor.js.map +1 -0
  83. package/dist/core/audit/rules.d.ts +37 -0
  84. package/dist/core/audit/rules.d.ts.map +1 -0
  85. package/dist/core/audit/rules.js +223 -0
  86. package/dist/core/audit/rules.js.map +1 -0
  87. package/dist/core/discover/antipatterns.d.ts +24 -0
  88. package/dist/core/discover/antipatterns.d.ts.map +1 -0
  89. package/dist/core/discover/antipatterns.js +354 -0
  90. package/dist/core/discover/antipatterns.js.map +1 -0
  91. package/dist/core/discover/dependencies.d.ts +57 -0
  92. package/dist/core/discover/dependencies.d.ts.map +1 -0
  93. package/dist/core/discover/dependencies.js +311 -0
  94. package/dist/core/discover/dependencies.js.map +1 -0
  95. package/dist/core/discover/patterns.d.ts +38 -0
  96. package/dist/core/discover/patterns.d.ts.map +1 -0
  97. package/dist/core/discover/patterns.js +371 -0
  98. package/dist/core/discover/patterns.js.map +1 -0
  99. package/dist/core/discover/standards.d.ts +58 -0
  100. package/dist/core/discover/standards.d.ts.map +1 -0
  101. package/dist/core/discover/standards.js +359 -0
  102. package/dist/core/discover/standards.js.map +1 -0
  103. package/dist/core/domains/classifier.d.ts +41 -0
  104. package/dist/core/domains/classifier.d.ts.map +1 -0
  105. package/dist/core/domains/classifier.js +208 -0
  106. package/dist/core/domains/classifier.js.map +1 -0
  107. package/dist/core/domains/constants.d.ts +40 -0
  108. package/dist/core/domains/constants.d.ts.map +1 -0
  109. package/dist/core/domains/constants.js +252 -0
  110. package/dist/core/domains/constants.js.map +1 -0
  111. package/dist/core/domains/detector.d.ts +35 -0
  112. package/dist/core/domains/detector.d.ts.map +1 -0
  113. package/dist/core/domains/detector.js +176 -0
  114. package/dist/core/domains/detector.js.map +1 -0
  115. package/dist/core/integrate/integrator.d.ts +35 -0
  116. package/dist/core/integrate/integrator.d.ts.map +1 -0
  117. package/dist/core/integrate/integrator.js +216 -0
  118. package/dist/core/integrate/integrator.js.map +1 -0
  119. package/dist/core/links/checker.d.ts +64 -0
  120. package/dist/core/links/checker.d.ts.map +1 -0
  121. package/dist/core/links/checker.js +190 -0
  122. package/dist/core/links/checker.js.map +1 -0
  123. package/dist/core/links/tracker.d.ts +69 -0
  124. package/dist/core/links/tracker.d.ts.map +1 -0
  125. package/dist/core/links/tracker.js +184 -0
  126. package/dist/core/links/tracker.js.map +1 -0
  127. package/dist/core/maintain/orchestrator.d.ts +39 -0
  128. package/dist/core/maintain/orchestrator.d.ts.map +1 -0
  129. package/dist/core/maintain/orchestrator.js +372 -0
  130. package/dist/core/maintain/orchestrator.js.map +1 -0
  131. package/dist/core/metadata/generator.d.ts +26 -0
  132. package/dist/core/metadata/generator.d.ts.map +1 -0
  133. package/dist/core/metadata/generator.js +221 -0
  134. package/dist/core/metadata/generator.js.map +1 -0
  135. package/dist/core/metadata/schema.d.ts +201 -0
  136. package/dist/core/metadata/schema.d.ts.map +1 -0
  137. package/dist/core/metadata/schema.js +184 -0
  138. package/dist/core/metadata/schema.js.map +1 -0
  139. package/dist/core/metadata/sync.d.ts +36 -0
  140. package/dist/core/metadata/sync.d.ts.map +1 -0
  141. package/dist/core/metadata/sync.js +195 -0
  142. package/dist/core/metadata/sync.js.map +1 -0
  143. package/dist/generators/index-generator.d.ts +19 -0
  144. package/dist/generators/index-generator.d.ts.map +1 -0
  145. package/dist/generators/index-generator.js +191 -0
  146. package/dist/generators/index-generator.js.map +1 -0
  147. package/dist/generators/registry-generator.d.ts +11 -0
  148. package/dist/generators/registry-generator.d.ts.map +1 -0
  149. package/dist/generators/registry-generator.js +156 -0
  150. package/dist/generators/registry-generator.js.map +1 -0
  151. package/dist/generators/scaffold.d.ts +30 -0
  152. package/dist/generators/scaffold.d.ts.map +1 -0
  153. package/dist/generators/scaffold.js +213 -0
  154. package/dist/generators/scaffold.js.map +1 -0
  155. package/dist/generators/templates/document.d.ts +14 -0
  156. package/dist/generators/templates/document.d.ts.map +1 -0
  157. package/dist/generators/templates/document.js +305 -0
  158. package/dist/generators/templates/document.js.map +1 -0
  159. package/dist/generators/templates/domain-index.d.ts +6 -0
  160. package/dist/generators/templates/domain-index.d.ts.map +1 -0
  161. package/dist/generators/templates/domain-index.js +68 -0
  162. package/dist/generators/templates/domain-index.js.map +1 -0
  163. package/dist/generators/templates/domain-registry.d.ts +6 -0
  164. package/dist/generators/templates/domain-registry.d.ts.map +1 -0
  165. package/dist/generators/templates/domain-registry.js +59 -0
  166. package/dist/generators/templates/domain-registry.js.map +1 -0
  167. package/dist/index.d.ts +32 -0
  168. package/dist/index.d.ts.map +1 -0
  169. package/dist/index.js +39 -0
  170. package/dist/index.js.map +1 -0
  171. package/dist/reports/audit-report.d.ts +15 -0
  172. package/dist/reports/audit-report.d.ts.map +1 -0
  173. package/dist/reports/audit-report.js +150 -0
  174. package/dist/reports/audit-report.js.map +1 -0
  175. package/dist/reports/health-report.d.ts +15 -0
  176. package/dist/reports/health-report.d.ts.map +1 -0
  177. package/dist/reports/health-report.js +175 -0
  178. package/dist/reports/health-report.js.map +1 -0
  179. package/dist/reports/link-report.d.ts +15 -0
  180. package/dist/reports/link-report.d.ts.map +1 -0
  181. package/dist/reports/link-report.js +165 -0
  182. package/dist/reports/link-report.js.map +1 -0
  183. package/dist/utils/frontmatter.d.ts +50 -0
  184. package/dist/utils/frontmatter.d.ts.map +1 -0
  185. package/dist/utils/frontmatter.js +93 -0
  186. package/dist/utils/frontmatter.js.map +1 -0
  187. package/dist/utils/glob.d.ts +63 -0
  188. package/dist/utils/glob.d.ts.map +1 -0
  189. package/dist/utils/glob.js +128 -0
  190. package/dist/utils/glob.js.map +1 -0
  191. package/dist/utils/logger.d.ts +42 -0
  192. package/dist/utils/logger.d.ts.map +1 -0
  193. package/dist/utils/logger.js +118 -0
  194. package/dist/utils/logger.js.map +1 -0
  195. package/dist/utils/markdown.d.ts +89 -0
  196. package/dist/utils/markdown.d.ts.map +1 -0
  197. package/dist/utils/markdown.js +192 -0
  198. package/dist/utils/markdown.js.map +1 -0
  199. package/package.json +100 -0
  200. package/templates/claude/CLAUDE.md +204 -0
@@ -0,0 +1,165 @@
1
+ import { writeFile, mkdir } from 'fs/promises';
2
+ import { join } from 'path';
3
+ import { pathExists } from '../utils/glob.js';
4
+ import { formatDate } from '../core/metadata/generator.js';
5
+ /**
6
+ * Generate a link report
7
+ */
8
+ export async function generateLinkReport(options) {
9
+ const { result, format = 'markdown' } = options;
10
+ if (format === 'json') {
11
+ return generateJsonReport(result);
12
+ }
13
+ return generateMarkdownReport(result);
14
+ }
15
+ /**
16
+ * Generate markdown link report
17
+ */
18
+ function generateMarkdownReport(result) {
19
+ const now = formatDate(new Date());
20
+ const timestamp = new Date().toISOString();
21
+ let content = `---
22
+ title: Link Check Report
23
+ tier: admin
24
+ domains: [root]
25
+ status: active
26
+ last_updated: '${now}'
27
+ version: '1.0.0'
28
+ ---
29
+
30
+ # Link Check Report
31
+
32
+ **Generated:** ${timestamp}
33
+
34
+ ## Summary
35
+
36
+ | Metric | Value |
37
+ |--------|-------|
38
+ | Files Checked | ${result.totalFiles} |
39
+ | Total Links | ${result.totalLinks} |
40
+ | Valid Links | ${result.validLinks} |
41
+ | Broken Links | ${result.brokenLinks.length} |
42
+ | Internal Links | ${result.stats.internalLinks} |
43
+ | External Links | ${result.stats.externalLinks} |
44
+ | Cross-Domain Links | ${result.stats.crossDomainLinks} |
45
+
46
+ ## Link Health
47
+
48
+ \`\`\`
49
+ Total Links: ${result.totalLinks}
50
+ ├── Valid: ${result.validLinks} (${((result.validLinks / result.totalLinks) * 100).toFixed(1)}%)
51
+ ├── Broken: ${result.brokenLinks.length} (${result.stats.brokenPercentage.toFixed(1)}%)
52
+ └── Cross-Domain: ${result.stats.crossDomainLinks} (${((result.stats.crossDomainLinks / result.totalLinks) * 100).toFixed(1)}%)
53
+ \`\`\`
54
+
55
+ `;
56
+ // Broken Links
57
+ if (result.brokenLinks.length > 0) {
58
+ content += `## Broken Links (${result.brokenLinks.length})
59
+
60
+ | Source File | Line | Target | Link Text |
61
+ |-------------|------|--------|-----------|
62
+ `;
63
+ for (const link of result.brokenLinks) {
64
+ content += `| ${link.sourceFile} | ${link.lineNumber} | \`${link.targetPath}\` | ${link.linkText.slice(0, 30)} |\n`;
65
+ }
66
+ content += '\n';
67
+ }
68
+ else {
69
+ content += `## Broken Links
70
+
71
+ ✅ No broken links found!
72
+
73
+ `;
74
+ }
75
+ // Top Cross-Domain Connections
76
+ if (result.stats.topConnectedDomains.length > 0) {
77
+ content += `## Cross-Domain Connections
78
+
79
+ | From | To | Links |
80
+ |------|-----|-------|
81
+ `;
82
+ for (const conn of result.stats.topConnectedDomains) {
83
+ content += `| ${conn.from} | ${conn.to} | ${conn.count} |\n`;
84
+ }
85
+ content += '\n';
86
+ }
87
+ // Cross-Domain Links Details
88
+ if (result.crossDomainLinks.length > 0) {
89
+ content += `## Cross-Domain Link Details
90
+
91
+ <details>
92
+ <summary>Show all ${result.crossDomainLinks.length} cross-domain links</summary>
93
+
94
+ | Source | From Domain | Target Domain | Link |
95
+ |--------|-------------|---------------|------|
96
+ `;
97
+ for (const link of result.crossDomainLinks.slice(0, 50)) {
98
+ content += `| ${link.sourceFile} | ${link.sourceDomain} | ${link.targetDomain} | ${link.linkText.slice(0, 30)} |\n`;
99
+ }
100
+ if (result.crossDomainLinks.length > 50) {
101
+ content += `\n*...and ${result.crossDomainLinks.length - 50} more*\n`;
102
+ }
103
+ content += '\n</details>\n\n';
104
+ }
105
+ // External Links
106
+ if (result.externalLinks.length > 0) {
107
+ content += `## External Links (${result.externalLinks.length})
108
+
109
+ <details>
110
+ <summary>Show external links</summary>
111
+
112
+ | Source File | URL |
113
+ |-------------|-----|
114
+ `;
115
+ for (const link of result.externalLinks.slice(0, 30)) {
116
+ content += `| ${link.sourceFile} | ${link.url.slice(0, 50)}${link.url.length > 50 ? '...' : ''} |\n`;
117
+ }
118
+ if (result.externalLinks.length > 30) {
119
+ content += `\n*...and ${result.externalLinks.length - 30} more*\n`;
120
+ }
121
+ content += '\n</details>\n\n';
122
+ }
123
+ content += `---
124
+
125
+ *Generated by hit-em-with-the-docs*
126
+ `;
127
+ return content;
128
+ }
129
+ /**
130
+ * Generate JSON link report
131
+ */
132
+ function generateJsonReport(result) {
133
+ return JSON.stringify({
134
+ timestamp: new Date().toISOString(),
135
+ summary: {
136
+ totalFiles: result.totalFiles,
137
+ totalLinks: result.totalLinks,
138
+ validLinks: result.validLinks,
139
+ brokenLinks: result.brokenLinks.length,
140
+ externalLinks: result.externalLinks.length,
141
+ crossDomainLinks: result.crossDomainLinks.length,
142
+ },
143
+ stats: result.stats,
144
+ brokenLinks: result.brokenLinks,
145
+ crossDomainLinks: result.crossDomainLinks,
146
+ externalLinks: result.externalLinks,
147
+ }, null, 2);
148
+ }
149
+ /**
150
+ * Save link report to file
151
+ */
152
+ export async function saveLinkReport(docsPath, result, format = 'markdown') {
153
+ const reportsDir = join(docsPath, 'reports');
154
+ if (!(await pathExists(reportsDir))) {
155
+ await mkdir(reportsDir, { recursive: true });
156
+ }
157
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-').slice(0, 19);
158
+ const ext = format === 'json' ? 'json' : 'md';
159
+ const fileName = `links-${timestamp}.${ext}`;
160
+ const filePath = join(reportsDir, fileName);
161
+ const content = await generateLinkReport({ docsPath, result, format });
162
+ await writeFile(filePath, content, 'utf-8');
163
+ return filePath;
164
+ }
165
+ //# sourceMappingURL=link-report.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link-report.js","sourceRoot":"","sources":["../../src/reports/link-report.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ export interface FrontmatterResult<T = Record<string, unknown>> {
2
+ data: T;
3
+ content: string;
4
+ isEmpty: boolean;
5
+ excerpt?: string;
6
+ }
7
+ /**
8
+ * Parse frontmatter from markdown content
9
+ */
10
+ export declare function parseFrontmatter<T = Record<string, unknown>>(content: string): FrontmatterResult<T>;
11
+ /**
12
+ * Check if content has frontmatter
13
+ */
14
+ export declare function hasFrontmatter(content: string): boolean;
15
+ /**
16
+ * Extract frontmatter string from content
17
+ */
18
+ export declare function extractFrontmatterString(content: string): string | null;
19
+ /**
20
+ * Stringify frontmatter data to YAML
21
+ */
22
+ export declare function stringifyFrontmatter(data: Record<string, unknown>): string;
23
+ /**
24
+ * Add or update frontmatter in content
25
+ */
26
+ export declare function setFrontmatter(content: string, data: Record<string, unknown>): string;
27
+ /**
28
+ * Merge frontmatter data with existing
29
+ */
30
+ export declare function mergeFrontmatter(content: string, newData: Record<string, unknown>): string;
31
+ /**
32
+ * Remove frontmatter from content
33
+ */
34
+ export declare function removeFrontmatter(content: string): string;
35
+ /**
36
+ * Get specific frontmatter field
37
+ */
38
+ export declare function getFrontmatterField<T>(content: string, field: string): T | undefined;
39
+ /**
40
+ * Set specific frontmatter field
41
+ */
42
+ export declare function setFrontmatterField(content: string, field: string, value: unknown): string;
43
+ /**
44
+ * Validate frontmatter structure
45
+ */
46
+ export declare function validateFrontmatter(content: string, requiredFields: string[]): {
47
+ valid: boolean;
48
+ missingFields: string[];
49
+ };
50
+ //# sourceMappingURL=frontmatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frontmatter.d.ts","sourceRoot":"","sources":["../../src/utils/frontmatter.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,iBAAiB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC5D,IAAI,EAAE,CAAC,CAAC;IACR,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC1D,OAAO,EAAE,MAAM,GACd,iBAAiB,CAAC,CAAC,CAAC,CAWtB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGvE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAO1E;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,MAAM,CAIR;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,MAAM,CAKR;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAGzD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EACnC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,GACZ,CAAC,GAAG,SAAS,CAGf;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,OAAO,GACb,MAAM,CAKR;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,MAAM,EAAE,GACvB;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,aAAa,EAAE,MAAM,EAAE,CAAA;CAAE,CAS7C"}
@@ -0,0 +1,93 @@
1
+ import matter from 'gray-matter';
2
+ import yaml from 'yaml';
3
+ /**
4
+ * Parse frontmatter from markdown content
5
+ */
6
+ export function parseFrontmatter(content) {
7
+ const result = matter(content);
8
+ const parsed = {
9
+ data: result.data,
10
+ content: result.content,
11
+ isEmpty: Object.keys(result.data).length === 0,
12
+ };
13
+ if (result.excerpt) {
14
+ parsed.excerpt = result.excerpt;
15
+ }
16
+ return parsed;
17
+ }
18
+ /**
19
+ * Check if content has frontmatter
20
+ */
21
+ export function hasFrontmatter(content) {
22
+ return content.trimStart().startsWith('---');
23
+ }
24
+ /**
25
+ * Extract frontmatter string from content
26
+ */
27
+ export function extractFrontmatterString(content) {
28
+ const match = content.match(/^---\r?\n([\s\S]*?)\r?\n---/);
29
+ return match ? match[1] ?? null : null;
30
+ }
31
+ /**
32
+ * Stringify frontmatter data to YAML
33
+ */
34
+ export function stringifyFrontmatter(data) {
35
+ // Use yaml library for better formatting control
36
+ return yaml.stringify(data, {
37
+ indent: 2,
38
+ lineWidth: 80,
39
+ singleQuote: true,
40
+ });
41
+ }
42
+ /**
43
+ * Add or update frontmatter in content
44
+ */
45
+ export function setFrontmatter(content, data) {
46
+ const { content: body } = parseFrontmatter(content);
47
+ const frontmatter = stringifyFrontmatter(data);
48
+ return `---\n${frontmatter}---\n\n${body.trimStart()}`;
49
+ }
50
+ /**
51
+ * Merge frontmatter data with existing
52
+ */
53
+ export function mergeFrontmatter(content, newData) {
54
+ const { data: existingData, content: body } = parseFrontmatter(content);
55
+ const mergedData = { ...existingData, ...newData };
56
+ const frontmatter = stringifyFrontmatter(mergedData);
57
+ return `---\n${frontmatter}---\n\n${body.trimStart()}`;
58
+ }
59
+ /**
60
+ * Remove frontmatter from content
61
+ */
62
+ export function removeFrontmatter(content) {
63
+ const { content: body } = parseFrontmatter(content);
64
+ return body.trimStart();
65
+ }
66
+ /**
67
+ * Get specific frontmatter field
68
+ */
69
+ export function getFrontmatterField(content, field) {
70
+ const { data } = parseFrontmatter(content);
71
+ return data[field];
72
+ }
73
+ /**
74
+ * Set specific frontmatter field
75
+ */
76
+ export function setFrontmatterField(content, field, value) {
77
+ const { data, content: body } = parseFrontmatter(content);
78
+ data[field] = value;
79
+ const frontmatter = stringifyFrontmatter(data);
80
+ return `---\n${frontmatter}---\n\n${body.trimStart()}`;
81
+ }
82
+ /**
83
+ * Validate frontmatter structure
84
+ */
85
+ export function validateFrontmatter(content, requiredFields) {
86
+ const { data } = parseFrontmatter(content);
87
+ const missingFields = requiredFields.filter((field) => !(field in data) || data[field] === undefined || data[field] === null);
88
+ return {
89
+ valid: missingFields.length === 0,
90
+ missingFields,
91
+ };
92
+ }
93
+ //# sourceMappingURL=frontmatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frontmatter.js","sourceRoot":"","sources":["../../src/utils/frontmatter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ export interface GlobOptions {
2
+ cwd?: string;
3
+ absolute?: boolean;
4
+ ignore?: string[];
5
+ dot?: boolean;
6
+ }
7
+ /**
8
+ * Find files matching a glob pattern
9
+ */
10
+ export declare function glob(pattern: string, options?: GlobOptions): Promise<string[]>;
11
+ /**
12
+ * Find all markdown files in a directory
13
+ */
14
+ export declare function findMarkdownFiles(dir: string, options?: Omit<GlobOptions, 'absolute'>): Promise<string[]>;
15
+ /**
16
+ * Check if a path exists
17
+ */
18
+ export declare function pathExists(path: string): Promise<boolean>;
19
+ /**
20
+ * Check if a path exists (sync)
21
+ */
22
+ export declare function pathExistsSync(path: string): boolean;
23
+ /**
24
+ * Check if a path is a directory
25
+ */
26
+ export declare function isDirectory(path: string): Promise<boolean>;
27
+ /**
28
+ * Check if a path is a file
29
+ */
30
+ export declare function isFile(path: string): Promise<boolean>;
31
+ /**
32
+ * Get all subdirectories in a directory
33
+ */
34
+ export declare function getSubdirectories(dir: string): Promise<string[]>;
35
+ /**
36
+ * Resolve a path relative to a base
37
+ */
38
+ export declare function resolvePath(base: string, relativePath: string): string;
39
+ /**
40
+ * Get relative path from base to target
41
+ */
42
+ export declare function getRelativePath(base: string, target: string): string;
43
+ /**
44
+ * Get directory name from path
45
+ */
46
+ export declare function getDirname(path: string): string;
47
+ /**
48
+ * Get base name from path
49
+ */
50
+ export declare function getBasename(path: string): string;
51
+ /**
52
+ * Get file extension
53
+ */
54
+ export declare function getExtension(path: string): string;
55
+ /**
56
+ * Remove file extension from path
57
+ */
58
+ export declare function removeExtension(path: string): string;
59
+ /**
60
+ * Normalize path separators
61
+ */
62
+ export declare function normalizePath(path: string): string;
63
+ //# sourceMappingURL=glob.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glob.d.ts","sourceRoot":"","sources":["../../src/utils/glob.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED;;GAEG;AACH,wBAAsB,IAAI,CACxB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,MAAM,EAAE,CAAC,CAiBnB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,IAAI,CAAC,WAAW,EAAE,UAAU,CAAM,GAC1C,OAAO,CAAC,MAAM,EAAE,CAAC,CAMnB;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAO/D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOhE;AAED;;GAEG;AACH,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAO3D;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAStE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAEtE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAEpE;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGpD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAElD"}
@@ -0,0 +1,128 @@
1
+ import { glob as globLib } from 'glob';
2
+ import { resolve, relative, dirname, basename, extname, join } from 'path';
3
+ import { stat, readdir } from 'fs/promises';
4
+ import { existsSync } from 'fs';
5
+ /**
6
+ * Find files matching a glob pattern
7
+ */
8
+ export async function glob(pattern, options = {}) {
9
+ const { cwd = process.cwd(), absolute = false, ignore = ['node_modules/**', 'dist/**', '.git/**'], dot = false, } = options;
10
+ const matches = await globLib(pattern, {
11
+ cwd,
12
+ absolute,
13
+ ignore,
14
+ dot,
15
+ nodir: true,
16
+ });
17
+ return matches;
18
+ }
19
+ /**
20
+ * Find all markdown files in a directory
21
+ */
22
+ export async function findMarkdownFiles(dir, options = {}) {
23
+ return glob('**/*.md', {
24
+ ...options,
25
+ cwd: dir,
26
+ absolute: true,
27
+ });
28
+ }
29
+ /**
30
+ * Check if a path exists
31
+ */
32
+ export async function pathExists(path) {
33
+ try {
34
+ await stat(path);
35
+ return true;
36
+ }
37
+ catch {
38
+ return false;
39
+ }
40
+ }
41
+ /**
42
+ * Check if a path exists (sync)
43
+ */
44
+ export function pathExistsSync(path) {
45
+ return existsSync(path);
46
+ }
47
+ /**
48
+ * Check if a path is a directory
49
+ */
50
+ export async function isDirectory(path) {
51
+ try {
52
+ const stats = await stat(path);
53
+ return stats.isDirectory();
54
+ }
55
+ catch {
56
+ return false;
57
+ }
58
+ }
59
+ /**
60
+ * Check if a path is a file
61
+ */
62
+ export async function isFile(path) {
63
+ try {
64
+ const stats = await stat(path);
65
+ return stats.isFile();
66
+ }
67
+ catch {
68
+ return false;
69
+ }
70
+ }
71
+ /**
72
+ * Get all subdirectories in a directory
73
+ */
74
+ export async function getSubdirectories(dir) {
75
+ try {
76
+ const entries = await readdir(dir, { withFileTypes: true });
77
+ return entries
78
+ .filter((entry) => entry.isDirectory())
79
+ .map((entry) => join(dir, entry.name));
80
+ }
81
+ catch {
82
+ return [];
83
+ }
84
+ }
85
+ /**
86
+ * Resolve a path relative to a base
87
+ */
88
+ export function resolvePath(base, relativePath) {
89
+ return resolve(base, relativePath);
90
+ }
91
+ /**
92
+ * Get relative path from base to target
93
+ */
94
+ export function getRelativePath(base, target) {
95
+ return relative(base, target);
96
+ }
97
+ /**
98
+ * Get directory name from path
99
+ */
100
+ export function getDirname(path) {
101
+ return dirname(path);
102
+ }
103
+ /**
104
+ * Get base name from path
105
+ */
106
+ export function getBasename(path) {
107
+ return basename(path);
108
+ }
109
+ /**
110
+ * Get file extension
111
+ */
112
+ export function getExtension(path) {
113
+ return extname(path);
114
+ }
115
+ /**
116
+ * Remove file extension from path
117
+ */
118
+ export function removeExtension(path) {
119
+ const ext = extname(path);
120
+ return path.slice(0, -ext.length);
121
+ }
122
+ /**
123
+ * Normalize path separators
124
+ */
125
+ export function normalizePath(path) {
126
+ return path.replace(/\\/g, '/');
127
+ }
128
+ //# sourceMappingURL=glob.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glob.js","sourceRoot":"","sources":["../../src/utils/glob.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ export type LogLevel = 'debug' | 'info' | 'warn' | 'error' | 'success';
2
+ export interface LoggerOptions {
3
+ silent?: boolean;
4
+ verbose?: boolean;
5
+ prefix?: string;
6
+ }
7
+ declare class Logger {
8
+ private silent;
9
+ private verbose;
10
+ private prefix;
11
+ configure(options: LoggerOptions): void;
12
+ private formatMessage;
13
+ debug(message: string, ...args: unknown[]): void;
14
+ info(message: string, ...args: unknown[]): void;
15
+ success(message: string, ...args: unknown[]): void;
16
+ warn(message: string, ...args: unknown[]): void;
17
+ error(message: string, ...args: unknown[]): void;
18
+ header(title: string): void;
19
+ subheader(title: string): void;
20
+ list(items: string[], indent?: number): void;
21
+ table(headers: string[], rows: string[][]): void;
22
+ progress(current: number, total: number, label?: string): void;
23
+ newline(): void;
24
+ emoji: {
25
+ docs: string;
26
+ check: string;
27
+ cross: string;
28
+ warn: string;
29
+ info: string;
30
+ search: string;
31
+ stats: string;
32
+ fix: string;
33
+ link: string;
34
+ folder: string;
35
+ file: string;
36
+ clock: string;
37
+ sparkles: string;
38
+ };
39
+ }
40
+ export declare const logger: Logger;
41
+ export default logger;
42
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;AAEvE,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,cAAM,MAAM;IACV,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,MAAM,CAAc;IAE5B,SAAS,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAMvC,OAAO,CAAC,aAAa;IAIrB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAKhD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAK/C,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAKlD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAK/C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAKhD,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAO3B,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAM9B,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,GAAE,MAAU,GAAG,IAAI;IAQ/C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI;IAyBhD,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAY9D,OAAO,IAAI,IAAI;IAMf,KAAK;;;;;;;;;;;;;;MAcH;CACH;AAED,eAAO,MAAM,MAAM,QAAe,CAAC;AACnC,eAAe,MAAM,CAAC"}