@interactive-inc/docs-client 0.0.6 → 0.0.8

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 (265) hide show
  1. package/README.md +0 -228
  2. package/build/index.d.ts +1921 -42
  3. package/build/index.js +4617 -39
  4. package/build/models.d.ts +34 -32
  5. package/build/models.js +219 -275
  6. package/package.json +4 -4
  7. package/tsup.config.ts +10 -0
  8. package/build/doc-client.d.ts +0 -59
  9. package/build/doc-client.d.ts.map +0 -1
  10. package/build/doc-client.js +0 -95
  11. package/build/doc-client.test.d.ts +0 -2
  12. package/build/doc-client.test.d.ts.map +0 -1
  13. package/build/doc-client.test.js +0 -38
  14. package/build/doc-directory-reference.d.ts +0 -65
  15. package/build/doc-directory-reference.d.ts.map +0 -1
  16. package/build/doc-directory-reference.js +0 -292
  17. package/build/doc-directory-reference.test.d.ts +0 -2
  18. package/build/doc-directory-reference.test.d.ts.map +0 -1
  19. package/build/doc-directory-reference.test.js +0 -100
  20. package/build/doc-file-index-reference.d.ts +0 -72
  21. package/build/doc-file-index-reference.d.ts.map +0 -1
  22. package/build/doc-file-index-reference.js +0 -191
  23. package/build/doc-file-index-reference.test.d.ts +0 -2
  24. package/build/doc-file-index-reference.test.d.ts.map +0 -1
  25. package/build/doc-file-index-reference.test.js +0 -77
  26. package/build/doc-file-md-reference.d.ts +0 -97
  27. package/build/doc-file-md-reference.d.ts.map +0 -1
  28. package/build/doc-file-md-reference.js +0 -297
  29. package/build/doc-file-md-reference.test.d.ts +0 -2
  30. package/build/doc-file-md-reference.test.d.ts.map +0 -1
  31. package/build/doc-file-md-reference.test.js +0 -465
  32. package/build/doc-file-relation-reference.d.ts +0 -54
  33. package/build/doc-file-relation-reference.d.ts.map +0 -1
  34. package/build/doc-file-relation-reference.js +0 -109
  35. package/build/doc-file-system-debug.d.ts +0 -81
  36. package/build/doc-file-system-debug.d.ts.map +0 -1
  37. package/build/doc-file-system-debug.js +0 -317
  38. package/build/doc-file-system.d.ts +0 -100
  39. package/build/doc-file-system.d.ts.map +0 -1
  40. package/build/doc-file-system.js +0 -210
  41. package/build/doc-file-tree-system.d.ts +0 -38
  42. package/build/doc-file-tree-system.d.ts.map +0 -1
  43. package/build/doc-file-tree-system.js +0 -153
  44. package/build/doc-file-tree-system.test.d.ts +0 -2
  45. package/build/doc-file-tree-system.test.d.ts.map +0 -1
  46. package/build/doc-file-tree-system.test.js +0 -105
  47. package/build/doc-file-unknown-reference.d.ts +0 -80
  48. package/build/doc-file-unknown-reference.d.ts.map +0 -1
  49. package/build/doc-file-unknown-reference.js +0 -181
  50. package/build/doc-file-unknown-reference.test.d.ts +0 -2
  51. package/build/doc-file-unknown-reference.test.d.ts.map +0 -1
  52. package/build/doc-file-unknown-reference.test.js +0 -73
  53. package/build/doc-markdown-system.d.ts +0 -44
  54. package/build/doc-markdown-system.d.ts.map +0 -1
  55. package/build/doc-markdown-system.js +0 -153
  56. package/build/doc-markdown-system.test.d.ts +0 -2
  57. package/build/doc-markdown-system.test.d.ts.map +0 -1
  58. package/build/doc-markdown-system.test.js +0 -124
  59. package/build/doc-path-system.d.ts +0 -43
  60. package/build/doc-path-system.d.ts.map +0 -1
  61. package/build/doc-path-system.js +0 -148
  62. package/build/doc-path-system.test.d.ts +0 -2
  63. package/build/doc-path-system.test.d.ts.map +0 -1
  64. package/build/doc-path-system.test.js +0 -67
  65. package/build/entities/doc-file-entity.d.ts +0 -5
  66. package/build/entities/doc-file-entity.d.ts.map +0 -1
  67. package/build/entities/doc-file-entity.js +0 -1
  68. package/build/entities/doc-file-index-entity.d.ts +0 -30
  69. package/build/entities/doc-file-index-entity.d.ts.map +0 -1
  70. package/build/entities/doc-file-index-entity.js +0 -49
  71. package/build/entities/doc-file-index-entity.test.d.ts +0 -2
  72. package/build/entities/doc-file-index-entity.test.d.ts.map +0 -1
  73. package/build/entities/doc-file-index-entity.test.js +0 -195
  74. package/build/entities/doc-file-md-entity.d.ts +0 -30
  75. package/build/entities/doc-file-md-entity.d.ts.map +0 -1
  76. package/build/entities/doc-file-md-entity.js +0 -49
  77. package/build/entities/doc-file-md-entity.test.d.ts +0 -2
  78. package/build/entities/doc-file-md-entity.test.d.ts.map +0 -1
  79. package/build/entities/doc-file-md-entity.test.js +0 -178
  80. package/build/entities/doc-file-unknown-entity.d.ts +0 -26
  81. package/build/entities/doc-file-unknown-entity.d.ts.map +0 -1
  82. package/build/entities/doc-file-unknown-entity.js +0 -45
  83. package/build/entities/doc-file-unknown-entity.test.d.ts +0 -2
  84. package/build/entities/doc-file-unknown-entity.test.d.ts.map +0 -1
  85. package/build/entities/doc-file-unknown-entity.test.js +0 -131
  86. package/build/index.d.ts.map +0 -1
  87. package/build/models.d.ts.map +0 -1
  88. package/build/types.d.ts +0 -154
  89. package/build/types.d.ts.map +0 -1
  90. package/build/types.js +0 -1
  91. package/build/values/doc-content-md-front-matter-value.d.ts +0 -49
  92. package/build/values/doc-content-md-front-matter-value.d.ts.map +0 -1
  93. package/build/values/doc-content-md-front-matter-value.js +0 -94
  94. package/build/values/doc-content-md-front-matter-value.test.d.ts +0 -2
  95. package/build/values/doc-content-md-front-matter-value.test.d.ts.map +0 -1
  96. package/build/values/doc-content-md-front-matter-value.test.js +0 -73
  97. package/build/values/doc-content-md-value.d.ts +0 -66
  98. package/build/values/doc-content-md-value.d.ts.map +0 -1
  99. package/build/values/doc-content-md-value.js +0 -218
  100. package/build/values/doc-content-md-value.test.d.ts +0 -2
  101. package/build/values/doc-content-md-value.test.d.ts.map +0 -1
  102. package/build/values/doc-content-md-value.test.js +0 -179
  103. package/build/values/doc-directory-path-value.d.ts +0 -89
  104. package/build/values/doc-directory-path-value.d.ts.map +0 -1
  105. package/build/values/doc-directory-path-value.js +0 -145
  106. package/build/values/doc-directory-path-value.test.d.ts +0 -2
  107. package/build/values/doc-directory-path-value.test.d.ts.map +0 -1
  108. package/build/values/doc-directory-path-value.test.js +0 -68
  109. package/build/values/doc-file-content-index-value.d.ts +0 -62
  110. package/build/values/doc-file-content-index-value.d.ts.map +0 -1
  111. package/build/values/doc-file-content-index-value.js +0 -134
  112. package/build/values/doc-file-content-index-value.test.d.ts +0 -2
  113. package/build/values/doc-file-content-index-value.test.d.ts.map +0 -1
  114. package/build/values/doc-file-content-index-value.test.js +0 -203
  115. package/build/values/doc-file-content-md-value.d.ts +0 -62
  116. package/build/values/doc-file-content-md-value.d.ts.map +0 -1
  117. package/build/values/doc-file-content-md-value.js +0 -139
  118. package/build/values/doc-file-content-md-value.test.d.ts +0 -2
  119. package/build/values/doc-file-content-md-value.test.d.ts.map +0 -1
  120. package/build/values/doc-file-content-md-value.test.js +0 -160
  121. package/build/values/doc-file-path-value.d.ts +0 -47
  122. package/build/values/doc-file-path-value.d.ts.map +0 -1
  123. package/build/values/doc-file-path-value.js +0 -83
  124. package/build/values/doc-file-path-value.test.d.ts +0 -2
  125. package/build/values/doc-file-path-value.test.d.ts.map +0 -1
  126. package/build/values/doc-file-path-value.test.js +0 -84
  127. package/build/values/doc-front-matter-index-value.d.ts +0 -66
  128. package/build/values/doc-front-matter-index-value.d.ts.map +0 -1
  129. package/build/values/doc-front-matter-index-value.js +0 -185
  130. package/build/values/doc-front-matter-index-value.test.d.ts +0 -2
  131. package/build/values/doc-front-matter-index-value.test.d.ts.map +0 -1
  132. package/build/values/doc-front-matter-index-value.test.js +0 -98
  133. package/build/values/doc-front-matter-md-value-accessor.test.d.ts +0 -2
  134. package/build/values/doc-front-matter-md-value-accessor.test.d.ts.map +0 -1
  135. package/build/values/doc-front-matter-md-value-accessor.test.js +0 -226
  136. package/build/values/doc-front-matter-md-value.d.ts +0 -80
  137. package/build/values/doc-front-matter-md-value.d.ts.map +0 -1
  138. package/build/values/doc-front-matter-md-value.js +0 -257
  139. package/build/values/doc-front-matter-md-value.test.d.ts +0 -2
  140. package/build/values/doc-front-matter-md-value.test.d.ts.map +0 -1
  141. package/build/values/doc-front-matter-md-value.test.js +0 -198
  142. package/build/values/doc-relation-field-value.d.ts +0 -57
  143. package/build/values/doc-relation-field-value.d.ts.map +0 -1
  144. package/build/values/doc-relation-field-value.js +0 -85
  145. package/build/values/doc-relation-field-value.test.d.ts +0 -2
  146. package/build/values/doc-relation-field-value.test.d.ts.map +0 -1
  147. package/build/values/doc-relation-field-value.test.js +0 -115
  148. package/build/values/doc-relation-file-value.d.ts +0 -33
  149. package/build/values/doc-relation-file-value.d.ts.map +0 -1
  150. package/build/values/doc-relation-file-value.js +0 -55
  151. package/build/values/doc-relation-file-value.test.d.ts +0 -2
  152. package/build/values/doc-relation-file-value.test.d.ts.map +0 -1
  153. package/build/values/doc-relation-file-value.test.js +0 -77
  154. package/build/values/doc-relation-value.d.ts +0 -34
  155. package/build/values/doc-relation-value.d.ts.map +0 -1
  156. package/build/values/doc-relation-value.js +0 -56
  157. package/build/values/doc-relation-value.test.d.ts +0 -2
  158. package/build/values/doc-relation-value.test.d.ts.map +0 -1
  159. package/build/values/doc-relation-value.test.js +0 -89
  160. package/build/values/doc-schema-field-boolean-multiple-value.d.ts +0 -23
  161. package/build/values/doc-schema-field-boolean-multiple-value.d.ts.map +0 -1
  162. package/build/values/doc-schema-field-boolean-multiple-value.js +0 -43
  163. package/build/values/doc-schema-field-boolean-multiple-value.test.d.ts +0 -2
  164. package/build/values/doc-schema-field-boolean-multiple-value.test.d.ts.map +0 -1
  165. package/build/values/doc-schema-field-boolean-multiple-value.test.js +0 -76
  166. package/build/values/doc-schema-field-boolean-single-value.d.ts +0 -23
  167. package/build/values/doc-schema-field-boolean-single-value.d.ts.map +0 -1
  168. package/build/values/doc-schema-field-boolean-single-value.js +0 -39
  169. package/build/values/doc-schema-field-boolean-single-value.test.d.ts +0 -2
  170. package/build/values/doc-schema-field-boolean-single-value.test.d.ts.map +0 -1
  171. package/build/values/doc-schema-field-boolean-single-value.test.js +0 -73
  172. package/build/values/doc-schema-field-factory.d.ts +0 -37
  173. package/build/values/doc-schema-field-factory.d.ts.map +0 -1
  174. package/build/values/doc-schema-field-factory.js +0 -151
  175. package/build/values/doc-schema-field-factory.test.d.ts +0 -2
  176. package/build/values/doc-schema-field-factory.test.d.ts.map +0 -1
  177. package/build/values/doc-schema-field-factory.test.js +0 -215
  178. package/build/values/doc-schema-field-number-multiple-value.d.ts +0 -23
  179. package/build/values/doc-schema-field-number-multiple-value.d.ts.map +0 -1
  180. package/build/values/doc-schema-field-number-multiple-value.js +0 -43
  181. package/build/values/doc-schema-field-number-multiple-value.test.d.ts +0 -2
  182. package/build/values/doc-schema-field-number-multiple-value.test.d.ts.map +0 -1
  183. package/build/values/doc-schema-field-number-multiple-value.test.js +0 -79
  184. package/build/values/doc-schema-field-number-single-value.d.ts +0 -23
  185. package/build/values/doc-schema-field-number-single-value.d.ts.map +0 -1
  186. package/build/values/doc-schema-field-number-single-value.js +0 -39
  187. package/build/values/doc-schema-field-number-single-value.test.d.ts +0 -2
  188. package/build/values/doc-schema-field-number-single-value.test.d.ts.map +0 -1
  189. package/build/values/doc-schema-field-number-single-value.test.js +0 -77
  190. package/build/values/doc-schema-field-relation-multiple-value.d.ts +0 -24
  191. package/build/values/doc-schema-field-relation-multiple-value.d.ts.map +0 -1
  192. package/build/values/doc-schema-field-relation-multiple-value.js +0 -46
  193. package/build/values/doc-schema-field-relation-multiple-value.test.d.ts +0 -2
  194. package/build/values/doc-schema-field-relation-multiple-value.test.d.ts.map +0 -1
  195. package/build/values/doc-schema-field-relation-multiple-value.test.js +0 -83
  196. package/build/values/doc-schema-field-relation-single-value.d.ts +0 -24
  197. package/build/values/doc-schema-field-relation-single-value.d.ts.map +0 -1
  198. package/build/values/doc-schema-field-relation-single-value.js +0 -42
  199. package/build/values/doc-schema-field-relation-single-value.test.d.ts +0 -2
  200. package/build/values/doc-schema-field-relation-single-value.test.d.ts.map +0 -1
  201. package/build/values/doc-schema-field-relation-single-value.test.js +0 -83
  202. package/build/values/doc-schema-field-select-number-multiple-value.d.ts +0 -25
  203. package/build/values/doc-schema-field-select-number-multiple-value.d.ts.map +0 -1
  204. package/build/values/doc-schema-field-select-number-multiple-value.js +0 -48
  205. package/build/values/doc-schema-field-select-number-multiple-value.test.d.ts +0 -2
  206. package/build/values/doc-schema-field-select-number-multiple-value.test.d.ts.map +0 -1
  207. package/build/values/doc-schema-field-select-number-multiple-value.test.js +0 -84
  208. package/build/values/doc-schema-field-select-number-single-value.d.ts +0 -25
  209. package/build/values/doc-schema-field-select-number-single-value.d.ts.map +0 -1
  210. package/build/values/doc-schema-field-select-number-single-value.js +0 -45
  211. package/build/values/doc-schema-field-select-number-single-value.test.d.ts +0 -2
  212. package/build/values/doc-schema-field-select-number-single-value.test.d.ts.map +0 -1
  213. package/build/values/doc-schema-field-select-number-single-value.test.js +0 -96
  214. package/build/values/doc-schema-field-select-text-multiple-value.d.ts +0 -25
  215. package/build/values/doc-schema-field-select-text-multiple-value.d.ts.map +0 -1
  216. package/build/values/doc-schema-field-select-text-multiple-value.js +0 -48
  217. package/build/values/doc-schema-field-select-text-multiple-value.test.d.ts +0 -2
  218. package/build/values/doc-schema-field-select-text-multiple-value.test.d.ts.map +0 -1
  219. package/build/values/doc-schema-field-select-text-multiple-value.test.js +0 -84
  220. package/build/values/doc-schema-field-select-text-single-value.d.ts +0 -25
  221. package/build/values/doc-schema-field-select-text-single-value.d.ts.map +0 -1
  222. package/build/values/doc-schema-field-select-text-single-value.js +0 -47
  223. package/build/values/doc-schema-field-select-text-single-value.test.d.ts +0 -2
  224. package/build/values/doc-schema-field-select-text-single-value.test.d.ts.map +0 -1
  225. package/build/values/doc-schema-field-select-text-single-value.test.js +0 -96
  226. package/build/values/doc-schema-field-text-multiple-value.d.ts +0 -23
  227. package/build/values/doc-schema-field-text-multiple-value.d.ts.map +0 -1
  228. package/build/values/doc-schema-field-text-multiple-value.js +0 -43
  229. package/build/values/doc-schema-field-text-multiple-value.test.d.ts +0 -2
  230. package/build/values/doc-schema-field-text-multiple-value.test.d.ts.map +0 -1
  231. package/build/values/doc-schema-field-text-multiple-value.test.js +0 -78
  232. package/build/values/doc-schema-field-text-single-value.d.ts +0 -23
  233. package/build/values/doc-schema-field-text-single-value.d.ts.map +0 -1
  234. package/build/values/doc-schema-field-text-single-value.js +0 -39
  235. package/build/values/doc-schema-field-text-single-value.test.d.ts +0 -2
  236. package/build/values/doc-schema-field-text-single-value.test.d.ts.map +0 -1
  237. package/build/values/doc-schema-field-text-single-value.test.js +0 -76
  238. package/build/values/doc-schema-field-type-value.d.ts +0 -61
  239. package/build/values/doc-schema-field-type-value.d.ts.map +0 -1
  240. package/build/values/doc-schema-field-type-value.js +0 -134
  241. package/build/values/doc-schema-field-type-value.test.d.ts +0 -2
  242. package/build/values/doc-schema-field-type-value.test.d.ts.map +0 -1
  243. package/build/values/doc-schema-field-type-value.test.js +0 -101
  244. package/build/values/doc-schema-field-value.d.ts +0 -45
  245. package/build/values/doc-schema-field-value.d.ts.map +0 -1
  246. package/build/values/doc-schema-field-value.js +0 -1
  247. package/build/values/doc-schema-value.d.ts +0 -99
  248. package/build/values/doc-schema-value.d.ts.map +0 -1
  249. package/build/values/doc-schema-value.js +0 -269
  250. package/build/values/doc-schema-value.test.d.ts +0 -2
  251. package/build/values/doc-schema-value.test.d.ts.map +0 -1
  252. package/build/values/doc-schema-value.test.js +0 -301
  253. package/build/values/doc-tree-directory-node-value.d.ts +0 -36
  254. package/build/values/doc-tree-directory-node-value.d.ts.map +0 -1
  255. package/build/values/doc-tree-directory-node-value.js +0 -71
  256. package/build/values/doc-tree-directory-node-value.test.d.ts +0 -2
  257. package/build/values/doc-tree-directory-node-value.test.d.ts.map +0 -1
  258. package/build/values/doc-tree-directory-node-value.test.js +0 -162
  259. package/build/values/doc-tree-file-node-value.d.ts +0 -33
  260. package/build/values/doc-tree-file-node-value.d.ts.map +0 -1
  261. package/build/values/doc-tree-file-node-value.js +0 -56
  262. package/build/values/doc-tree-file-node-value.test.d.ts +0 -2
  263. package/build/values/doc-tree-file-node-value.test.d.ts.map +0 -1
  264. package/build/values/doc-tree-file-node-value.test.js +0 -113
  265. package/debug/debug.ts +0 -108
