@interactive-inc/docs-client 0.0.3 → 0.0.5

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 (268) hide show
  1. package/README.md +228 -0
  2. package/build/doc-client.d.ts +59 -0
  3. package/build/doc-client.d.ts.map +1 -0
  4. package/build/doc-client.js +95 -0
  5. package/build/doc-client.test.d.ts +2 -0
  6. package/build/doc-client.test.d.ts.map +1 -0
  7. package/build/doc-client.test.js +38 -0
  8. package/build/doc-directory-reference.d.ts +65 -0
  9. package/build/doc-directory-reference.d.ts.map +1 -0
  10. package/build/doc-directory-reference.js +292 -0
  11. package/build/doc-directory-reference.test.d.ts +2 -0
  12. package/build/doc-directory-reference.test.d.ts.map +1 -0
  13. package/build/doc-directory-reference.test.js +100 -0
  14. package/build/doc-file-index-reference.d.ts +72 -0
  15. package/build/doc-file-index-reference.d.ts.map +1 -0
  16. package/build/doc-file-index-reference.js +191 -0
  17. package/build/doc-file-index-reference.test.d.ts +2 -0
  18. package/build/doc-file-index-reference.test.d.ts.map +1 -0
  19. package/build/doc-file-index-reference.test.js +77 -0
  20. package/build/doc-file-md-reference.d.ts +97 -0
  21. package/build/doc-file-md-reference.d.ts.map +1 -0
  22. package/build/doc-file-md-reference.js +297 -0
  23. package/build/doc-file-md-reference.test.d.ts +2 -0
  24. package/build/doc-file-md-reference.test.d.ts.map +1 -0
  25. package/build/doc-file-md-reference.test.js +465 -0
  26. package/build/doc-file-relation-reference.d.ts +54 -0
  27. package/build/doc-file-relation-reference.d.ts.map +1 -0
  28. package/build/doc-file-relation-reference.js +109 -0
  29. package/build/doc-file-system-debug.d.ts +81 -0
  30. package/build/doc-file-system-debug.d.ts.map +1 -0
  31. package/build/doc-file-system-debug.js +317 -0
  32. package/build/doc-file-system.d.ts +100 -0
  33. package/build/doc-file-system.d.ts.map +1 -0
  34. package/build/doc-file-system.js +210 -0
  35. package/build/doc-file-tree-system.d.ts +38 -0
  36. package/build/doc-file-tree-system.d.ts.map +1 -0
  37. package/build/doc-file-tree-system.js +153 -0
  38. package/build/doc-file-tree-system.test.d.ts +2 -0
  39. package/build/doc-file-tree-system.test.d.ts.map +1 -0
  40. package/build/doc-file-tree-system.test.js +105 -0
  41. package/build/doc-file-unknown-reference.d.ts +80 -0
  42. package/build/doc-file-unknown-reference.d.ts.map +1 -0
  43. package/build/doc-file-unknown-reference.js +181 -0
  44. package/build/doc-file-unknown-reference.test.d.ts +2 -0
  45. package/build/doc-file-unknown-reference.test.d.ts.map +1 -0
  46. package/build/doc-file-unknown-reference.test.js +73 -0
  47. package/build/doc-markdown-system.d.ts +44 -0
  48. package/build/doc-markdown-system.d.ts.map +1 -0
  49. package/build/doc-markdown-system.js +153 -0
  50. package/build/doc-markdown-system.test.d.ts +2 -0
  51. package/build/doc-markdown-system.test.d.ts.map +1 -0
  52. package/build/doc-markdown-system.test.js +124 -0
  53. package/build/doc-path-system.d.ts +43 -0
  54. package/build/doc-path-system.d.ts.map +1 -0
  55. package/build/doc-path-system.js +148 -0
  56. package/build/doc-path-system.test.d.ts +2 -0
  57. package/build/doc-path-system.test.d.ts.map +1 -0
  58. package/build/doc-path-system.test.js +67 -0
  59. package/build/entities/doc-file-entity.d.ts +5 -0
  60. package/build/entities/doc-file-entity.d.ts.map +1 -0
  61. package/build/entities/doc-file-entity.js +1 -0
  62. package/build/entities/doc-file-index-entity.d.ts +30 -0
  63. package/build/entities/doc-file-index-entity.d.ts.map +1 -0
  64. package/build/entities/doc-file-index-entity.js +49 -0
  65. package/build/entities/doc-file-index-entity.test.d.ts +2 -0
  66. package/build/entities/doc-file-index-entity.test.d.ts.map +1 -0
  67. package/build/entities/doc-file-index-entity.test.js +195 -0
  68. package/build/entities/doc-file-md-entity.d.ts +30 -0
  69. package/build/entities/doc-file-md-entity.d.ts.map +1 -0
  70. package/build/entities/doc-file-md-entity.js +49 -0
  71. package/build/entities/doc-file-md-entity.test.d.ts +2 -0
  72. package/build/entities/doc-file-md-entity.test.d.ts.map +1 -0
  73. package/build/entities/doc-file-md-entity.test.js +178 -0
  74. package/build/entities/doc-file-unknown-entity.d.ts +26 -0
  75. package/build/entities/doc-file-unknown-entity.d.ts.map +1 -0
  76. package/build/entities/doc-file-unknown-entity.js +45 -0
  77. package/build/entities/doc-file-unknown-entity.test.d.ts +2 -0
  78. package/build/entities/doc-file-unknown-entity.test.d.ts.map +1 -0
  79. package/build/entities/doc-file-unknown-entity.test.js +131 -0
  80. package/build/index.d.ts +42 -0
  81. package/build/index.d.ts.map +1 -0
  82. package/build/index.js +39 -24064
  83. package/build/models.d.ts +818 -0
  84. package/build/models.d.ts.map +1 -0
  85. package/build/models.js +312 -0
  86. package/build/types.d.ts +154 -0
  87. package/build/types.d.ts.map +1 -0
  88. package/build/types.js +1 -0
  89. package/build/values/doc-content-md-front-matter-value.d.ts +49 -0
  90. package/build/values/doc-content-md-front-matter-value.d.ts.map +1 -0
  91. package/build/values/doc-content-md-front-matter-value.js +94 -0
  92. package/build/values/doc-content-md-front-matter-value.test.d.ts +2 -0
  93. package/build/values/doc-content-md-front-matter-value.test.d.ts.map +1 -0
  94. package/build/values/doc-content-md-front-matter-value.test.js +73 -0
  95. package/build/values/doc-content-md-value.d.ts +66 -0
  96. package/build/values/doc-content-md-value.d.ts.map +1 -0
  97. package/build/values/doc-content-md-value.js +218 -0
  98. package/build/values/doc-content-md-value.test.d.ts +2 -0
  99. package/build/values/doc-content-md-value.test.d.ts.map +1 -0
  100. package/build/values/doc-content-md-value.test.js +179 -0
  101. package/build/values/doc-directory-path-value.d.ts +89 -0
  102. package/build/values/doc-directory-path-value.d.ts.map +1 -0
  103. package/build/values/doc-directory-path-value.js +145 -0
  104. package/build/values/doc-directory-path-value.test.d.ts +2 -0
  105. package/build/values/doc-directory-path-value.test.d.ts.map +1 -0
  106. package/build/values/doc-directory-path-value.test.js +68 -0
  107. package/build/values/doc-file-content-index-value.d.ts +62 -0
  108. package/build/values/doc-file-content-index-value.d.ts.map +1 -0
  109. package/build/values/doc-file-content-index-value.js +134 -0
  110. package/build/values/doc-file-content-index-value.test.d.ts +2 -0
  111. package/build/values/doc-file-content-index-value.test.d.ts.map +1 -0
  112. package/build/values/doc-file-content-index-value.test.js +203 -0
  113. package/build/values/doc-file-content-md-value.d.ts +62 -0
  114. package/build/values/doc-file-content-md-value.d.ts.map +1 -0
  115. package/build/values/doc-file-content-md-value.js +139 -0
  116. package/build/values/doc-file-content-md-value.test.d.ts +2 -0
  117. package/build/values/doc-file-content-md-value.test.d.ts.map +1 -0
  118. package/build/values/doc-file-content-md-value.test.js +160 -0
  119. package/build/values/doc-file-path-value.d.ts +47 -0
  120. package/build/values/doc-file-path-value.d.ts.map +1 -0
  121. package/build/values/doc-file-path-value.js +83 -0
  122. package/build/values/doc-file-path-value.test.d.ts +2 -0
  123. package/build/values/doc-file-path-value.test.d.ts.map +1 -0
  124. package/build/values/doc-file-path-value.test.js +84 -0
  125. package/build/values/doc-front-matter-index-value.d.ts +66 -0
  126. package/build/values/doc-front-matter-index-value.d.ts.map +1 -0
  127. package/build/values/doc-front-matter-index-value.js +185 -0
  128. package/build/values/doc-front-matter-index-value.test.d.ts +2 -0
  129. package/build/values/doc-front-matter-index-value.test.d.ts.map +1 -0
  130. package/build/values/doc-front-matter-index-value.test.js +98 -0
  131. package/build/values/doc-front-matter-md-value-accessor.test.d.ts +2 -0
  132. package/build/values/doc-front-matter-md-value-accessor.test.d.ts.map +1 -0
  133. package/build/values/doc-front-matter-md-value-accessor.test.js +226 -0
  134. package/build/values/doc-front-matter-md-value.d.ts +80 -0
  135. package/build/values/doc-front-matter-md-value.d.ts.map +1 -0
  136. package/build/values/doc-front-matter-md-value.js +257 -0
  137. package/build/values/doc-front-matter-md-value.test.d.ts +2 -0
  138. package/build/values/doc-front-matter-md-value.test.d.ts.map +1 -0
  139. package/build/values/doc-front-matter-md-value.test.js +198 -0
  140. package/build/values/doc-relation-field-value.d.ts +57 -0
  141. package/build/values/doc-relation-field-value.d.ts.map +1 -0
  142. package/build/values/doc-relation-field-value.js +85 -0
  143. package/build/values/doc-relation-field-value.test.d.ts +2 -0
  144. package/build/values/doc-relation-field-value.test.d.ts.map +1 -0
  145. package/build/values/doc-relation-field-value.test.js +115 -0
  146. package/build/values/doc-relation-file-value.d.ts +33 -0
  147. package/build/values/doc-relation-file-value.d.ts.map +1 -0
  148. package/build/values/doc-relation-file-value.js +55 -0
  149. package/build/values/doc-relation-file-value.test.d.ts +2 -0
  150. package/build/values/doc-relation-file-value.test.d.ts.map +1 -0
  151. package/build/values/doc-relation-file-value.test.js +77 -0
  152. package/build/values/doc-relation-value.d.ts +34 -0
  153. package/build/values/doc-relation-value.d.ts.map +1 -0
  154. package/build/values/doc-relation-value.js +56 -0
  155. package/build/values/doc-relation-value.test.d.ts +2 -0
  156. package/build/values/doc-relation-value.test.d.ts.map +1 -0
  157. package/build/values/doc-relation-value.test.js +89 -0
  158. package/build/values/doc-schema-field-boolean-multiple-value.d.ts +23 -0
  159. package/build/values/doc-schema-field-boolean-multiple-value.d.ts.map +1 -0
  160. package/build/values/doc-schema-field-boolean-multiple-value.js +43 -0
  161. package/build/values/doc-schema-field-boolean-multiple-value.test.d.ts +2 -0
  162. package/build/values/doc-schema-field-boolean-multiple-value.test.d.ts.map +1 -0
  163. package/build/values/doc-schema-field-boolean-multiple-value.test.js +76 -0
  164. package/build/values/doc-schema-field-boolean-single-value.d.ts +23 -0
  165. package/build/values/doc-schema-field-boolean-single-value.d.ts.map +1 -0
  166. package/build/values/doc-schema-field-boolean-single-value.js +39 -0
  167. package/build/values/doc-schema-field-boolean-single-value.test.d.ts +2 -0
  168. package/build/values/doc-schema-field-boolean-single-value.test.d.ts.map +1 -0
  169. package/build/values/doc-schema-field-boolean-single-value.test.js +73 -0
  170. package/build/values/doc-schema-field-factory.d.ts +37 -0
  171. package/build/values/doc-schema-field-factory.d.ts.map +1 -0
  172. package/build/values/doc-schema-field-factory.js +151 -0
  173. package/build/values/doc-schema-field-factory.test.d.ts +2 -0
  174. package/build/values/doc-schema-field-factory.test.d.ts.map +1 -0
  175. package/build/values/doc-schema-field-factory.test.js +215 -0
  176. package/build/values/doc-schema-field-number-multiple-value.d.ts +23 -0
  177. package/build/values/doc-schema-field-number-multiple-value.d.ts.map +1 -0
  178. package/build/values/doc-schema-field-number-multiple-value.js +43 -0
  179. package/build/values/doc-schema-field-number-multiple-value.test.d.ts +2 -0
  180. package/build/values/doc-schema-field-number-multiple-value.test.d.ts.map +1 -0
  181. package/build/values/doc-schema-field-number-multiple-value.test.js +79 -0
  182. package/build/values/doc-schema-field-number-single-value.d.ts +23 -0
  183. package/build/values/doc-schema-field-number-single-value.d.ts.map +1 -0
  184. package/build/values/doc-schema-field-number-single-value.js +39 -0
  185. package/build/values/doc-schema-field-number-single-value.test.d.ts +2 -0
  186. package/build/values/doc-schema-field-number-single-value.test.d.ts.map +1 -0
  187. package/build/values/doc-schema-field-number-single-value.test.js +77 -0
  188. package/build/values/doc-schema-field-relation-multiple-value.d.ts +24 -0
  189. package/build/values/doc-schema-field-relation-multiple-value.d.ts.map +1 -0
  190. package/build/values/doc-schema-field-relation-multiple-value.js +46 -0
  191. package/build/values/doc-schema-field-relation-multiple-value.test.d.ts +2 -0
  192. package/build/values/doc-schema-field-relation-multiple-value.test.d.ts.map +1 -0
  193. package/build/values/doc-schema-field-relation-multiple-value.test.js +83 -0
  194. package/build/values/doc-schema-field-relation-single-value.d.ts +24 -0
  195. package/build/values/doc-schema-field-relation-single-value.d.ts.map +1 -0
  196. package/build/values/doc-schema-field-relation-single-value.js +42 -0
  197. package/build/values/doc-schema-field-relation-single-value.test.d.ts +2 -0
  198. package/build/values/doc-schema-field-relation-single-value.test.d.ts.map +1 -0
  199. package/build/values/doc-schema-field-relation-single-value.test.js +83 -0
  200. package/build/values/doc-schema-field-select-number-multiple-value.d.ts +25 -0
  201. package/build/values/doc-schema-field-select-number-multiple-value.d.ts.map +1 -0
  202. package/build/values/doc-schema-field-select-number-multiple-value.js +48 -0
  203. package/build/values/doc-schema-field-select-number-multiple-value.test.d.ts +2 -0
  204. package/build/values/doc-schema-field-select-number-multiple-value.test.d.ts.map +1 -0
  205. package/build/values/doc-schema-field-select-number-multiple-value.test.js +84 -0
  206. package/build/values/doc-schema-field-select-number-single-value.d.ts +25 -0
  207. package/build/values/doc-schema-field-select-number-single-value.d.ts.map +1 -0
  208. package/build/values/doc-schema-field-select-number-single-value.js +45 -0
  209. package/build/values/doc-schema-field-select-number-single-value.test.d.ts +2 -0
  210. package/build/values/doc-schema-field-select-number-single-value.test.d.ts.map +1 -0
  211. package/build/values/doc-schema-field-select-number-single-value.test.js +96 -0
  212. package/build/values/doc-schema-field-select-text-multiple-value.d.ts +25 -0
  213. package/build/values/doc-schema-field-select-text-multiple-value.d.ts.map +1 -0
  214. package/build/values/doc-schema-field-select-text-multiple-value.js +48 -0
  215. package/build/values/doc-schema-field-select-text-multiple-value.test.d.ts +2 -0
  216. package/build/values/doc-schema-field-select-text-multiple-value.test.d.ts.map +1 -0
  217. package/build/values/doc-schema-field-select-text-multiple-value.test.js +84 -0
  218. package/build/values/doc-schema-field-select-text-single-value.d.ts +25 -0
  219. package/build/values/doc-schema-field-select-text-single-value.d.ts.map +1 -0
  220. package/build/values/doc-schema-field-select-text-single-value.js +47 -0
  221. package/build/values/doc-schema-field-select-text-single-value.test.d.ts +2 -0
  222. package/build/values/doc-schema-field-select-text-single-value.test.d.ts.map +1 -0
  223. package/build/values/doc-schema-field-select-text-single-value.test.js +96 -0
  224. package/build/values/doc-schema-field-text-multiple-value.d.ts +23 -0
  225. package/build/values/doc-schema-field-text-multiple-value.d.ts.map +1 -0
  226. package/build/values/doc-schema-field-text-multiple-value.js +43 -0
  227. package/build/values/doc-schema-field-text-multiple-value.test.d.ts +2 -0
  228. package/build/values/doc-schema-field-text-multiple-value.test.d.ts.map +1 -0
  229. package/build/values/doc-schema-field-text-multiple-value.test.js +78 -0
  230. package/build/values/doc-schema-field-text-single-value.d.ts +23 -0
  231. package/build/values/doc-schema-field-text-single-value.d.ts.map +1 -0
  232. package/build/values/doc-schema-field-text-single-value.js +39 -0
  233. package/build/values/doc-schema-field-text-single-value.test.d.ts +2 -0
  234. package/build/values/doc-schema-field-text-single-value.test.d.ts.map +1 -0
  235. package/build/values/doc-schema-field-text-single-value.test.js +76 -0
  236. package/build/values/doc-schema-field-type-value.d.ts +61 -0
  237. package/build/values/doc-schema-field-type-value.d.ts.map +1 -0
  238. package/build/values/doc-schema-field-type-value.js +134 -0
  239. package/build/values/doc-schema-field-type-value.test.d.ts +2 -0
  240. package/build/values/doc-schema-field-type-value.test.d.ts.map +1 -0
  241. package/build/values/doc-schema-field-type-value.test.js +101 -0
  242. package/build/values/doc-schema-field-value.d.ts +45 -0
  243. package/build/values/doc-schema-field-value.d.ts.map +1 -0
  244. package/build/values/doc-schema-field-value.js +1 -0
  245. package/build/values/doc-schema-value.d.ts +99 -0
  246. package/build/values/doc-schema-value.d.ts.map +1 -0
  247. package/build/values/doc-schema-value.js +269 -0
  248. package/build/values/doc-schema-value.test.d.ts +2 -0
  249. package/build/values/doc-schema-value.test.d.ts.map +1 -0
  250. package/build/values/doc-schema-value.test.js +301 -0
  251. package/build/values/doc-tree-directory-node-value.d.ts +36 -0
  252. package/build/values/doc-tree-directory-node-value.d.ts.map +1 -0
  253. package/build/values/doc-tree-directory-node-value.js +71 -0
  254. package/build/values/doc-tree-directory-node-value.test.d.ts +2 -0
  255. package/build/values/doc-tree-directory-node-value.test.d.ts.map +1 -0
  256. package/build/values/doc-tree-directory-node-value.test.js +162 -0
  257. package/build/values/doc-tree-file-node-value.d.ts +33 -0
  258. package/build/values/doc-tree-file-node-value.d.ts.map +1 -0
  259. package/build/values/doc-tree-file-node-value.js +56 -0
  260. package/build/values/doc-tree-file-node-value.test.d.ts +2 -0
  261. package/build/values/doc-tree-file-node-value.test.d.ts.map +1 -0
  262. package/build/values/doc-tree-file-node-value.test.js +113 -0
  263. package/debug/debug.ts +108 -0
  264. package/package.json +7 -44
  265. package/bin/docs.js +0 -3
  266. package/build/assets/index.css +0 -1
  267. package/build/assets/index.js +0 -298
  268. package/build/index.html +0 -13
