@tnotesjs/core 0.2.1 → 0.3.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 (86) hide show
  1. package/README.md +0 -1
  2. package/config/ConfigManager.ts +137 -0
  3. package/config/constants.ts +121 -0
  4. package/config/defaultConfig.ts +33 -4
  5. package/config/index.ts +31 -0
  6. package/config/templates.ts +49 -0
  7. package/core/GitManager.ts +513 -0
  8. package/core/NoteIndexCache.ts +200 -0
  9. package/core/NoteManager.ts +395 -0
  10. package/core/ProcessManager.ts +180 -0
  11. package/core/ReadmeGenerator.ts +215 -0
  12. package/core/TocGenerator.ts +212 -0
  13. package/core/index.ts +11 -0
  14. package/dist/{chunk-5Y5IYS6C.js → chunk-UJG3UU5X.js} +21 -5
  15. package/dist/{chunk-5QN44ES5.js → chunk-XCWFZLER.js} +48 -368
  16. package/dist/cli/index.js +26 -78
  17. package/dist/index.js +1 -1
  18. package/dist/vitepress/config/index.js +2 -2
  19. package/package.json +5 -2
  20. package/services/file-watcher/configChangeHandler.ts +64 -0
  21. package/services/file-watcher/eventScheduler.ts +179 -0
  22. package/services/file-watcher/folderChangeHandler.ts +325 -0
  23. package/services/file-watcher/fsWatcherAdapter.ts +128 -0
  24. package/services/file-watcher/globalUpdateCoordinator.ts +60 -0
  25. package/services/file-watcher/index.ts +7 -0
  26. package/services/file-watcher/internal.ts +79 -0
  27. package/services/file-watcher/readmeChangeHandler.ts +28 -0
  28. package/services/file-watcher/renameDetector.ts +120 -0
  29. package/services/file-watcher/service.ts +352 -0
  30. package/services/file-watcher/watchState.ts +194 -0
  31. package/services/git/index.ts +7 -0
  32. package/services/git/service.ts +114 -0
  33. package/services/index.ts +14 -0
  34. package/services/init-sub-repo/index.ts +2 -0
  35. package/services/init-sub-repo/initSubRepoLogic.test.ts +162 -0
  36. package/services/init-sub-repo/initSubRepoLogic.ts +303 -0
  37. package/services/init-sub-repo/service.ts +101 -0
  38. package/services/note/index.ts +7 -0
  39. package/services/note/service.ts +361 -0
  40. package/services/readme/index.ts +7 -0
  41. package/services/readme/service.ts +761 -0
  42. package/services/toc/index.ts +5 -0
  43. package/services/toc/moveTocInside.test.ts +73 -0
  44. package/services/toc/service.ts +759 -0
  45. package/services/vitepress/index.ts +7 -0
  46. package/services/vitepress/service.ts +339 -0
  47. package/types/config.ts +0 -3
  48. package/types/note.ts +0 -2
  49. package/utils/errorHandler.ts +174 -0
  50. package/utils/file.ts +17 -0
  51. package/utils/genHierarchicalSidebar.ts +69 -0
  52. package/utils/generateAnchor.ts +24 -0
  53. package/utils/getChangedIds.ts +35 -0
  54. package/utils/index.ts +71 -0
  55. package/utils/logger.ts +231 -0
  56. package/utils/markdown.ts +75 -0
  57. package/utils/migrateReadmeToToc.test.ts +111 -0
  58. package/utils/migrateReadmeToToc.ts +135 -0
  59. package/utils/parseArgs.ts +90 -0
  60. package/utils/parseReadmeCompletedNotes.test.ts +90 -0
  61. package/utils/parseReadmeCompletedNotes.ts +108 -0
  62. package/utils/portUtils.ts +113 -0
  63. package/utils/readmeHelpers.ts +190 -0
  64. package/utils/runCommand.ts +29 -0
  65. package/utils/tocHelpers.test.ts +278 -0
  66. package/utils/tocHelpers.ts +855 -0
  67. package/utils/tocNodeId.test.ts +60 -0
  68. package/utils/tocNodeId.ts +97 -0
  69. package/utils/validators.ts +102 -0
  70. package/vitepress/assets/icons/icon__cursor.svg +4 -0
  71. package/vitepress/assets/icons/index.ts +1 -0
  72. package/vitepress/components/Layout/AboutPanel.vue +0 -24
  73. package/vitepress/components/Layout/DocBeforeControls.vue +6 -14
  74. package/vitepress/components/Layout/DocFooter.vue +3 -3
  75. package/vitepress/components/Layout/Layout.vue +0 -30
  76. package/vitepress/components/Layout/composables/useVSCodeIntegration.ts +20 -11
  77. package/vitepress/components/Layout/homeReadme.data.ts +0 -48
  78. package/vitepress/components/MarkMap/MarkMap.vue +6 -13
  79. package/vitepress/components/Settings/Settings.vue +76 -73
  80. package/vitepress/components/SidebarCard/FolderTreeItems.vue +16 -6
  81. package/vitepress/components/SidebarCard/SidebarCard.vue +21 -27
  82. package/vitepress/components/composables/useLocalIde.ts +83 -0
  83. package/vitepress/components/constants.ts +5 -6
  84. package/vitepress/components/utils/vscodePaths.test.ts +22 -0
  85. package/vitepress/components/utils/vscodePaths.ts +24 -2
  86. package/vitepress/theme/styles/doc-layout.scss +4 -4