@@ -1,94 +0,0 @@
1
- import { parse, stringify } from "yaml";
2
- /**
3
- * フロントマターの処理を担当
4
- */
5
- export class DocContentMdFrontMatterValue {
6
- data;
7
- yamlText;
8
- constructor(data, yamlText = "") {
9
- this.data = data;
10
- this.yamlText = yamlText;
11
- }
12
- /**
13
- * YAMLテキストからフロントマターインスタンスを作成
14
- */
15
- static fromYamlText(yamlText) {
16
- if (!yamlText || typeof yamlText !== "string" || !yamlText.trim()) {
17
- return new DocContentMdFrontMatterValue({}, "");
18
- }
19
- const parsed = parse(yamlText) || {};
20
- return new DocContentMdFrontMatterValue(parsed, yamlText);
21
- }
22
- /**
23
- * Markdownテキストからフロントマターインスタンスを作成
24
- */
25
- static fromMarkdown(markdownText) {
26
- if (!markdownText || !markdownText.startsWith("---")) {
27
- return DocContentMdFrontMatterValue.empty();
28
- }
29
- const startIndex = markdownText.indexOf("---");
30
- const endIndex = markdownText.indexOf("---", startIndex + 3);
31
- if (endIndex === -1) {
32
- return DocContentMdFrontMatterValue.empty();
33
- }
34
- const yamlText = markdownText.slice(startIndex + 3, endIndex).trim();
35
- return DocContentMdFrontMatterValue.fromYamlText(yamlText);
36
- }
37
- /**
38
- * 空のフロントマターインスタンスを作成
39
- */
40
- static empty() {
41
- return new DocContentMdFrontMatterValue(null, "");
42
- }
43
- /**
44
- * フロントマターデータからインスタンスを作成
45
- */
46
- static fromFrontMatter(data) {
47
- const instance = new DocContentMdFrontMatterValue(data, "");
48
- // YAMLテキストを生成して保存
49
- const yamlText = instance.frontMatterText();
50
- return new DocContentMdFrontMatterValue(data, yamlText);
51
- }
52
- /**
53
- * フロントマターをYAMLテキストに変換
54
- */
55
- frontMatterText() {
56
- if (this.data === null || Object.keys(this.data).length === 0)
57
- return "";
58
- return stringify(this.data).trim();
59
- }
60
- /**
61
- * フロントマターを更新した新しいインスタンスを作成
62
- */
63
- update(draft) {
64
- const updatedData = { ...(this.data || {}) };
65
- for (const [key, value] of Object.entries(draft)) {
66
- updatedData[key] = value;
67
- }
68
- return DocContentMdFrontMatterValue.fromFrontMatter(updatedData);
69
- }
70
- /**
71
- * フロントマターが空かどうか
72
- */
73
- isEmpty() {
74
- return this.data === null || Object.keys(this.data).length === 0;
75
- }
76
- /**
77
- * 指定したキーの値を取得
78
- */
79
- get(key) {
80
- return this.data?.[key];
81
- }
82
- /**
83
- * 指定したキーが存在するか
84
- */
85
- has(key) {
86
- return this.data !== null && key in this.data;
87
- }
88
- /**
89
- * フロントマターのキー一覧を取得
90
- */
91
- keys() {
92
- return this.data ? Object.keys(this.data) : [];
93
- }
94
- }
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=doc-content-md-front-matter-value.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"doc-content-md-front-matter-value.test.d.ts","sourceRoot":"","sources":["../../lib/values/doc-content-md-front-matter-value.test.ts"],"names":[],"mappings":""}
@@ -1,73 +0,0 @@
1
- import { describe, expect, it } from "bun:test";
2
- import { DocContentMdFrontMatterValue } from "./doc-content-md-front-matter-value";
3
- describe("OpenMarkdownFrontmatter", () => {
4
- describe("fromMarkdown", () => {
5
- it("Markdownテキストからフロントマターを抽出できる", () => {
6
- const markdown = `---
7
- title: テストタイトル
8
- description: テスト説明
9
- tags:
10
- - tag1
11
- - tag2
12
- ---
13
- # 見出し
14
- 本文コンテンツ`;
15
- const frontMatter = DocContentMdFrontMatterValue.fromMarkdown(markdown);
16
- expect(frontMatter.data).toEqual({
17
- title: "テストタイトル",
18
- description: "テスト説明",
19
- tags: ["tag1", "tag2"],
20
- });
21
- expect(frontMatter.yamlText).toBe(`title: テストタイトル
22
- description: テスト説明
23
- tags:
24
- - tag1
25
- - tag2`);
26
- });
27
- it("フロントマターがない場合は空のインスタンスを返す", () => {
28
- const markdown = `# 見出し
29
- 本文コンテンツ`;
30
- const frontMatter = DocContentMdFrontMatterValue.fromMarkdown(markdown);
31
- expect(frontMatter.data).toBeNull();
32
- expect(frontMatter.yamlText).toBe("");
33
- });
34
- it("フロントマターの終わりがない場合は空のインスタンスを返す", () => {
35
- const markdown = `---
36
- title: テストタイトル
37
- # 見出し
38
- 本文コンテンツ`;
39
- const frontMatter = DocContentMdFrontMatterValue.fromMarkdown(markdown);
40
- expect(frontMatter.data).toBeNull();
41
- expect(frontMatter.yamlText).toBe("");
42
- });
43
- it("空のフロントマターも正しく処理する", () => {
44
- const markdown = `---
45
- ---
46
- # 見出し
47
- 本文コンテンツ`;
48
- const frontMatter = DocContentMdFrontMatterValue.fromMarkdown(markdown);
49
- expect(frontMatter.data).toEqual({});
50
- expect(frontMatter.yamlText).toBe("");
51
- });
52
- });
53
- describe("update", () => {
54
- it("更新後もyamlTextが保持される", () => {
55
- const frontMatter = DocContentMdFrontMatterValue.fromFrontMatter({
56
- title: "元のタイトル",
57
- description: "元の説明",
58
- });
59
- const updated = frontMatter.update({
60
- title: "新しいタイトル",
61
- newField: "新しいフィールド",
62
- });
63
- expect(updated.data).toEqual({
64
- title: "新しいタイトル",
65
- description: "元の説明",
66
- newField: "新しいフィールド",
67
- });
68
- expect(updated.yamlText).toContain("title: 新しいタイトル");
69
- expect(updated.yamlText).toContain("description: 元の説明");
70
- expect(updated.yamlText).toContain("newField: 新しいフィールド");
71
- });
72
- });
73
- });
@@ -1,66 +0,0 @@
1
- import { DocContentMdFrontMatterValue } from "./doc-content-md-front-matter-value";
2
- /**
3
- * Markdownの解析と生成
4
- */
5
- export declare class DocContentMdValue {
6
- readonly text: string;
7
- constructor(text: string);
8
- /**
9
- * Front Matter
10
- */
11
- get frontMatter(): DocContentMdFrontMatterValue;
12
- /**
13
- * body
14
- */
15
- get content(): string;
16
- /**
17
- * title
18
- */
19
- get title(): string;
20
- /**
21
- * H1の次の段落、またはH1がない場合は最初の段落をdescriptionとして取得する
22
- */
23
- get description(): string | null;
24
- /**
25
- * 新しいフロントマターとコンテンツでMarkdownインスタンスを作成
26
- */
27
- static fromProps(props: {
28
- frontMatter: Record<string, unknown>;
29
- content: string;
30
- }): DocContentMdValue;
31
- /**
32
- * 現在のフロントマターをYAMLテキストに変換する
33
- */
34
- frontMatterToText(): string;
35
- /**
36
- * 現在のフロントマターを更新して新しいMarkdownテキストを生成
37
- */
38
- updateFrontMatter(draft: Record<string, unknown>): string;
39
- /**
40
- * 新しいフロントマターでOpenMarkdownインスタンスを作成
41
- */
42
- withFrontMatter(frontMatter: Record<string, unknown>): DocContentMdValue;
43
- /**
44
- * フロントマターを更新した新しいOpenMarkdownインスタンスを作成
45
- */
46
- withUpdatedFrontMatter(draft: Record<string, unknown>): DocContentMdValue;
47
- /**
48
- * マークダウンをtitle、description、本文の3つの部分に分離する
49
- */
50
- private parseContentParts;
51
- /**
52
- * title、description、本文からマークダウンを構築する
53
- */
54
- private buildContent;
55
- /**
56
- * H1タイトルを更新した新しいOpenMarkdownインスタンスを作成
57
- */
58
- withTitle(newTitle: string): DocContentMdValue;
59
- /**
60
- * H1の次のdescription段落を更新した新しいOpenMarkdownインスタンスを作成
61
- * @param newDescription 新しいdescription
62
- * @param defaultTitle H1がない場合に使用するデフォルトタイトル
63
- */
64
- withDescription(newDescription: string, defaultTitle?: string): DocContentMdValue;
65
- }
66
- //# sourceMappingURL=doc-content-md-value.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"doc-content-md-value.d.ts","sourceRoot":"","sources":["../../lib/values/doc-content-md-value.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,qCAAqC,CAAA;AAElF;;GAEG;AACH,qBAAa,iBAAiB;IAChB,QAAQ,CAAC,IAAI,EAAE,MAAM;IAAjC,YAAqB,IAAI,EAAE,MAAM,EAAI;IAErC;;OAEG;IACH,IAAI,WAAW,IAAI,4BAA4B,CAE9C;IAED;;OAEG;IACH,IAAI,OAAO,IAAI,MAAM,CAyBpB;IAED;;OAEG;IACH,IAAI,KAAK,IAAI,MAAM,CAalB;IAED;;OAEG;IACH,IAAW,WAAW,IAAI,MAAM,GAAG,IAAI,CAsBtC;IAED;;OAEG;IACH,OAAc,SAAS,CAAC,KAAK,EAAE;QAC7B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QACpC,OAAO,EAAE,MAAM,CAAA;KAChB,GAAG,iBAAiB,CAkBpB;IAED;;OAEG;IACI,iBAAiB,IAAI,MAAM,CAEjC;IAED;;OAEG;IACI,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAM/D;IAED;;OAEG;IACI,eAAe,CACpB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACnC,iBAAiB,CAKnB;IAED;;OAEG;IACI,sBAAsB,CAC3B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,iBAAiB,CAGnB;IAED;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAwDzB;;OAEG;IACH,OAAO,CAAC,YAAY;IAsBpB;;OAEG;IACI,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,iBAAiB,CAYpD;IAED;;;;OAIG;IACI,eAAe,CACpB,cAAc,EAAE,MAAM,EACtB,YAAY,CAAC,EAAE,MAAM,GACpB,iBAAiB,CAoBnB;CACF"}
@@ -1,218 +0,0 @@
1
- import { DocContentMdFrontMatterValue } from "./doc-content-md-front-matter-value";
2
- /**
3
- * Markdownの解析と生成
4
- */
5
- export class DocContentMdValue {
6
- text;
7
- constructor(text) {
8
- this.text = text;
9
- }
10
- /**
11
- * Front Matter
12
- */
13
- get frontMatter() {
14
- return DocContentMdFrontMatterValue.fromMarkdown(this.text);
15
- }
16
- /**
17
- * body
18
- */
19
- get content() {
20
- if (!this.text || typeof this.text !== "string") {
21
- return this.text || "";
22
- }
23
- if (!this.text.startsWith("---")) {
24
- return this.text;
25
- }
26
- const startIndex = this.text.indexOf("---");
27
- const endIndex = this.text.indexOf("---", startIndex + 3);
28
- if (endIndex === -1) {
29
- return this.text;
30
- }
31
- let content = this.text.slice(endIndex + 3);
32
- if (this.text.slice(endIndex + 3).startsWith("\n\n")) {
33
- content = `\n${this.text.slice(endIndex + 4).trim()}`;
34
- }
35
- else {
36
- content = this.text.slice(endIndex + 3).trim();
37
- }
38
- return content.trim();
39
- }
40
- /**
41
- * title
42
- */
43
- get title() {
44
- const content = this.content;
45
- if (!content || typeof content !== "string") {
46
- return "";
47
- }
48
- const titleMatch = content.match(/^#\s+(.*?)$/m);
49
- if (!titleMatch || !titleMatch[1]) {
50
- return "";
51
- }
52
- return titleMatch[1].trim();
53
- }
54
- /**
55
- * H1の次の段落、またはH1がない場合は最初の段落をdescriptionとして取得する
56
- */
57
- get description() {
58
- const content = this.content;
59
- // H1を見つける
60
- const h1Match = content.match(/^#\s+(.+)$/m);
61
- let searchContent;
62
- if (h1Match) {
63
- // H1がある場合は、H1の後の内容から検索
64
- const h1EndIndex = (h1Match.index ?? 0) + h1Match[0].length;
65
- searchContent = content.substring(h1EndIndex);
66
- }
67
- else {
68
- // H1がない場合は、コンテンツ全体から検索
69
- searchContent = content;
70
- }
71
- // 空行をスキップして最初の段落を取得(見出しやリストが来るまで)
72
- const paragraphMatch = searchContent.match(/^\s*\n*([^#\n*-][^\n]*(?:\n(?![#\s*-])[^\n]*)*)/m);
73
- return paragraphMatch ? (paragraphMatch[1]?.trim() ?? null) : null;
74
- }
75
- /**
76
- * 新しいフロントマターとコンテンツでMarkdownインスタンスを作成
77
- */
78
- static fromProps(props) {
79
- const contentOpenMarkdown = new DocContentMdValue(props.content);
80
- const existingContent = contentOpenMarkdown.content;
81
- // 新しいフロントマターでMarkdownテキストを生成
82
- const frontMatterInstance = DocContentMdFrontMatterValue.fromFrontMatter(props.frontMatter);
83
- const frontMatterText = frontMatterInstance.frontMatterText();
84
- let markdownText;
85
- if (frontMatterText) {
86
- markdownText = `---\n${frontMatterText}\n---\n\n${existingContent}`.trim();
87
- }
88
- else {
89
- markdownText = existingContent;
90
- }
91
- return new DocContentMdValue(markdownText);
92
- }
93
- /**
94
- * 現在のフロントマターをYAMLテキストに変換する
95
- */
96
- frontMatterToText() {
97
- return this.frontMatter.frontMatterText();
98
- }
99
- /**
100
- * 現在のフロントマターを更新して新しいMarkdownテキストを生成
101
- */
102
- updateFrontMatter(draft) {
103
- const updatedFrontMatter = this.frontMatter.update(draft);
104
- return DocContentMdValue.fromProps({
105
- frontMatter: updatedFrontMatter.data || {},
106
- content: this.content,
107
- }).text;
108
- }
109
- /**
110
- * 新しいフロントマターでOpenMarkdownインスタンスを作成
111
- */
112
- withFrontMatter(frontMatter) {
113
- return DocContentMdValue.fromProps({
114
- frontMatter,
115
- content: this.content,
116
- });
117
- }
118
- /**
119
- * フロントマターを更新した新しいOpenMarkdownインスタンスを作成
120
- */
121
- withUpdatedFrontMatter(draft) {
122
- const updatedFrontMatter = this.frontMatter.update(draft);
123
- return this.withFrontMatter(updatedFrontMatter.data || {});
124
- }
125
- /**
126
- * マークダウンをtitle、description、本文の3つの部分に分離する
127
- */
128
- parseContentParts() {
129
- const content = this.content;
130
- // H1を見つける
131
- const h1Match = content.match(/^#\s+(.+)$/m);
132
- if (!h1Match) {
133
- // H1がない場合、最初の段落をdescriptionとして抽出
134
- const paragraphMatch = content.match(/^(\s*)([^#\n*-][^\n]*(?:\n(?![#\s*-])[^\n]*)*)(.*)/ms);
135
- if (paragraphMatch) {
136
- const [, , descriptionPart, remaining] = paragraphMatch;
137
- return {
138
- title: null,
139
- description: descriptionPart?.trim() ?? "",
140
- body: remaining?.trim() ?? "",
141
- };
142
- }
143
- return {
144
- title: null,
145
- description: null,
146
- body: content.trim(),
147
- };
148
- }
149
- const title = h1Match[1]?.trim() ?? "";
150
- const h1EndIndex = (h1Match.index ?? 0) + h1Match[0].length;
151
- const afterH1 = content.substring(h1EndIndex);
152
- // description段落を見つける
153
- const paragraphMatch = afterH1.match(/^(\s*\n*)([^#\n*-][^\n]*(?:\n(?![#\s*-])[^\n]*)*)(.*)/ms);
154
- if (paragraphMatch) {
155
- const [, , descriptionPart, remaining] = paragraphMatch;
156
- return {
157
- title,
158
- description: descriptionPart?.trim() ?? "",
159
- body: remaining?.trim() ?? "",
160
- };
161
- }
162
- return {
163
- title,
164
- description: null,
165
- body: afterH1.trim(),
166
- };
167
- }
168
- /**
169
- * title、description、本文からマークダウンを構築する
170
- */
171
- buildContent(title, description, body) {
172
- const parts = [];
173
- if (title) {
174
- parts.push(`# ${title}`);
175
- }
176
- if (description) {
177
- parts.push(description);
178
- }
179
- if (body) {
180
- parts.push(body);
181
- }
182
- return parts.join("\n\n");
183
- }
184
- /**
185
- * H1タイトルを更新した新しいOpenMarkdownインスタンスを作成
186
- */
187
- withTitle(newTitle) {
188
- const { description, body } = this.parseContentParts();
189
- const updatedContent = this.buildContent(newTitle, description, body);
190
- // 既存のFrontMatterを保持
191
- const frontMatterData = this.frontMatter.data !== null ? this.frontMatter.data : {};
192
- return DocContentMdValue.fromProps({
193
- frontMatter: frontMatterData,
194
- content: updatedContent,
195
- });
196
- }
197
- /**
198
- * H1の次のdescription段落を更新した新しいOpenMarkdownインスタンスを作成
199
- * @param newDescription 新しいdescription
200
- * @param defaultTitle H1がない場合に使用するデフォルトタイトル
201
- */
202
- withDescription(newDescription, defaultTitle) {
203
- const { title, body } = this.parseContentParts();
204
- // H1がない場合、デフォルトタイトルを使用
205
- const finalTitle = title || defaultTitle;
206
- if (!finalTitle) {
207
- // タイトルが提供されない場合は変更しない
208
- return this;
209
- }
210
- const updatedContent = this.buildContent(finalTitle, newDescription, body);
211
- // 既存のFrontMatterを保持
212
- const frontMatterData = this.frontMatter.data !== null ? this.frontMatter.data : {};
213
- return DocContentMdValue.fromProps({
214
- frontMatter: frontMatterData,
215
- content: updatedContent,
216
- });
217
- }
218
- }
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=doc-content-md-value.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"doc-content-md-value.test.d.ts","sourceRoot":"","sources":["../../lib/values/doc-content-md-value.test.ts"],"names":[],"mappings":""}
@@ -1,179 +0,0 @@
1
- import { describe, expect, it } from "bun:test";
2
- import { z } from "zod/v4";
3
- import { DocContentMdValue } from "./doc-content-md-value";
4
- describe("parseMarkdown", () => {
5
- it("フロントマターがある場合は正しく抽出する", () => {
6
- const text = `---
7
- title: テストタイトル
8
- description: テスト説明
9
- ---
10
- # 見出し
11
- 本文コンテンツ`;
12
- const openMarkdown = new DocContentMdValue(text);
13
- expect(openMarkdown.frontMatter.data).toEqual({
14
- title: "テストタイトル",
15
- description: "テスト説明",
16
- });
17
- expect(openMarkdown.content).toBe("# 見出し\n本文コンテンツ");
18
- expect(openMarkdown.title).toBe("見出し");
19
- });
20
- it("フロントマターがない場合はnullを返す", () => {
21
- const text = `# 見出し
22
- 本文コンテンツ`;
23
- const openMarkdown = new DocContentMdValue(text);
24
- expect(openMarkdown.frontMatter.data).toBeNull();
25
- expect(openMarkdown.content).toBe("# 見出し\n本文コンテンツ");
26
- expect(openMarkdown.title).toBe("見出し");
27
- });
28
- it("最初の行が---でもフロントマターの終わりがない場合はnullを返す", () => {
29
- const text = `---
30
- ここには終わりがない
31
- # 見出し
32
- 本文コンテンツ`;
33
- const openMarkdown = new DocContentMdValue(text);
34
- expect(openMarkdown.frontMatter.data).toBeNull();
35
- expect(openMarkdown.content).toContain("---");
36
- });
37
- it("空のフロントマターを処理できる", () => {
38
- const text = `---
39
- ---
40
- # 見出し
41
- コンテンツ部分`;
42
- const openMarkdown = new DocContentMdValue(text);
43
- expect(openMarkdown.frontMatter.data).toEqual({});
44
- expect(openMarkdown.content).toBe("# 見出し\nコンテンツ部分");
45
- expect(openMarkdown.title).toBe("見出し");
46
- });
47
- it("フロントマターの後に空行がある場合も処理できる", () => {
48
- const text = `---
49
- title: テストタイトル
50
- ---
51
-
52
- # 見出し
53
- 本文コンテンツ`;
54
- const openMarkdown = new DocContentMdValue(text);
55
- expect(openMarkdown.frontMatter.data).toEqual({ title: "テストタイトル" });
56
- expect(openMarkdown.content).toBe("# 見出し\n本文コンテンツ");
57
- expect(openMarkdown.title).toBe("見出し");
58
- });
59
- });
60
- describe("OpenMarkdown instance", () => {
61
- it("基本的なfront matterを解析できる", () => {
62
- const text = `---
63
- title: テストタイトル
64
- description: テスト説明
65
- ---
66
- # 見出し
67
- 本文コンテンツ`;
68
- const openMarkdown = new DocContentMdValue(text);
69
- expect(openMarkdown.frontMatter.data).toEqual({
70
- title: "テストタイトル",
71
- description: "テスト説明",
72
- });
73
- expect(openMarkdown.content).toBe("# 見出し\n本文コンテンツ");
74
- expect(openMarkdown.title).toBe("見出し");
75
- });
76
- it("空のfront matterも処理できる", () => {
77
- const text = `---
78
- ---
79
- # 見出し
80
- 本文コンテンツ`;
81
- const openMarkdown = new DocContentMdValue(text);
82
- expect(openMarkdown.frontMatter.data).toEqual({});
83
- expect(openMarkdown.content).toBe("# 見出し\n本文コンテンツ");
84
- expect(openMarkdown.title).toBe("見出し");
85
- });
86
- it("配列値を含むfront matterを処理できる", () => {
87
- const text = `---
88
- title: テストタイトル
89
- tags:
90
- - タグ1
91
- - タグ2
92
- - タグ3
93
- ---
94
- # 見出し
95
- 本文コンテンツ`;
96
- const openMarkdown = new DocContentMdValue(text);
97
- expect(openMarkdown.frontMatter.data).toEqual({
98
- title: "テストタイトル",
99
- tags: ["タグ1", "タグ2", "タグ3"],
100
- });
101
- expect(openMarkdown.content).toBe("# 見出し\n本文コンテンツ");
102
- expect(openMarkdown.title).toBe("見出し");
103
- });
104
- it("型変換を含むスキーマでも正しく動作する", () => {
105
- // スキーマの型を明示的に定義
106
- const schema = z.object({
107
- title: z.string(),
108
- count: z.number().transform((val) => val * 2),
109
- });
110
- const text = `---
111
- title: テストタイトル
112
- count: 42
113
- ---
114
- # 見出し
115
- 本文コンテンツ`;
116
- const openMarkdown = new DocContentMdValue(text);
117
- const data = schema.parse(openMarkdown.frontMatter.data);
118
- expect(data).toEqual({
119
- title: "テストタイトル",
120
- count: 84,
121
- });
122
- expect(openMarkdown.content).toBe("# 見出し\n本文コンテンツ");
123
- expect(openMarkdown.title).toBe("見出し");
124
- });
125
- it("fromPropsメソッドでMarkdownテキストを生成できる", () => {
126
- const text = `---
127
- title: テストタイトル
128
- ---
129
- # 見出し
130
- 本文コンテンツ`;
131
- const openMarkdown = new DocContentMdValue(text);
132
- const generatedMarkdown = DocContentMdValue.fromProps({
133
- frontMatter: openMarkdown.frontMatter.data || {},
134
- content: openMarkdown.content,
135
- });
136
- expect(generatedMarkdown.text).toContain("title: テストタイトル");
137
- expect(generatedMarkdown.text).toContain("# 見出し");
138
- expect(generatedMarkdown.text).toContain("本文コンテンツ");
139
- });
140
- it("updateFrontMatterメソッドでフロントマターを更新できる", () => {
141
- const text = `---
142
- title: テストタイトル
143
- ---
144
- # 見出し
145
- 本文コンテンツ`;
146
- const openMarkdown = new DocContentMdValue(text);
147
- const updatedText = openMarkdown.updateFrontMatter({
148
- title: "更新されたタイトル",
149
- description: "新しい説明",
150
- });
151
- expect(updatedText).toContain("title: 更新されたタイトル");
152
- expect(updatedText).toContain("description: 新しい説明");
153
- expect(updatedText).toContain("# 見出し");
154
- expect(updatedText).toContain("本文コンテンツ");
155
- });
156
- it("frontMatter.yamlTextでフロントマターYAMLテキストを取得できる", () => {
157
- const text = `---
158
- title: テストタイトル
159
- description: テスト説明
160
- tags:
161
- - tag1
162
- - tag2
163
- ---
164
- # 見出し
165
- 本文コンテンツ`;
166
- const openMarkdown = new DocContentMdValue(text);
167
- expect(openMarkdown.frontMatter.yamlText).toBe(`title: テストタイトル
168
- description: テスト説明
169
- tags:
170
- - tag1
171
- - tag2`);
172
- });
173
- it("フロントマターがない場合frontMatter.yamlTextは空文字", () => {
174
- const text = `# 見出し
175
- 本文コンテンツ`;
176
- const openMarkdown = new DocContentMdValue(text);
177
- expect(openMarkdown.frontMatter.yamlText).toBe("");
178
- });
179
- });