@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
@@ -0,0 +1,257 @@
1
+ import { stringify } from "yaml";
2
+ import { zDocFileMdFrontMatter } from "../models";
3
+ import { DocContentMdValue } from "./doc-content-md-value";
4
+ import { DocSchemaFieldBooleanMultipleValue } from "./doc-schema-field-boolean-multiple-value";
5
+ import { DocSchemaFieldBooleanSingleValue } from "./doc-schema-field-boolean-single-value";
6
+ import { DocSchemaFieldFactory } from "./doc-schema-field-factory";
7
+ import { DocSchemaFieldNumberMultipleValue } from "./doc-schema-field-number-multiple-value";
8
+ import { DocSchemaFieldNumberSingleValue } from "./doc-schema-field-number-single-value";
9
+ import { DocSchemaFieldTextMultipleValue } from "./doc-schema-field-text-multiple-value";
10
+ import { DocSchemaFieldTextSingleValue } from "./doc-schema-field-text-single-value";
11
+ /**
12
+ * FrontMatter
13
+ */
14
+ export class DocFrontMatterMdValue {
15
+ value;
16
+ constructor(value) {
17
+ this.value = value;
18
+ zDocFileMdFrontMatter.parse(value);
19
+ Object.freeze(this);
20
+ }
21
+ toJson() {
22
+ return this.value;
23
+ }
24
+ toYaml() {
25
+ return stringify(this.value).trim();
26
+ }
27
+ /**
28
+ * Markdownテキストから生成
29
+ */
30
+ static from(markdownText) {
31
+ const openMarkdown = new DocContentMdValue(markdownText);
32
+ const rawData = openMarkdown.frontMatter.data || {};
33
+ const data = zDocFileMdFrontMatter.parse(rawData);
34
+ return new DocFrontMatterMdValue(data);
35
+ }
36
+ /**
37
+ * 空のFrontMatterを生成
38
+ */
39
+ static empty() {
40
+ return new DocFrontMatterMdValue({});
41
+ }
42
+ /**
43
+ * データから直接生成
44
+ */
45
+ static fromData(data) {
46
+ const validatedData = zDocFileMdFrontMatter.parse(data);
47
+ return new DocFrontMatterMdValue(validatedData);
48
+ }
49
+ /**
50
+ * スキーマフィールドに基づいてデフォルト値を生成する
51
+ */
52
+ static generateDefaultValueFromSchemaField(fieldDef) {
53
+ if (fieldDef.type === "text") {
54
+ return fieldDef.default ?? "";
55
+ }
56
+ if (fieldDef.type === "boolean") {
57
+ return fieldDef.default ?? false;
58
+ }
59
+ if (fieldDef.type === "number") {
60
+ return fieldDef.default ?? 0;
61
+ }
62
+ if (fieldDef.type === "multi-text" ||
63
+ fieldDef.type === "multi-number" ||
64
+ fieldDef.type === "multi-boolean" ||
65
+ fieldDef.type === "multi-relation") {
66
+ return fieldDef.default ?? [];
67
+ }
68
+ if (fieldDef.type === "relation") {
69
+ return fieldDef.default ?? null;
70
+ }
71
+ return null;
72
+ }
73
+ /**
74
+ * 単一のプロパティを更新した新しいインスタンスを返す
75
+ * スキーマに基づいて型を検証し、スキーマのフィールドのみを含む新しいインスタンスを生成
76
+ */
77
+ withProperty(key, value, schema) {
78
+ const currentData = this.toJson();
79
+ const fieldValue = schema.field(key);
80
+ if (fieldValue === null) {
81
+ return this;
82
+ }
83
+ if (!this.validateFieldValue(key, value, fieldValue)) {
84
+ return this;
85
+ }
86
+ // スキーマを元にFrontMatterを再構築
87
+ const draft = {};
88
+ for (const field of schema.fields) {
89
+ const fieldKey = field.key;
90
+ if (fieldKey === key) {
91
+ // 更新対象のフィールドは新しい値を使用
92
+ // valueは事前にvalidateFieldValueで検証済み
93
+ draft[fieldKey] = value;
94
+ }
95
+ else if (fieldKey in currentData) {
96
+ // 既存の値があればそれを使用
97
+ const value = currentData[fieldKey];
98
+ if (value !== undefined) {
99
+ draft[fieldKey] = value;
100
+ }
101
+ }
102
+ else {
103
+ // 値がない場合はデフォルト値を使用
104
+ draft[fieldKey] = field.toJson().default;
105
+ }
106
+ }
107
+ return new DocFrontMatterMdValue(draft);
108
+ }
109
+ /**
110
+ * フィールド値の検証
111
+ */
112
+ validateFieldValue(key, value, fieldDef) {
113
+ try {
114
+ const factory = new DocSchemaFieldFactory();
115
+ const schemaField = factory.fromSchemaEntry(key, fieldDef);
116
+ return schemaField.validate(value);
117
+ }
118
+ catch {
119
+ return false;
120
+ }
121
+ }
122
+ /**
123
+ * テキスト型のプロパティを取得
124
+ */
125
+ text(key) {
126
+ const value = this.value[key];
127
+ const validator = new DocSchemaFieldTextSingleValue(key, {
128
+ type: "text",
129
+ required: false,
130
+ title: null,
131
+ description: null,
132
+ default: null,
133
+ });
134
+ return validator.validate(value) && typeof value === "string" ? value : null;
135
+ }
136
+ /**
137
+ * 数値型のプロパティを取得
138
+ */
139
+ number(key) {
140
+ const value = this.value[key];
141
+ const validator = new DocSchemaFieldNumberSingleValue(key, {
142
+ type: "number",
143
+ required: false,
144
+ title: null,
145
+ description: null,
146
+ default: null,
147
+ });
148
+ return validator.validate(value) && typeof value === "number" ? value : null;
149
+ }
150
+ /**
151
+ * 真偽値型のプロパティを取得
152
+ */
153
+ boolean(key) {
154
+ const value = this.value[key];
155
+ const validator = new DocSchemaFieldBooleanSingleValue(key, {
156
+ type: "boolean",
157
+ required: false,
158
+ title: null,
159
+ description: null,
160
+ default: null,
161
+ });
162
+ return validator.validate(value) && typeof value === "boolean"
163
+ ? value
164
+ : null;
165
+ }
166
+ /**
167
+ * 単一リレーション型のプロパティを取得
168
+ */
169
+ relation(key) {
170
+ const value = this.value[key];
171
+ // リレーションもテキスト型と同じバリデーション
172
+ const validator = new DocSchemaFieldTextSingleValue(key, {
173
+ type: "text",
174
+ required: false,
175
+ title: null,
176
+ description: null,
177
+ default: null,
178
+ });
179
+ return validator.validate(value) && typeof value === "string" ? value : null;
180
+ }
181
+ /**
182
+ * 複数リレーション型のプロパティを取得
183
+ */
184
+ multiRelation(key) {
185
+ const value = this.value[key];
186
+ const validator = new DocSchemaFieldTextMultipleValue(key, {
187
+ type: "multi-text",
188
+ required: false,
189
+ title: null,
190
+ description: null,
191
+ default: null,
192
+ });
193
+ return validator.validate(value) && Array.isArray(value)
194
+ ? value
195
+ : [];
196
+ }
197
+ /**
198
+ * 複数テキスト型のプロパティを取得
199
+ */
200
+ multiText(key) {
201
+ const value = this.value[key];
202
+ const validator = new DocSchemaFieldTextMultipleValue(key, {
203
+ type: "multi-text",
204
+ required: false,
205
+ title: null,
206
+ description: null,
207
+ default: null,
208
+ });
209
+ return validator.validate(value) && Array.isArray(value)
210
+ ? value
211
+ : [];
212
+ }
213
+ /**
214
+ * 複数数値型のプロパティを取得
215
+ */
216
+ multiNumber(key) {
217
+ const value = this.value[key];
218
+ const validator = new DocSchemaFieldNumberMultipleValue(key, {
219
+ type: "multi-number",
220
+ required: false,
221
+ title: null,
222
+ description: null,
223
+ default: null,
224
+ });
225
+ return validator.validate(value) && Array.isArray(value)
226
+ ? value
227
+ : [];
228
+ }
229
+ /**
230
+ * 複数真偽値型のプロパティを取得
231
+ */
232
+ multiBoolean(key) {
233
+ const value = this.value[key];
234
+ const validator = new DocSchemaFieldBooleanMultipleValue(key, {
235
+ type: "multi-boolean",
236
+ required: false,
237
+ title: null,
238
+ description: null,
239
+ default: null,
240
+ });
241
+ return validator.validate(value) && Array.isArray(value)
242
+ ? value
243
+ : [];
244
+ }
245
+ /**
246
+ * プロパティが存在するかチェック
247
+ */
248
+ has(key) {
249
+ return key in this.value && this.value[key] !== undefined;
250
+ }
251
+ /**
252
+ * すべてのキーを取得
253
+ */
254
+ get keys() {
255
+ return Object.keys(this.value);
256
+ }
257
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=doc-front-matter-md-value.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-front-matter-md-value.test.d.ts","sourceRoot":"","sources":["../../lib/values/doc-front-matter-md-value.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,198 @@
1
+ import { expect, test } from "bun:test";
2
+ import { DocFrontMatterMdValue } from "./doc-front-matter-md-value";
3
+ test("DocFrontMatterMdValue - 基本的な作成とプロパティアクセス", () => {
4
+ const value = new DocFrontMatterMdValue({
5
+ title: "ドキュメントタイトル",
6
+ description: "ドキュメントの説明",
7
+ tags: ["tag1", "tag2"],
8
+ author: "作者名",
9
+ });
10
+ expect(value.value.title).toBe("ドキュメントタイトル");
11
+ expect(value.value.description).toBe("ドキュメントの説明");
12
+ expect(value.value.tags).toEqual(["tag1", "tag2"]);
13
+ expect(value.value.author).toBe("作者名");
14
+ });
15
+ test("DocFrontMatterMdValue - 空のFrontMatter", () => {
16
+ const value = new DocFrontMatterMdValue({});
17
+ expect(value.value).toEqual({});
18
+ });
19
+ test("DocFrontMatterMdValue - 一部のフィールドのみ", () => {
20
+ const value = new DocFrontMatterMdValue({
21
+ title: "タイトルのみ",
22
+ });
23
+ expect(value.value.title).toBe("タイトルのみ");
24
+ expect(value.value.description).toBeUndefined();
25
+ expect(value.value.tags).toBeUndefined();
26
+ });
27
+ test("DocFrontMatterMdValue - toYamlでYAML文字列を生成", () => {
28
+ const value = new DocFrontMatterMdValue({
29
+ title: "タイトル",
30
+ tags: ["tag1", "tag2"],
31
+ });
32
+ const yaml = value.toYaml();
33
+ expect(yaml).toContain("title: タイトル");
34
+ expect(yaml).toContain("tags:");
35
+ expect(yaml).toContain(" - tag1");
36
+ expect(yaml).toContain(" - tag2");
37
+ });
38
+ test("DocFrontMatterMdValue - 空のFrontMatterでtoYaml", () => {
39
+ const value = new DocFrontMatterMdValue({});
40
+ const yaml = value.toYaml();
41
+ expect(yaml).toBe("{}");
42
+ });
43
+ test("DocFrontMatterMdValue - 特殊文字を含む値でtoYaml", () => {
44
+ const value = new DocFrontMatterMdValue({
45
+ title: "タイトル with \"quotes\" and 'apostrophes'",
46
+ description: "説明文\n改行あり",
47
+ });
48
+ const yaml = value.toYaml();
49
+ expect(yaml).toContain("title:");
50
+ expect(yaml).toContain("description:");
51
+ // YAMLライブラリが適切にエスケープすることを確認
52
+ });
53
+ test("DocFrontMatterMdValue - toJsonで元のデータ構造を返す", () => {
54
+ const data = {
55
+ title: "タイトル",
56
+ tags: ["tag1"],
57
+ custom: "カスタムフィールド",
58
+ };
59
+ const value = new DocFrontMatterMdValue(data);
60
+ expect(value.toJson()).toEqual(data);
61
+ });
62
+ test("DocFrontMatterMdValue - 不変性の確認", () => {
63
+ const value = new DocFrontMatterMdValue({
64
+ title: "タイトル",
65
+ });
66
+ expect(() => {
67
+ // @ts-expect-error - 不変性のテスト
68
+ value.value = {};
69
+ }).toThrow();
70
+ });
71
+ test("text メソッドでテキスト型の値を取得できる", () => {
72
+ const frontMatter = new DocFrontMatterMdValue({
73
+ title: "テストタイトル",
74
+ description: "説明文",
75
+ count: 42,
76
+ });
77
+ expect(frontMatter.text("title")).toBe("テストタイトル");
78
+ expect(frontMatter.text("description")).toBe("説明文");
79
+ expect(frontMatter.text("count")).toBeNull(); // 数値型なのでnull
80
+ expect(frontMatter.text("missing")).toBeNull(); // 存在しないキー
81
+ });
82
+ test("number メソッドで数値型の値を取得できる", () => {
83
+ const frontMatter = new DocFrontMatterMdValue({
84
+ count: 42,
85
+ version: 1.5,
86
+ title: "テスト",
87
+ });
88
+ expect(frontMatter.number("count")).toBe(42);
89
+ expect(frontMatter.number("version")).toBe(1.5);
90
+ expect(frontMatter.number("title")).toBeNull(); // 文字列型なのでnull
91
+ expect(frontMatter.number("missing")).toBeNull();
92
+ });
93
+ test("boolean メソッドで真偽値型の値を取得できる", () => {
94
+ const frontMatter = new DocFrontMatterMdValue({
95
+ published: true,
96
+ draft: false,
97
+ title: "テスト",
98
+ });
99
+ expect(frontMatter.boolean("published")).toBe(true);
100
+ expect(frontMatter.boolean("draft")).toBe(false);
101
+ expect(frontMatter.boolean("title")).toBeNull();
102
+ expect(frontMatter.boolean("missing")).toBeNull();
103
+ });
104
+ test("relation メソッドで単一リレーションを取得できる", () => {
105
+ const frontMatter = new DocFrontMatterMdValue({
106
+ author: "user-123",
107
+ category: "tech",
108
+ tags: ["tag1", "tag2"],
109
+ });
110
+ expect(frontMatter.relation("author")).toBe("user-123");
111
+ expect(frontMatter.relation("category")).toBe("tech");
112
+ expect(frontMatter.relation("tags")).toBeNull(); // 配列なのでnull
113
+ expect(frontMatter.relation("missing")).toBeNull();
114
+ });
115
+ test("multiRelation メソッドで複数リレーションを取得できる", () => {
116
+ const frontMatter = new DocFrontMatterMdValue({
117
+ features: ["login", "logout", "signup"],
118
+ tags: ["tech", "tutorial"],
119
+ single: "value",
120
+ });
121
+ expect(frontMatter.multiRelation("features")).toEqual([
122
+ "login",
123
+ "logout",
124
+ "signup",
125
+ ]);
126
+ expect(frontMatter.multiRelation("tags")).toEqual(["tech", "tutorial"]);
127
+ expect(frontMatter.multiRelation("single")).toEqual([]); // 単一値なので空配列
128
+ expect(frontMatter.multiRelation("missing")).toEqual([]);
129
+ });
130
+ test("multiText メソッドで複数テキストを取得できる", () => {
131
+ const frontMatter = new DocFrontMatterMdValue({
132
+ keywords: ["typescript", "javascript", "nodejs"],
133
+ authors: ["alice", "bob"],
134
+ });
135
+ expect(frontMatter.multiText("keywords")).toEqual([
136
+ "typescript",
137
+ "javascript",
138
+ "nodejs",
139
+ ]);
140
+ expect(frontMatter.multiText("authors")).toEqual(["alice", "bob"]);
141
+ expect(frontMatter.multiText("missing")).toEqual([]);
142
+ });
143
+ test("multiNumber メソッドで複数数値を取得できる", () => {
144
+ const frontMatter = new DocFrontMatterMdValue({
145
+ scores: [85, 90, 78],
146
+ versions: [1.0, 1.1, 2.0],
147
+ });
148
+ expect(frontMatter.multiNumber("scores")).toEqual([85, 90, 78]);
149
+ expect(frontMatter.multiNumber("versions")).toEqual([1.0, 1.1, 2.0]);
150
+ expect(frontMatter.multiNumber("missing")).toEqual([]);
151
+ });
152
+ test("multiBoolean メソッドで複数真偽値を取得できる", () => {
153
+ const frontMatter = new DocFrontMatterMdValue({
154
+ flags: [true, false, true],
155
+ permissions: [false, false],
156
+ });
157
+ expect(frontMatter.multiBoolean("flags")).toEqual([true, false, true]);
158
+ expect(frontMatter.multiBoolean("permissions")).toEqual([false, false]);
159
+ expect(frontMatter.multiBoolean("missing")).toEqual([]);
160
+ });
161
+ test("has メソッドでプロパティの存在を確認できる", () => {
162
+ const frontMatter = new DocFrontMatterMdValue({
163
+ title: "テスト",
164
+ count: 0,
165
+ flag: false,
166
+ nullable: null,
167
+ });
168
+ expect(frontMatter.has("title")).toBe(true);
169
+ expect(frontMatter.has("count")).toBe(true);
170
+ expect(frontMatter.has("flag")).toBe(true);
171
+ expect(frontMatter.has("nullable")).toBe(true);
172
+ expect(frontMatter.has("missing")).toBe(false);
173
+ });
174
+ test("keys ゲッターですべてのキーを取得できる", () => {
175
+ const frontMatter = new DocFrontMatterMdValue({
176
+ title: "テスト",
177
+ version: 1.0,
178
+ published: true,
179
+ });
180
+ const keys = frontMatter.keys;
181
+ expect(keys).toHaveLength(3);
182
+ expect(keys).toContain("title");
183
+ expect(keys).toContain("version");
184
+ expect(keys).toContain("published");
185
+ });
186
+ test("空のFrontMatterでも正常に動作する", () => {
187
+ const frontMatter = DocFrontMatterMdValue.empty();
188
+ expect(frontMatter.text("any")).toBeNull();
189
+ expect(frontMatter.number("any")).toBeNull();
190
+ expect(frontMatter.boolean("any")).toBeNull();
191
+ expect(frontMatter.relation("any")).toBeNull();
192
+ expect(frontMatter.multiRelation("any")).toEqual([]);
193
+ expect(frontMatter.multiText("any")).toEqual([]);
194
+ expect(frontMatter.multiNumber("any")).toEqual([]);
195
+ expect(frontMatter.multiBoolean("any")).toEqual([]);
196
+ expect(frontMatter.has("any")).toBe(false);
197
+ expect(frontMatter.keys).toEqual([]);
198
+ });
@@ -0,0 +1,57 @@
1
+ import type { DocRelationField } from "../types";
2
+ /**
3
+ * リレーションフィールド
4
+ */
5
+ export declare class DocRelationFieldValue {
6
+ private readonly value;
7
+ constructor(value: DocRelationField);
8
+ /**
9
+ * フィールド名を取得
10
+ */
11
+ get fieldName(): string;
12
+ /**
13
+ * リレーション先のパスを取得
14
+ */
15
+ get relationPath(): string;
16
+ /**
17
+ * 配列型かどうかを取得
18
+ */
19
+ get isArray(): boolean;
20
+ /**
21
+ * 単一リレーションかどうかを判定
22
+ */
23
+ get isSingle(): boolean;
24
+ /**
25
+ * 複数リレーションかどうかを判定
26
+ */
27
+ get isMultiple(): boolean;
28
+ /**
29
+ * リレーション先のディレクトリ名を取得
30
+ */
31
+ get targetDirectoryName(): string;
32
+ /**
33
+ * 完全なリレーションパスを生成
34
+ */
35
+ getFullPath(basePath: string): string;
36
+ /**
37
+ * 等価性の判定
38
+ */
39
+ equals(other: DocRelationFieldValue): boolean;
40
+ /**
41
+ * データから生成
42
+ */
43
+ static from(data: unknown): DocRelationFieldValue;
44
+ /**
45
+ * プロパティから生成
46
+ */
47
+ static fromProps(props: {
48
+ fieldName: string;
49
+ filePath: string;
50
+ isArray: boolean;
51
+ }): DocRelationFieldValue;
52
+ /**
53
+ * JSON形式に変換
54
+ */
55
+ toJson(): DocRelationField;
56
+ }
57
+ //# sourceMappingURL=doc-relation-field-value.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-relation-field-value.d.ts","sourceRoot":"","sources":["../../lib/values/doc-relation-field-value.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAEhD;;GAEG;AACH,qBAAa,qBAAqB;IACpB,OAAO,CAAC,QAAQ,CAAC,KAAK;IAAlC,YAA6B,KAAK,EAAE,gBAAgB,EAGnD;IAED;;OAEG;IACH,IAAI,SAAS,WAEZ;IAED;;OAEG;IACH,IAAI,YAAY,WAEf;IAED;;OAEG;IACH,IAAI,OAAO,YAEV;IAED;;OAEG;IACH,IAAI,QAAQ,YAEX;IAED;;OAEG;IACH,IAAI,UAAU,YAEb;IAED;;OAEG;IACH,IAAI,mBAAmB,WAGtB;IAED;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAKpC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAM5C;IAED;;OAEG;IACH,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,GAAG,qBAAqB,CAGhD;IAED;;OAEG;IACH,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE;QACtB,SAAS,EAAE,MAAM,CAAA;QACjB,QAAQ,EAAE,MAAM,CAAA;QAChB,OAAO,EAAE,OAAO,CAAA;KACjB,GAAG,qBAAqB,CAExB;IAED;;OAEG;IACH,MAAM,IAAI,gBAAgB,CAEzB;CACF"}
@@ -0,0 +1,85 @@
1
+ import { zDocRelationField } from "../models";
2
+ /**
3
+ * リレーションフィールド
4
+ */
5
+ export class DocRelationFieldValue {
6
+ value;
7
+ constructor(value) {
8
+ this.value = value;
9
+ zDocRelationField.parse(value);
10
+ Object.freeze(this);
11
+ }
12
+ /**
13
+ * フィールド名を取得
14
+ */
15
+ get fieldName() {
16
+ return this.value.fieldName;
17
+ }
18
+ /**
19
+ * リレーション先のパスを取得
20
+ */
21
+ get relationPath() {
22
+ return this.value.filePath;
23
+ }
24
+ /**
25
+ * 配列型かどうかを取得
26
+ */
27
+ get isArray() {
28
+ return this.value.isArray;
29
+ }
30
+ /**
31
+ * 単一リレーションかどうかを判定
32
+ */
33
+ get isSingle() {
34
+ return !this.value.isArray;
35
+ }
36
+ /**
37
+ * 複数リレーションかどうかを判定
38
+ */
39
+ get isMultiple() {
40
+ return this.value.isArray;
41
+ }
42
+ /**
43
+ * リレーション先のディレクトリ名を取得
44
+ */
45
+ get targetDirectoryName() {
46
+ const parts = this.value.filePath.split("/");
47
+ return parts[parts.length - 1] || "";
48
+ }
49
+ /**
50
+ * 完全なリレーションパスを生成
51
+ */
52
+ getFullPath(basePath) {
53
+ if (this.value.filePath.startsWith("/")) {
54
+ return this.value.filePath;
55
+ }
56
+ return `${basePath}/${this.value.filePath}`;
57
+ }
58
+ /**
59
+ * 等価性の判定
60
+ */
61
+ equals(other) {
62
+ return (this.fieldName === other.fieldName &&
63
+ this.relationPath === other.relationPath &&
64
+ this.isArray === other.isArray);
65
+ }
66
+ /**
67
+ * データから生成
68
+ */
69
+ static from(data) {
70
+ const validated = zDocRelationField.parse(data);
71
+ return new DocRelationFieldValue(validated);
72
+ }
73
+ /**
74
+ * プロパティから生成
75
+ */
76
+ static fromProps(props) {
77
+ return new DocRelationFieldValue(props);
78
+ }
79
+ /**
80
+ * JSON形式に変換
81
+ */
82
+ toJson() {
83
+ return { ...this.value };
84
+ }
85
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=doc-relation-field-value.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-relation-field-value.test.d.ts","sourceRoot":"","sources":["../../lib/values/doc-relation-field-value.test.ts"],"names":[],"mappings":""}