@@ -0,0 +1,5 @@
1
+ /**
2
+ * services/toc/index.ts
3
+ */
4
+
5
+ export { TocService } from './service'
@@ -0,0 +1,73 @@
1
+ /**
2
+ * services/toc/moveTocInside.test.ts
3
+ *
4
+ * 验证 inside 落点将源子树插入目标行之后(第一个子项位置)。
5
+ */
6
+
7
+ import { describe, expect, it } from 'vitest'
8
+
9
+ import {
10
+ adjustTocLineIndexAfterSubtreeRemoval,
11
+ getTocEntrySubtreeRange,
12
+ parseTocLine,
13
+ TOC_INDENT_SPACES,
14
+ } from '../../utils/tocHelpers'
15
+
16
+ function adjustSubtreeIndent(lines: string[], delta: number): string[] {
17
+ if (delta === 0) return lines
18
+
19
+ return lines.map((line) => {
20
+ const parsed = parseTocLine(line)
21
+ if (!parsed.isMatch) return line
22
+
23
+ const newIndent = Math.max(0, parsed.indentLevel + delta)
24
+ const withoutIndent = line.trimStart()
25
+ return `${' '.repeat(newIndent * TOC_INDENT_SPACES)}${withoutIndent}`
26
+ })
27
+ }
28
+
29
+ function moveTocEntryInsideFirstChild(
30
+ lines: string[],
31
+ sourceTocLineIndex: number,
32
+ targetTocLineIndex: number,
33
+ ): string[] {
34
+ const next = [...lines]
35
+ const { start, end } = getTocEntrySubtreeRange(next, sourceTocLineIndex)
36
+ const movingLines = next.splice(start, end - start)
37
+
38
+ const targetLineIndex = adjustTocLineIndexAfterSubtreeRemoval(
39
+ targetTocLineIndex,
40
+ start,
41
+ end,
42
+ )
43
+ const targetParsed = parseTocLine(next[targetLineIndex])
44
+ const insertIndex = targetLineIndex + 1
45
+ const newIndent = targetParsed.indentLevel + 1
46
+
47
+ const oldBaseIndent = parseTocLine(movingLines[0]).indentLevel
48
+ const indentDelta = newIndent - oldBaseIndent
49
+ const adjustedLines = adjustSubtreeIndent(movingLines, indentDelta)
50
+
51
+ next.splice(insertIndex, 0, ...adjustedLines)
52
+ return next
53
+ }
54
+
55
+ describe('moveTocEntry inside first child', () => {
56
+ it('inserts moved note immediately after parent when children exist', () => {
57
+ const lines = [
58
+ '- [x] 0019. Author',
59
+ ' - [x] 0036. Workflow',
60
+ ' - [ ] 0035. Norm',
61
+ '- [ ] 0039. new',
62
+ ]
63
+
64
+ const result = moveTocEntryInsideFirstChild(lines, 3, 0)
65
+
66
+ expect(result).toEqual([
67
+ '- [x] 0019. Author',
68
+ ' - [ ] 0039. new',
69
+ ' - [x] 0036. Workflow',
70
+ ' - [ ] 0035. Norm',
71
+ ])
72
+ })
73
+ })