package/README.md ADDED
@@ -0,0 +1,228 @@
1
+ # @interactive-inc/docs
2
+
3
+ 技術仕様書、製品資料など、Markdownで記述された資料をリポジトリで管理する際に、それらを効率的に読み書きするためのAPIを提供します。
4
+
5
+ ```ts
6
+ import { DocClient, DocFileSystem, DocPathSystem } from "@interactive-inc/docs"
7
+
8
+ const docClient = new DocClient({
9
+ fileSystem: new DocFileSystem({
10
+ basePath: "/docs", // リポジトリ内のドキュメントルート
11
+ pathSystem: new DocPathSystem(),
12
+ }),
13
+ })
14
+
15
+ const ref = docClient
16
+ .directory("products/product-1/features")
17
+ .file("login.md")
18
+
19
+ const entity = await ref.read()
20
+
21
+ if (entity instanceof Error) throw entity
22
+
23
+ console.log(entity.content.title)
24
+ ```
25
+
26
+ ## インストール
27
+
28
+ ```bash
29
+ bun add @interactive-inc/docs
30
+ # または
31
+ npm install @interactive-inc/docs
32
+ ```
33
+
34
+ ## 設計
35
+
36
+ このライブラリは、Markdownファイルを構造化されたディレクトリでの動作を想定しています。
37
+
38
+ 以下は製品仕様書を管理する場合の一例です。ディレクトリ構造は自由に設計できます:
39
+
40
+ ```
41
+ docs/ # ドキュメントルート(任意の名前)
42
+ ├── products/ # 製品ドキュメント(例)
43
+ │ ├── product-a/
44
+ │ │ ├── index.md # 製品概要
45
+ │ │ ├── features/ # 機能仕様
46
+ │ │ │ ├── login.md
47
+ │ │ │ └── _/ # アーカイブ(非推奨・削除予定)
48
+ │ │ │ └── old-feature.md
49
+ │ │ ├── pages/ # 画面仕様
50
+ │ │ └── terms/ # 製品固有の用語
51
+ │ └── product-b/
52
+ ├── terms/ # 共通用語集(例)
53
+ ├── guidelines/ # 開発ガイドライン(例)
54
+ └── index.md # ルートドキュメント
55
+ ```
56
+
57
+ ## 機能
58
+
59
+ ### アーカイブシステム
60
+
61
+ ファイルを削除する代わりに、`_`ディレクトリに移動することで論理削除を表現できます。
62
+
63
+ - `features/login.md` → `features/_/login.md` (アーカイブ)
64
+ - アーカイブされたファイルも読み取り可能
65
+ - 必要に応じて復元可能
66
+
67
+ ```ts
68
+ // ファイルをアーカイブする
69
+ const fileRef = docClient.directory("specs/v1").mdFile("deprecated-api.md")
70
+ await fileRef.archive()
71
+ ```
72
+
73
+ ### メタデータ管理
74
+
75
+ 各Markdownファイルの先頭にYAML形式でメタデータを記述:
76
+
77
+ ```markdown
78
+ ---
79
+ title: ログイン機能
80
+ milestone: 2025.01
81
+ features:
82
+ - authentication
83
+ - security
84
+ priority: high
85
+ is-done: false
86
+ ---
87
+
88
+ # ログイン機能
89
+
90
+ 説明...
91
+
92
+ 本文...
93
+ ```
94
+
95
+ このように操作できます。
96
+
97
+ ```ts
98
+ // FrontMatterの読み取り
99
+ const fileRef = docClient.directory("features").mdFile("login.md")
100
+
101
+ const file = await fileRef.read()
102
+
103
+ if (file instanceof Error) throw file
104
+
105
+ // "ログイン機能"
106
+ console.log(file.content.frontMatter.title)
107
+
108
+ // ["authentication", "security"]
109
+ console.log(file.content.frontMatter.features)
110
+ ```
111
+
112
+ ### ファイル間のリレーション
113
+
114
+ FrontMatterとスキーマを使用して、ドキュメント間の関連を定義できます。
115
+
116
+ #### スキーマの定義(index.md)
117
+
118
+ ```markdown
119
+ ---
120
+ title: 機能一覧
121
+ schema:
122
+ page:
123
+ type: relation
124
+ path: "../pages"
125
+ title: 関連ページ
126
+ required: false
127
+ tags:
128
+ type: multi-relation
129
+ path: "../tags"
130
+ title: タグ
131
+ required: false
132
+ ---
133
+ ```
134
+
135
+ #### リレーションの使用
136
+
137
+ features/login.md
138
+
139
+ ```markdown
140
+ ---
141
+ title: ログイン機能
142
+ page: login-page
143
+ tags:
144
+ - authentication
145
+ - security
146
+ ---
147
+ ```
148
+
149
+ #### 使い方
150
+
151
+ ```ts
152
+ const featureRef = docClient.directory("features").mdFile("login.md")
153
+
154
+ const relatedTags = await featureRef.relations("tags")
155
+
156
+ for (const tagRef of relatedTags) {
157
+ const tagEntity = await tagRef.read()
158
+ if (tagEntity instanceof Error) continue
159
+ console.log(tagEntity.content.title)
160
+ }
161
+ ```
162
+
163
+ ## 使い方
164
+
165
+ ### 初期設定
166
+
167
+ ```ts
168
+ import { DocClient, DocFileSystem, DocPathSystem } from "@interactive-inc/docs"
169
+
170
+ const docClient = new DocClient({
171
+ fileSystem: new DocFileSystem({
172
+ basePath: "/path/to/your-repo/docs",
173
+ pathSystem: new DocPathSystem(),
174
+ }),
175
+ })
176
+ ```
177
+
178
+ ### ファイルの読み書き
179
+
180
+ ```ts
181
+ // ファイル読み取り
182
+ const fileRef = docClient
183
+ .directory("specifications/api")
184
+ .mdFile("authentication.md")
185
+
186
+ const entity = await fileRef.read()
187
+ if (entity instanceof Error) throw entity
188
+
189
+ console.log(entity.content.body)
190
+ console.log(entity.content.frontMatter.value)
191
+
192
+ // ファイル作成・更新
193
+ await fileRef.writeContent(`---
194
+ title: 認証API仕様
195
+ version: 2.0.0
196
+ ---
197
+
198
+ # 認証API仕様
199
+
200
+ POST /api/v2/auth/login
201
+ `)
202
+ ```
203
+
204
+ ### FrontMatterの操作
205
+
206
+ ```ts
207
+ const entity = await fileRef.read()
208
+ if (entity instanceof Error) throw entity
209
+
210
+ // メタデータ更新
211
+ const newFrontMatter = new DocFrontMatterMdValue({
212
+ ...entity.content.frontMatter.value,
213
+ milestone: "2025.02",
214
+ })
215
+
216
+ const newContent = entity.content.withFrontMatter(newFrontMatter)
217
+ await fileRef.writeContent(newContent.toText())
218
+ ```
219
+
220
+ ### アーカイブ操作
221
+
222
+ ```ts
223
+ // ファイルをアーカイブ
224
+ const fileRef = docClient
225
+ .directory("specifications/api/v1")
226
+ .mdFile("legacy-endpoints.md")
227
+ await fileRef.archive()
228
+ ```
@@ -0,0 +1,59 @@
1
+ import { DocDirectoryReference } from "./doc-directory-reference";
2
+ import { DocFileIndexReference } from "./doc-file-index-reference";
3
+ import { DocFileMdReference } from "./doc-file-md-reference";
4
+ import type { DocFileSystem } from "./doc-file-system";
5
+ import { DocFileTreeSystem } from "./doc-file-tree-system";
6
+ import { DocFileUnknownReference } from "./doc-file-unknown-reference";
7
+ import { DocMarkdownSystem } from "./doc-markdown-system";
8
+ import { DocPathSystem } from "./doc-path-system";
9
+ import type { DocTreeDirectoryNode, DocTreeFileNode } from "./types";
10
+ type Props = {
11
+ fileSystem: DocFileSystem;
12
+ pathSystem?: DocPathSystem;
13
+ markdownSystem?: DocMarkdownSystem;
14
+ fileTreeSystem?: DocFileTreeSystem;
15
+ /**
16
+ * default: "index.md"
17
+ */
18
+ indexFileName?: string;
19
+ /**
20
+ * default: "_"
21
+ */
22
+ archiveDirectoryName?: string;
23
+ };
24
+ export declare class DocClient {
25
+ readonly fileSystem: DocFileSystem;
26
+ readonly pathSystem: DocPathSystem;
27
+ readonly markdownSystem: DocMarkdownSystem;
28
+ readonly fileTreeSystem: DocFileTreeSystem;
29
+ readonly indexFileName: string;
30
+ readonly archiveDirectoryName: string;
31
+ constructor(props: Props);
32
+ basePath(): string;
33
+ /**
34
+ * ファイル参照を取得
35
+ */
36
+ file(relativePath: string): DocFileMdReference | DocFileUnknownReference;
37
+ /**
38
+ * Markdownファイル参照を取得
39
+ */
40
+ mdFile(relativePath: string): DocFileMdReference;
41
+ /**
42
+ * インデックスファイル参照を取得
43
+ */
44
+ indexFile(directoryPath: string): DocFileIndexReference;
45
+ /**
46
+ * ディレクトリ参照を取得
47
+ */
48
+ directory(relativePath: string): DocDirectoryReference;
49
+ /**
50
+ * ファイルツリーを取得
51
+ */
52
+ fileTree(directoryPath?: string): Promise<(DocTreeFileNode | DocTreeDirectoryNode)[]>;
53
+ /**
54
+ * ディレクトリツリーを取得(ディレクトリのみ)
55
+ */
56
+ directoryTree(directoryPath?: string): Promise<DocTreeDirectoryNode[]>;
57
+ }
58
+ export {};
59
+ //# sourceMappingURL=doc-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-client.d.ts","sourceRoot":"","sources":["../lib/doc-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAA;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAA;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,KAAK,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAEpE,KAAK,KAAK,GAAG;IACX,UAAU,EAAE,aAAa,CAAA;IACzB,UAAU,CAAC,EAAE,aAAa,CAAA;IAC1B,cAAc,CAAC,EAAE,iBAAiB,CAAA;IAClC,cAAc,CAAC,EAAE,iBAAiB,CAAA;IAClC;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB;;OAEG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAA;CAC9B,CAAA;AAED,qBAAa,SAAS;IACpB,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAA;IAClC,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAA;IAClC,QAAQ,CAAC,cAAc,EAAE,iBAAiB,CAAA;IAC1C,QAAQ,CAAC,cAAc,EAAE,iBAAiB,CAAA;IAC1C,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAA;IAErC,YAAY,KAAK,EAAE,KAAK,EAevB;IAED,QAAQ,IAAI,MAAM,CAEjB;IAED;;OAEG;IACH,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,kBAAkB,GAAG,uBAAuB,CAUvE;IAED;;OAEG;IACH,MAAM,CAAC,YAAY,EAAE,MAAM,GAAG,kBAAkB,CAM/C;IAED;;OAEG;IACH,SAAS,CAAC,aAAa,EAAE,MAAM,GAAG,qBAAqB,CAWtD;IAED;;OAEG;IACH,SAAS,CAAC,YAAY,EAAE,MAAM,GAAG,qBAAqB,CAQrD;IAED;;OAEG;IACG,QAAQ,CACZ,aAAa,SAAK,GACjB,OAAO,CAAC,CAAC,eAAe,GAAG,oBAAoB,CAAC,EAAE,CAAC,CAGrD;IAED;;OAEG;IACG,aAAa,CAAC,aAAa,SAAK,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAGvE;CACF"}
@@ -0,0 +1,95 @@
1
+ import { DocDirectoryReference } from "./doc-directory-reference";
2
+ import { DocFileIndexReference } from "./doc-file-index-reference";
3
+ import { DocFileMdReference } from "./doc-file-md-reference";
4
+ import { DocFileTreeSystem } from "./doc-file-tree-system";
5
+ import { DocFileUnknownReference } from "./doc-file-unknown-reference";
6
+ import { DocMarkdownSystem } from "./doc-markdown-system";
7
+ import { DocPathSystem } from "./doc-path-system";
8
+ export class DocClient {
9
+ fileSystem;
10
+ pathSystem;
11
+ markdownSystem;
12
+ fileTreeSystem;
13
+ indexFileName;
14
+ archiveDirectoryName;
15
+ constructor(props) {
16
+ this.fileSystem = props.fileSystem;
17
+ this.pathSystem = props.pathSystem ?? new DocPathSystem();
18
+ this.markdownSystem = props.markdownSystem ?? new DocMarkdownSystem();
19
+ this.indexFileName = props.indexFileName ?? "index.md";
20
+ this.archiveDirectoryName = props.archiveDirectoryName ?? "_";
21
+ this.fileTreeSystem =
22
+ props.fileTreeSystem ??
23
+ new DocFileTreeSystem({
24
+ fileSystem: this.fileSystem,
25
+ pathSystem: this.pathSystem,
26
+ indexFileName: this.indexFileName,
27
+ archiveDirectoryName: this.archiveDirectoryName,
28
+ });
29
+ }
30
+ basePath() {
31
+ return this.fileSystem.getBasePath();
32
+ }
33
+ /**
34
+ * ファイル参照を取得
35
+ */
36
+ file(relativePath) {
37
+ if (relativePath.endsWith(".md")) {
38
+ return this.mdFile(relativePath);
39
+ }
40
+ return new DocFileUnknownReference({
41
+ path: relativePath,
42
+ fileSystem: this.fileSystem,
43
+ pathSystem: this.pathSystem,
44
+ });
45
+ }
46
+ /**
47
+ * Markdownファイル参照を取得
48
+ */
49
+ mdFile(relativePath) {
50
+ return new DocFileMdReference({
51
+ path: relativePath,
52
+ fileSystem: this.fileSystem,
53
+ pathSystem: this.pathSystem,
54
+ });
55
+ }
56
+ /**
57
+ * インデックスファイル参照を取得
58
+ */
59
+ indexFile(directoryPath) {
60
+ const indexPath = directoryPath === ""
61
+ ? this.indexFileName
62
+ : `${directoryPath}/${this.indexFileName}`;
63
+ return new DocFileIndexReference({
64
+ path: indexPath,
65
+ fileSystem: this.fileSystem,
66
+ pathSystem: this.pathSystem,
67
+ });
68
+ }
69
+ /**
70
+ * ディレクトリ参照を取得
71
+ */
72
+ directory(relativePath) {
73
+ return new DocDirectoryReference({
74
+ path: relativePath,
75
+ indexFileName: this.indexFileName,
76
+ archiveDirectoryName: this.archiveDirectoryName,
77
+ fileSystem: this.fileSystem,
78
+ pathSystem: this.pathSystem,
79
+ });
80
+ }
81
+ /**
82
+ * ファイルツリーを取得
83
+ */
84
+ async fileTree(directoryPath = "") {
85
+ const results = await this.fileTreeSystem.buildFileTree(directoryPath);
86
+ return results.map((node) => node.toJson());
87
+ }
88
+ /**
89
+ * ディレクトリツリーを取得(ディレクトリのみ)
90
+ */
91
+ async directoryTree(directoryPath = "") {
92
+ const results = await this.fileTreeSystem.buildDirectoryTree(directoryPath);
93
+ return results.map((node) => node.toJson());
94
+ }
95
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=doc-client.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-client.test.d.ts","sourceRoot":"","sources":["../lib/doc-client.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,38 @@
1
+ import { expect, test } from "bun:test";
2
+ import { DocClient } from "./doc-client";
3
+ import { DocFileSystem } from "./doc-file-system";
4
+ import { DocMarkdownSystem } from "./doc-markdown-system";
5
+ import { DocPathSystem } from "./doc-path-system";
6
+ test("DocClient - デフォルト値でインスタンスを作成", () => {
7
+ const pathSystem = new DocPathSystem();
8
+ const fileSystem = new DocFileSystem({ basePath: "/test", pathSystem });
9
+ const client = new DocClient({ fileSystem });
10
+ expect(client.fileSystem).toBe(fileSystem);
11
+ expect(client.pathSystem).toBeInstanceOf(DocPathSystem);
12
+ expect(client.markdownSystem).toBeInstanceOf(DocMarkdownSystem);
13
+ expect(client.indexFileName).toBe("index.md");
14
+ expect(client.archiveDirectoryName).toBe("_");
15
+ });
16
+ test("DocClient - カスタム値でインスタンスを作成", () => {
17
+ const pathSystem = new DocPathSystem();
18
+ const fileSystem = new DocFileSystem({ basePath: "/test", pathSystem });
19
+ const markdownSystem = new DocMarkdownSystem();
20
+ const client = new DocClient({
21
+ fileSystem,
22
+ pathSystem,
23
+ markdownSystem,
24
+ indexFileName: "README.md",
25
+ archiveDirectoryName: ".archive",
26
+ });
27
+ expect(client.fileSystem).toBe(fileSystem);
28
+ expect(client.pathSystem).toBe(pathSystem);
29
+ expect(client.markdownSystem).toBe(markdownSystem);
30
+ expect(client.indexFileName).toBe("README.md");
31
+ expect(client.archiveDirectoryName).toBe(".archive");
32
+ });
33
+ test("DocClient - basePathを取得", () => {
34
+ const pathSystem = new DocPathSystem();
35
+ const fileSystem = new DocFileSystem({ basePath: "/test/docs", pathSystem });
36
+ const client = new DocClient({ fileSystem });
37
+ expect(client.basePath()).toBe("/test/docs");
38
+ });
@@ -0,0 +1,65 @@
1
+ import { DocFileIndexReference } from "./doc-file-index-reference";
2
+ import { DocFileMdReference } from "./doc-file-md-reference";
3
+ import type { DocFileSystem } from "./doc-file-system";
4
+ import { DocFileUnknownReference } from "./doc-file-unknown-reference";
5
+ import type { DocPathSystem } from "./doc-path-system";
6
+ import { DocFileIndexEntity } from "./entities/doc-file-index-entity";
7
+ import { DocFileMdEntity } from "./entities/doc-file-md-entity";
8
+ import { DocFileUnknownEntity } from "./entities/doc-file-unknown-entity";
9
+ type Props = {
10
+ path: string;
11
+ indexFileName: string;
12
+ archiveDirectoryName: string;
13
+ fileSystem: DocFileSystem;
14
+ pathSystem: DocPathSystem;
15
+ };
16
+ /**
17
+ * ディレクトリの参照
18
+ */
19
+ export declare class DocDirectoryReference {
20
+ private readonly props;
21
+ private readonly pathSystem;
22
+ constructor(props: Props);
23
+ get fileSystem(): DocFileSystem;
24
+ get basePath(): string;
25
+ get relativePath(): string;
26
+ get absolutePath(): string;
27
+ get indexFileName(): string;
28
+ get indexFilePath(): string;
29
+ get archiveDirectoryName(): string;
30
+ fileNames(): Promise<string[]>;
31
+ archivedFileNames(): Promise<string[]>;
32
+ filesGenerator(): AsyncGenerator<DocFileMdReference | DocFileUnknownReference, void, unknown>;
33
+ mdFilesGenerator(): AsyncGenerator<DocFileMdReference, void, unknown>;
34
+ files(): Promise<(DocFileMdReference | DocFileUnknownReference)[]>;
35
+ mdFiles(): Promise<DocFileMdReference[]>;
36
+ file(fileName: string): DocFileMdReference | DocFileUnknownReference;
37
+ mdFile(fileName: string): DocFileMdReference;
38
+ readFiles(): Promise<(DocFileMdEntity | DocFileUnknownEntity)[]>;
39
+ readMdFiles(): Promise<DocFileMdEntity[]>;
40
+ readUnknownFiles(): Promise<DocFileUnknownEntity[]>;
41
+ /**
42
+ * サブディレクトリ名の一覧を取得
43
+ */
44
+ directoryNames(): Promise<string[]>;
45
+ /**
46
+ * サブディレクトリの参照を取得
47
+ */
48
+ directories(): Promise<DocDirectoryReference[]>;
49
+ /**
50
+ * 単一のサブディレクトリ参照を取得
51
+ */
52
+ directory(directoryName: string): DocDirectoryReference;
53
+ indexFile(): DocFileIndexReference;
54
+ readIndexFile(): Promise<DocFileIndexEntity>;
55
+ writeFile(entity: DocFileIndexEntity | DocFileUnknownEntity | DocFileMdEntity): Promise<Error | null>;
56
+ exists(): Promise<boolean>;
57
+ private generateUniqueFileName;
58
+ private fileExists;
59
+ /**
60
+ * 新しいMarkdownファイルを作成する
61
+ */
62
+ createMdFile(fileName?: string): Promise<DocFileMdReference>;
63
+ }
64
+ export {};
65
+ //# sourceMappingURL=doc-directory-reference.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-directory-reference.d.ts","sourceRoot":"","sources":["../lib/doc-directory-reference.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAA;AACtE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAA;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAA;AAEzE,KAAK,KAAK,GAAG;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,aAAa,EAAE,MAAM,CAAA;IACrB,oBAAoB,EAAE,MAAM,CAAA;IAC5B,UAAU,EAAE,aAAa,CAAA;IACzB,UAAU,EAAE,aAAa,CAAA;CAC1B,CAAA;AAED;;GAEG;AACH,qBAAa,qBAAqB;IAGpB,OAAO,CAAC,QAAQ,CAAC,KAAK;IAFlC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAe;IAE1C,YAA6B,KAAK,EAAE,KAAK,EAGxC;IAED,IAAI,UAAU,IAAI,aAAa,CAE9B;IAED,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED,IAAI,aAAa,IAAI,MAAM,CAM1B;IAED,IAAI,oBAAoB,IAAI,MAAM,CAEjC;IAEK,SAAS,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAOnC;IAEK,iBAAiB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAW3C;IAEM,cAAc,IAAI,cAAc,CACrC,kBAAkB,GAAG,uBAAuB,EAC5C,IAAI,EACJ,OAAO,CACR,CA+CA;IAEM,gBAAgB,IAAI,cAAc,CAAC,kBAAkB,EAAE,IAAI,EAAE,OAAO,CAAC,CAQ3E;IAEK,KAAK,IAAI,OAAO,CAAC,CAAC,kBAAkB,GAAG,uBAAuB,CAAC,EAAE,CAAC,CAQvE;IAEK,OAAO,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAS7C;IAED,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,kBAAkB,GAAG,uBAAuB,CAgBnE;IAED,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,kBAAkB,CAM3C;IAEK,SAAS,IAAI,OAAO,CAAC,CAAC,eAAe,GAAG,oBAAoB,CAAC,EAAE,CAAC,CAUrE;IAEK,WAAW,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC,CAW9C;IAEK,gBAAgB,IAAI,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAWxD;IAED;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAmBxC;IAED;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAcpD;IAED;;OAEG;IACH,SAAS,CAAC,aAAa,EAAE,MAAM,GAAG,qBAAqB,CAUtD;IAED,SAAS,IAAI,qBAAqB,CAMjC;IAEK,aAAa,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAIjD;IAEK,SAAS,CACb,MAAM,EAAE,kBAAkB,GAAG,oBAAoB,GAAG,eAAe,GAClE,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CAuBvB;IAEK,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,CAE/B;YAKa,sBAAsB;YAmBtB,UAAU;IAKxB;;OAEG;IACG,YAAY,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAqBjE;CACF"}