@interactive-inc/docs-client 0.0.4 → 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 -45
  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
@@ -0,0 +1,181 @@
1
+ import { DocDirectoryReference } from "./doc-directory-reference";
2
+ import { DocFileMdEntity } from "./entities/doc-file-md-entity";
3
+ import { DocFileUnknownEntity } from "./entities/doc-file-unknown-entity";
4
+ import { DocFileContentMdValue } from "./values/doc-file-content-md-value";
5
+ import { DocFilePathValue } from "./values/doc-file-path-value";
6
+ /**
7
+ * ファイルの参照
8
+ */
9
+ export class DocFileUnknownReference {
10
+ props;
11
+ pathSystem;
12
+ constructor(props) {
13
+ this.props = props;
14
+ this.pathSystem = props.pathSystem;
15
+ Object.freeze(this);
16
+ }
17
+ get fileSystem() {
18
+ return this.props.fileSystem;
19
+ }
20
+ get basePath() {
21
+ return this.fileSystem.getBasePath();
22
+ }
23
+ get path() {
24
+ return this.props.path;
25
+ }
26
+ get directoryPath() {
27
+ return this.pathSystem.dirname(this.path);
28
+ }
29
+ get fileFullPath() {
30
+ return this.pathSystem.join(this.basePath, this.path);
31
+ }
32
+ get durectoryPath() {
33
+ return this.pathSystem.dirname(this.path);
34
+ }
35
+ directory() {
36
+ return new DocDirectoryReference({
37
+ archiveDirectoryName: "_",
38
+ indexFileName: "index.md",
39
+ fileSystem: this.fileSystem,
40
+ path: this.directoryPath,
41
+ pathSystem: this.pathSystem,
42
+ });
43
+ }
44
+ async read() {
45
+ const content = await this.fileSystem.readFile(this.path);
46
+ if (content === null) {
47
+ return new Error(`File not found at ${this.path}.`);
48
+ }
49
+ // アーカイブディレクトリにあるファイルかどうかをチェック
50
+ const isInArchiveDir = this.path.includes("/_/") || this.path.startsWith("_/");
51
+ if (this.path.endsWith(".md")) {
52
+ const contentValue = DocFileContentMdValue.fromMarkdown(content);
53
+ const pathValue = DocFilePathValue.fromPathWithSystem(this.path, this.pathSystem, this.basePath);
54
+ return new DocFileMdEntity({
55
+ type: "markdown",
56
+ content: contentValue.value,
57
+ path: pathValue.value,
58
+ isArchived: isInArchiveDir,
59
+ });
60
+ }
61
+ const pathValue = DocFilePathValue.fromPathWithSystem(this.path, this.pathSystem, this.basePath);
62
+ const extension = this.pathSystem.extname(this.path).substring(1); // Remove dot
63
+ return new DocFileUnknownEntity({
64
+ type: "unknown",
65
+ path: pathValue.value,
66
+ content: content,
67
+ extension: extension,
68
+ isArchived: isInArchiveDir,
69
+ });
70
+ }
71
+ /**
72
+ * ファイルの内容を読み込む
73
+ */
74
+ async readContent() {
75
+ const entity = await this.read();
76
+ if (entity instanceof Error) {
77
+ return entity;
78
+ }
79
+ if (typeof entity.value.content === "string") {
80
+ return entity.value.content;
81
+ }
82
+ return entity.value.content.body;
83
+ }
84
+ /**
85
+ * ファイルに内容を書き込む
86
+ */
87
+ async writeContent(content) {
88
+ await this.fileSystem.writeFile(this.path, content);
89
+ }
90
+ /**
91
+ * Entityを書き込む
92
+ */
93
+ async write(entity) {
94
+ await this.fileSystem.writeFile(this.path, entity.value.content);
95
+ }
96
+ /**
97
+ * 生のコンテンツを書き込む
98
+ */
99
+ async writeRaw(content) {
100
+ await this.fileSystem.writeFile(this.path, content);
101
+ }
102
+ /**
103
+ * ファイルを削除
104
+ */
105
+ async delete() {
106
+ return await this.fileSystem.deleteFile(this.path);
107
+ }
108
+ /**
109
+ * ファイルが存在するか確認
110
+ */
111
+ async exists() {
112
+ return this.fileSystem.exists(this.path);
113
+ }
114
+ /**
115
+ * ファイルをコピー
116
+ */
117
+ async copyTo(destinationPath) {
118
+ await this.fileSystem.copyFile(this.path, destinationPath);
119
+ }
120
+ /**
121
+ * ファイルを移動
122
+ */
123
+ async moveTo(destinationPath) {
124
+ await this.fileSystem.moveFile(this.path, destinationPath);
125
+ }
126
+ /**
127
+ * ファイルのサイズを取得(バイト単位)
128
+ */
129
+ async size() {
130
+ return this.fileSystem.getFileSize(this.path);
131
+ }
132
+ /**
133
+ * ファイルの最終更新日時を取得
134
+ */
135
+ async lastModified() {
136
+ return this.fileSystem.getFileModifiedTime(this.path);
137
+ }
138
+ /**
139
+ * ファイルの作成日時を取得
140
+ */
141
+ async createdAt() {
142
+ return this.fileSystem.getFileCreatedTime(this.path);
143
+ }
144
+ /**
145
+ * ファイルをアーカイブに移動し、新しい参照を返す
146
+ */
147
+ async archive(archiveDirectoryName = "_") {
148
+ const dirPath = this.pathSystem.dirname(this.path);
149
+ const fileName = this.pathSystem.basename(this.path);
150
+ const archivePath = this.pathSystem.join(dirPath, archiveDirectoryName, fileName);
151
+ // ファイルを移動
152
+ await this.moveTo(archivePath);
153
+ // 新しいパスで参照を作成
154
+ return new DocFileUnknownReference({
155
+ path: archivePath,
156
+ fileSystem: this.fileSystem,
157
+ pathSystem: this.pathSystem,
158
+ });
159
+ }
160
+ /**
161
+ * ファイルをアーカイブから復元し、新しい参照を返す
162
+ */
163
+ async restore(archiveDirectoryName = "_") {
164
+ const dirPath = this.pathSystem.dirname(this.path);
165
+ const parentDirName = this.pathSystem.basename(dirPath);
166
+ // 親ディレクトリがアーカイブディレクトリでない場合はエラー
167
+ if (parentDirName !== archiveDirectoryName) {
168
+ throw new Error(`ファイルはアーカイブディレクトリにありません: ${this.path}`);
169
+ }
170
+ const fileName = this.pathSystem.basename(this.path);
171
+ const restorePath = this.pathSystem.join(this.pathSystem.dirname(dirPath), fileName);
172
+ // ファイルを移動
173
+ await this.moveTo(restorePath);
174
+ // 新しいパスで参照を作成
175
+ return new DocFileUnknownReference({
176
+ path: restorePath,
177
+ fileSystem: this.fileSystem,
178
+ pathSystem: this.pathSystem,
179
+ });
180
+ }
181
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=doc-file-unknown-reference.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-file-unknown-reference.test.d.ts","sourceRoot":"","sources":["../lib/doc-file-unknown-reference.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,73 @@
1
+ import { expect, test } from "bun:test";
2
+ import { DocFileSystemDebug } from "./doc-file-system-debug";
3
+ import { DocFileUnknownReference } from "./doc-file-unknown-reference";
4
+ import { DocFileUnknownEntity } from "./entities/doc-file-unknown-entity";
5
+ import { DocFilePathValue } from "./values/doc-file-path-value";
6
+ test("DocFileUnknownReference - readメソッドが正しくエンティティを返す", async () => {
7
+ const fileSystem = DocFileSystemDebug.createWithFiles({
8
+ fileContents: {
9
+ "docs/assets/logo.png": "binary data",
10
+ "docs/config.json": '{"version": "1.0"}',
11
+ },
12
+ });
13
+ // PNGファイルの場合
14
+ const pngRef = new DocFileUnknownReference({
15
+ path: "docs/assets/logo.png",
16
+ fileSystem,
17
+ pathSystem: fileSystem.getPathSystem(),
18
+ });
19
+ const pngEntity = await pngRef.read();
20
+ if (pngEntity instanceof Error) {
21
+ throw pngEntity;
22
+ }
23
+ expect(pngEntity).toBeInstanceOf(DocFileUnknownEntity);
24
+ expect(pngEntity.content).toBe("binary data");
25
+ expect(pngEntity.path.path).toBe("docs/assets/logo.png");
26
+ // JSONファイルの場合
27
+ const jsonRef = new DocFileUnknownReference({
28
+ path: "docs/config.json",
29
+ fileSystem,
30
+ pathSystem: fileSystem.getPathSystem(),
31
+ });
32
+ const jsonEntity = await jsonRef.read();
33
+ if (jsonEntity instanceof Error) {
34
+ throw jsonEntity;
35
+ }
36
+ expect(jsonEntity).toBeInstanceOf(DocFileUnknownEntity);
37
+ expect(jsonEntity.content).toBe('{"version": "1.0"}');
38
+ });
39
+ test("DocFileUnknownReference - writeメソッドがファイルを書き込む", async () => {
40
+ const fileSystem = DocFileSystemDebug.createWithFiles({});
41
+ const ref = new DocFileUnknownReference({
42
+ path: "docs/data/output.csv",
43
+ fileSystem,
44
+ pathSystem: fileSystem.getPathSystem(),
45
+ });
46
+ // 新しいエンティティを作成
47
+ const pathValue = DocFilePathValue.fromPathWithSystem("docs/data/output.csv", fileSystem.getPathSystem());
48
+ const entity = new DocFileUnknownEntity({
49
+ type: "unknown",
50
+ path: pathValue.value,
51
+ content: "id,name,value\n1,item1,100\n2,item2,200",
52
+ extension: "csv",
53
+ isArchived: false,
54
+ });
55
+ // ファイルに書き込む
56
+ await ref.write(entity);
57
+ // ファイルの内容を確認
58
+ const writtenContent = fileSystem.getFileContent("docs/data/output.csv");
59
+ expect(writtenContent).toBe("id,name,value\n1,item1,100\n2,item2,200");
60
+ });
61
+ test("DocFileUnknownReference - 存在しないファイルを読み込もうとするとErrorを返す", async () => {
62
+ const fileSystem = DocFileSystemDebug.createWithFiles({});
63
+ const ref = new DocFileUnknownReference({
64
+ path: "docs/nonexistent.txt",
65
+ fileSystem,
66
+ pathSystem: fileSystem.getPathSystem(),
67
+ });
68
+ const result = await ref.read();
69
+ expect(result).toBeInstanceOf(Error);
70
+ if (result instanceof Error) {
71
+ expect(result.message).toBe("File not found at docs/nonexistent.txt.");
72
+ }
73
+ });
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Markdownの解析と処理システム
3
+ */
4
+ export declare class DocMarkdownSystem {
5
+ private readonly frontMatterSeparator = "---";
6
+ constructor();
7
+ /**
8
+ * FrontMatterの区切り線を検出
9
+ */
10
+ private detectFrontMatterSeparator;
11
+ /**
12
+ * FrontMatterを抽出
13
+ */
14
+ extractFrontMatter(text: string): string | null;
15
+ /**
16
+ * FrontMatterを除去したbody(titleとdescriptionを含む)
17
+ */
18
+ extractBody(text: string): string;
19
+ /**
20
+ * タイトル
21
+ */
22
+ extractTitle(text: string): string | null;
23
+ /**
24
+ * 説明(タイトルの後の最初の段落)
25
+ */
26
+ extractDescription(text: string): string | null;
27
+ /**
28
+ * body内のタイトルを更新
29
+ */
30
+ updateTitle(text: string, newTitle: string): string;
31
+ /**
32
+ * body内の説明を更新
33
+ */
34
+ updateDescription(text: string, newDescription: string, defaultTitle: string): string;
35
+ /**
36
+ * 空行をスキップ
37
+ */
38
+ private skipEmptyLines;
39
+ /**
40
+ * Markdownテキストを生成(タイトル + 説明 + body)
41
+ */
42
+ static from(title: string, description: string, body: string): string;
43
+ }
44
+ //# sourceMappingURL=doc-markdown-system.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-markdown-system.d.ts","sourceRoot":"","sources":["../lib/doc-markdown-system.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,oBAAoB,SAAQ;IAE7C,cAEC;IAED;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAUlC;;OAEG;IACH,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAY9C;IAED;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAOhC;IAED;;OAEG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAIxC;IAED;;OAEG;IACH,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAmB9C;IAED;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAelD;IAED;;OAEG;IACH,iBAAiB,CACf,IAAI,EAAE,MAAM,EACZ,cAAc,EAAE,MAAM,EACtB,YAAY,EAAE,MAAM,GACnB,MAAM,CA6BR;IAED;;OAEG;IACH,OAAO,CAAC,cAAc;IAYtB;;OAEG;IACH,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAkBpE;CACF"}
@@ -0,0 +1,153 @@
1
+ /**
2
+ * Markdownの解析と処理システム
3
+ */
4
+ export class DocMarkdownSystem {
5
+ frontMatterSeparator = "---";
6
+ constructor() {
7
+ Object.freeze(this);
8
+ }
9
+ /**
10
+ * FrontMatterの区切り線を検出
11
+ */
12
+ detectFrontMatterSeparator(text) {
13
+ const firstLine = text.split("\n")[0];
14
+ if (firstLine?.match(/^-{3,}$/)) {
15
+ return firstLine;
16
+ }
17
+ return this.frontMatterSeparator;
18
+ }
19
+ /**
20
+ * FrontMatterを抽出
21
+ */
22
+ extractFrontMatter(text) {
23
+ const separator = this.detectFrontMatterSeparator(text);
24
+ if (!text.startsWith(separator)) {
25
+ return null;
26
+ }
27
+ const endIndex = text.indexOf(`\n${separator}`, separator.length);
28
+ if (endIndex === -1) {
29
+ return null;
30
+ }
31
+ return text.slice(0, endIndex + separator.length + 1);
32
+ }
33
+ /**
34
+ * FrontMatterを除去したbody(titleとdescriptionを含む)
35
+ */
36
+ extractBody(text) {
37
+ const frontMatter = this.extractFrontMatter(text);
38
+ if (!frontMatter) {
39
+ return text;
40
+ }
41
+ return text.slice(frontMatter.length).trim();
42
+ }
43
+ /**
44
+ * タイトル
45
+ */
46
+ extractTitle(text) {
47
+ const body = this.extractBody(text);
48
+ const titleMatch = body.match(/^#\s+(.+)$/m);
49
+ return titleMatch?.[1] ?? null;
50
+ }
51
+ /**
52
+ * 説明(タイトルの後の最初の段落)
53
+ */
54
+ extractDescription(text) {
55
+ const title = this.extractTitle(text);
56
+ if (!title) {
57
+ return null;
58
+ }
59
+ const body = this.extractBody(text);
60
+ const lines = body.split("\n");
61
+ const titleIndex = lines.findIndex((line) => line.match(/^#\s+/));
62
+ if (titleIndex === -1) {
63
+ return null;
64
+ }
65
+ const descIndex = this.skipEmptyLines(lines, titleIndex + 1);
66
+ if (descIndex < lines.length && !lines[descIndex]?.startsWith("#")) {
67
+ return lines[descIndex] ?? null;
68
+ }
69
+ return null;
70
+ }
71
+ /**
72
+ * body内のタイトルを更新
73
+ */
74
+ updateTitle(text, newTitle) {
75
+ const body = this.extractBody(text);
76
+ const lines = body.split("\n");
77
+ const titleIndex = lines.findIndex((line) => line.match(/^#\s+/));
78
+ if (titleIndex !== -1) {
79
+ lines[titleIndex] = `# ${newTitle}`;
80
+ }
81
+ else {
82
+ // タイトルが存在しない場合は先頭に追加
83
+ lines.unshift(`# ${newTitle}`, "");
84
+ }
85
+ const updatedBody = lines.join("\n");
86
+ const frontMatter = this.extractFrontMatter(text);
87
+ return frontMatter ? `${frontMatter}\n${updatedBody}` : updatedBody;
88
+ }
89
+ /**
90
+ * body内の説明を更新
91
+ */
92
+ updateDescription(text, newDescription, defaultTitle) {
93
+ const body = this.extractBody(text);
94
+ const lines = body.split("\n");
95
+ const titleIndex = lines.findIndex((line) => line.match(/^#\s+/));
96
+ let updatedBody;
97
+ if (titleIndex === -1) {
98
+ // タイトルがない場合はタイトルと説明を追加
99
+ updatedBody = `# ${defaultTitle}\n\n${newDescription}\n\n${body}`.trim();
100
+ }
101
+ else {
102
+ // タイトルの後の説明を更新
103
+ const descIndex = this.skipEmptyLines(lines, titleIndex + 1);
104
+ if (descIndex < lines.length &&
105
+ lines[descIndex] &&
106
+ !lines[descIndex].startsWith("#")) {
107
+ // 既存の説明を置き換え
108
+ lines[descIndex] = newDescription;
109
+ }
110
+ else {
111
+ // 説明がない場合は挿入
112
+ lines.splice(titleIndex + 1, 0, "", newDescription);
113
+ }
114
+ updatedBody = lines.join("\n");
115
+ }
116
+ const frontMatter = this.extractFrontMatter(text);
117
+ return frontMatter ? `${frontMatter}\n${updatedBody}` : updatedBody;
118
+ }
119
+ /**
120
+ * 空行をスキップ
121
+ */
122
+ skipEmptyLines(lines, startIndex) {
123
+ let index = startIndex;
124
+ while (index < lines.length) {
125
+ const line = lines[index];
126
+ if (line === undefined || line.trim() !== "") {
127
+ break;
128
+ }
129
+ index++;
130
+ }
131
+ return index;
132
+ }
133
+ /**
134
+ * Markdownテキストを生成(タイトル + 説明 + body)
135
+ */
136
+ static from(title, description, body) {
137
+ const parts = [];
138
+ if (title) {
139
+ parts.push(`# ${title}`);
140
+ }
141
+ if (description) {
142
+ if (title)
143
+ parts.push("");
144
+ parts.push(description);
145
+ }
146
+ if (body) {
147
+ if (title || description)
148
+ parts.push("");
149
+ parts.push(body);
150
+ }
151
+ return parts.join("\n");
152
+ }
153
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=doc-markdown-system.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-markdown-system.test.d.ts","sourceRoot":"","sources":["../lib/doc-markdown-system.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,124 @@
1
+ import { expect, test } from "bun:test";
2
+ import { DocMarkdownSystem } from "./doc-markdown-system";
3
+ // 基本的な解析機能
4
+ test("Markdownの基本構造を解析できる", () => {
5
+ const markdown = `---
6
+ title: "Test"
7
+ ---
8
+
9
+ # タイトル
10
+
11
+ これは説明文です。
12
+
13
+ 本文の内容です。`;
14
+ const system = new DocMarkdownSystem();
15
+ expect(system.extractFrontMatter(markdown)).toBe(`---
16
+ title: "Test"
17
+ ---`);
18
+ expect(system.extractBody(markdown)).toBe(`# タイトル
19
+
20
+ これは説明文です。
21
+
22
+ 本文の内容です。`);
23
+ expect(system.extractTitle(markdown)).toBe("タイトル");
24
+ expect(system.extractDescription(markdown)).toBe("これは説明文です。");
25
+ });
26
+ // エッジケース: FrontMatterなし
27
+ test("FrontMatterがなくても正常に動作する", () => {
28
+ const markdown = `# タイトル
29
+
30
+ 説明文です。`;
31
+ const system = new DocMarkdownSystem();
32
+ expect(system.extractFrontMatter(markdown)).toBeNull();
33
+ expect(system.extractBody(markdown)).toBe(markdown);
34
+ expect(system.extractTitle(markdown)).toBe("タイトル");
35
+ expect(system.extractDescription(markdown)).toBe("説明文です。");
36
+ });
37
+ // エッジケース: 変則的なFrontMatter区切り
38
+ test("異なる長さのFrontMatter区切り線を認識する", () => {
39
+ const markdown = `-----
40
+ title: "Test"
41
+ -----
42
+
43
+ # タイトル`;
44
+ const system = new DocMarkdownSystem();
45
+ expect(system.extractFrontMatter(markdown)).toBe(`-----
46
+ title: "Test"
47
+ -----`);
48
+ expect(system.extractBody(markdown)).toBe("# タイトル");
49
+ });
50
+ // エッジケース: タイトルや説明の欠落
51
+ test("タイトルや説明が欠けている場合の処理", () => {
52
+ const system = new DocMarkdownSystem();
53
+ expect(system.extractTitle("本文のみ")).toBeNull();
54
+ expect(system.extractDescription("本文のみ")).toBeNull();
55
+ const markdownNoDesc = "# タイトル\n\n## サブタイトル";
56
+ expect(system.extractTitle(markdownNoDesc)).toBe("タイトル");
57
+ expect(system.extractDescription(markdownNoDesc)).toBeNull();
58
+ });
59
+ // タイトル更新の主要ケース
60
+ test("タイトルの更新と追加", () => {
61
+ const system = new DocMarkdownSystem();
62
+ // 既存タイトルの更新
63
+ const markdown1 = "# 古いタイトル\n\n説明文";
64
+ const updated1 = system.updateTitle(markdown1, "新しいタイトル");
65
+ expect(system.extractBody(updated1)).toBe("# 新しいタイトル\n\n説明文");
66
+ expect(system.extractTitle(updated1)).toBe("新しいタイトル");
67
+ // タイトルの新規追加
68
+ const markdown2 = "説明文のみ";
69
+ const updated2 = system.updateTitle(markdown2, "新規タイトル");
70
+ expect(system.extractBody(updated2)).toBe("# 新規タイトル\n\n説明文のみ");
71
+ expect(system.extractTitle(updated2)).toBe("新規タイトル");
72
+ });
73
+ // 説明更新の主要ケース
74
+ test("説明の更新と追加", () => {
75
+ const system = new DocMarkdownSystem();
76
+ // 既存説明の更新
77
+ const markdown1 = "# タイトル\n\n古い説明\n\n本文";
78
+ const updated1 = system.updateDescription(markdown1, "新しい説明", "デフォルト");
79
+ expect(system.extractDescription(updated1)).toBe("新しい説明");
80
+ // 説明の新規追加(タイトルあり)
81
+ const markdown2 = "# タイトル\n\n## サブタイトル";
82
+ const updated2 = system.updateDescription(markdown2, "新しい説明", "デフォルト");
83
+ expect(system.extractBody(updated2)).toBe("# タイトル\n\n新しい説明\n\n## サブタイトル");
84
+ // タイトルも説明もない場合
85
+ const markdown3 = "本文のみ";
86
+ const updated3 = system.updateDescription(markdown3, "説明", "新規タイトル");
87
+ expect(system.extractBody(updated3)).toBe("# 新規タイトル\n\n説明\n\n本文のみ");
88
+ expect(system.extractTitle(updated3)).toBe("新規タイトル");
89
+ expect(system.extractDescription(updated3)).toBe("説明");
90
+ });
91
+ // FrontMatter保持の確認
92
+ test("更新操作でFrontMatterが保持される", () => {
93
+ const markdown = `---
94
+ title: "Test"
95
+ description: "Test Description"
96
+ ---
97
+
98
+ # 古いタイトル
99
+
100
+ 古い説明`;
101
+ const system = new DocMarkdownSystem();
102
+ const updated = system.updateTitle(markdown, "新しいタイトル");
103
+ expect(system.extractFrontMatter(updated)).toBe(`---
104
+ title: "Test"
105
+ description: "Test Description"
106
+ ---`);
107
+ expect(updated).toContain('---\ntitle: "Test"');
108
+ expect(updated).toContain("# 新しいタイトル");
109
+ });
110
+ // 静的メソッドのテスト
111
+ test("from メソッドでMarkdownを生成", () => {
112
+ expect(DocMarkdownSystem.from("タイトル", "説明", "本文")).toBe("# タイトル\n\n説明\n\n本文");
113
+ expect(DocMarkdownSystem.from("", "説明", "本文")).toBe("説明\n\n本文");
114
+ expect(DocMarkdownSystem.from("タイトル", "", "本文")).toBe("# タイトル\n\n本文");
115
+ });
116
+ // 空行スキップのエッジケース
117
+ test("複数の空行を正しく処理する", () => {
118
+ const markdown = `# タイトル
119
+
120
+
121
+ 説明文です。`;
122
+ const system = new DocMarkdownSystem();
123
+ expect(system.extractDescription(markdown)).toBe("説明文です。");
124
+ });
@@ -0,0 +1,43 @@
1
+ /**
2
+ * パス操作システム
3
+ */
4
+ export declare class DocPathSystem {
5
+ private readonly separator = "/";
6
+ /**
7
+ * パスを結合
8
+ */
9
+ join(...paths: string[]): string;
10
+ /**
11
+ * ファイル名を取得(拡張子付き)
12
+ */
13
+ basename(path: string, ext?: string): string;
14
+ /**
15
+ * ディレクトリ名を取得
16
+ */
17
+ dirname(path: string): string;
18
+ /**
19
+ * 拡張子を取得
20
+ */
21
+ extname(path: string): string;
22
+ /**
23
+ * 相対パスを計算
24
+ */
25
+ relative(from: string, to: string): string;
26
+ /**
27
+ * 絶対パスに変換
28
+ */
29
+ resolve(...paths: string[]): string;
30
+ /**
31
+ * パスを正規化
32
+ */
33
+ normalize(path: string): string;
34
+ /**
35
+ * パスが絶対パスかどうか
36
+ */
37
+ isAbsolute(path: string): boolean;
38
+ /**
39
+ * パスのセパレータ
40
+ */
41
+ get sep(): string;
42
+ }
43
+ //# sourceMappingURL=doc-path-system.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-path-system.d.ts","sourceRoot":"","sources":["../lib/doc-path-system.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,SAAS,OAAM;IAEhC;;OAEG;IACH,IAAI,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAqB/B;IAED;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAS3C;IAED;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAc5B;IAED;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAS5B;IAED;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAyBzC;IAED;;OAEG;IACH,OAAO,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAelC;IAED;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA4B9B;IAED;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEhC;IAED;;OAEG;IACH,IAAI,GAAG,IAAI,MAAM,CAEhB;CACF"}