@interactive-inc/docs-client 0.0.4 → 0.0.6

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,185 @@
1
+ import { parse, stringify } from "yaml";
2
+ import { zDocFileIndexFrontMatter } from "../models";
3
+ import { DocSchemaValue } from "../values/doc-schema-value";
4
+ import { DocSchemaFieldFactory } from "./doc-schema-field-factory";
5
+ /**
6
+ * FrontMatter
7
+ */
8
+ export class DocFrontMatterIndexValue {
9
+ value;
10
+ constructor(value) {
11
+ this.value = value;
12
+ zDocFileIndexFrontMatter.parse(value);
13
+ Object.freeze(this);
14
+ }
15
+ /**
16
+ * アイコンを取得
17
+ */
18
+ get icon() {
19
+ return this.value.icon;
20
+ }
21
+ /**
22
+ * スキーマを取得
23
+ */
24
+ get schema() {
25
+ return new DocSchemaValue(this.value.schema);
26
+ }
27
+ /**
28
+ * iconフィールドを更新
29
+ */
30
+ withIcon(value) {
31
+ if (typeof value !== "string") {
32
+ return this;
33
+ }
34
+ const currentData = this.toJson();
35
+ return DocFrontMatterIndexValue.fromRecord({
36
+ ...currentData,
37
+ icon: value,
38
+ });
39
+ }
40
+ /**
41
+ * schemaフィールドを更新
42
+ */
43
+ withSchema(value) {
44
+ if (typeof value !== "object" || value === null) {
45
+ return this;
46
+ }
47
+ const currentData = this.toJson();
48
+ return DocFrontMatterIndexValue.fromRecord({
49
+ ...currentData,
50
+ schema: DocFrontMatterIndexValue.createSchema(value),
51
+ });
52
+ }
53
+ /**
54
+ * JSON形式で出力
55
+ */
56
+ toJson() {
57
+ return this.value;
58
+ }
59
+ /**
60
+ * YAML形式で出力
61
+ */
62
+ toYaml() {
63
+ // iconとschemaのみを明示的に出力
64
+ const yamlData = {
65
+ icon: this.value.icon,
66
+ schema: this.value.schema,
67
+ };
68
+ return stringify(yamlData).trim();
69
+ }
70
+ /**
71
+ * スキーマ全体を正規化
72
+ */
73
+ static createSchema(schema) {
74
+ if (typeof schema !== "object" || schema === null) {
75
+ return {};
76
+ }
77
+ const schemaObj = schema;
78
+ const record = {};
79
+ for (const [key, value] of Object.entries(schemaObj)) {
80
+ const normalizedField = DocFrontMatterIndexValue.createSchemaField(key, value);
81
+ if (normalizedField === null)
82
+ continue;
83
+ record[key] = normalizedField;
84
+ }
85
+ return record;
86
+ }
87
+ /**
88
+ * スキーマフィールドを正規化
89
+ */
90
+ static createSchemaField(key, value) {
91
+ try {
92
+ const factory = new DocSchemaFieldFactory();
93
+ const fieldValue = factory.fromUnknown(key, value);
94
+ return fieldValue.toJson();
95
+ }
96
+ catch {
97
+ return null;
98
+ }
99
+ }
100
+ /**
101
+ * Markdownテキストから生成(不完全なデータも処理可能)
102
+ */
103
+ static from(markdownText) {
104
+ // FrontMatterセクションを抽出
105
+ if (!markdownText.startsWith("---")) {
106
+ return DocFrontMatterIndexValue.empty();
107
+ }
108
+ const endIndex = markdownText.indexOf("\n---", 3);
109
+ if (endIndex === -1) {
110
+ return DocFrontMatterIndexValue.empty();
111
+ }
112
+ const frontMatterText = markdownText.slice(4, endIndex).trim();
113
+ try {
114
+ // YAMLをパース
115
+ const data = parse(frontMatterText) || {};
116
+ return DocFrontMatterIndexValue.fromRecord(data);
117
+ }
118
+ catch {
119
+ return DocFrontMatterIndexValue.empty();
120
+ }
121
+ }
122
+ /**
123
+ * データから直接生成(不完全なデータも処理可能)
124
+ */
125
+ static fromRecord(record) {
126
+ if (typeof record !== "object") {
127
+ return DocFrontMatterIndexValue.empty();
128
+ }
129
+ const icon = DocFrontMatterIndexValue.extractIcon(record);
130
+ const schema = DocFrontMatterIndexValue.extractSchema(record);
131
+ const frontMatter = {
132
+ type: "index-frontmatter",
133
+ icon,
134
+ schema,
135
+ };
136
+ try {
137
+ const validated = zDocFileIndexFrontMatter.parse(frontMatter);
138
+ return new DocFrontMatterIndexValue(validated);
139
+ }
140
+ catch {
141
+ return DocFrontMatterIndexValue.empty();
142
+ }
143
+ }
144
+ /**
145
+ * 空のFrontMatterを生成
146
+ */
147
+ static empty() {
148
+ return new DocFrontMatterIndexValue({
149
+ type: "index-frontmatter",
150
+ icon: "",
151
+ schema: {},
152
+ });
153
+ }
154
+ /**
155
+ * アイコンを抽出
156
+ */
157
+ static extractIcon(data) {
158
+ if ("icon" in data && typeof data.icon === "string") {
159
+ return data.icon;
160
+ }
161
+ return DocFrontMatterIndexValue.getDefaultIcon();
162
+ }
163
+ /**
164
+ * スキーマを抽出
165
+ */
166
+ static extractSchema(data) {
167
+ const hasSchema = "schema" in data;
168
+ if (!hasSchema) {
169
+ return {};
170
+ }
171
+ if (typeof data.schema !== "object") {
172
+ return {};
173
+ }
174
+ if (data.schema === null) {
175
+ return {};
176
+ }
177
+ return DocFrontMatterIndexValue.createSchema(data.schema);
178
+ }
179
+ /**
180
+ * デフォルトのアイコンを取得
181
+ */
182
+ static getDefaultIcon() {
183
+ return "📃";
184
+ }
185
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=doc-front-matter-index-value.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-front-matter-index-value.test.d.ts","sourceRoot":"","sources":["../../lib/values/doc-front-matter-index-value.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,98 @@
1
+ import { expect, test } from "bun:test";
2
+ import { DocFrontMatterIndexValue } from "./doc-front-matter-index-value";
3
+ test("DocFrontMatterIndexValue - 基本的な作成とプロパティアクセス", () => {
4
+ const value = new DocFrontMatterIndexValue({
5
+ type: "index-frontmatter",
6
+ icon: "📁",
7
+ schema: {
8
+ name: {
9
+ type: "text",
10
+ required: true,
11
+ title: "名前",
12
+ description: "項目の名前",
13
+ default: "",
14
+ },
15
+ age: {
16
+ type: "number",
17
+ required: false,
18
+ title: "年齢",
19
+ description: "年齢の数値",
20
+ default: 0,
21
+ },
22
+ },
23
+ });
24
+ expect(value.icon).toBe("📁");
25
+ const schema = value.schema.toJson();
26
+ expect(schema.name?.type).toBe("text");
27
+ expect(schema.name?.required).toBe(true);
28
+ expect(schema.age?.type).toBe("number");
29
+ expect(schema.age?.required).toBe(false);
30
+ });
31
+ test("DocFrontMatterIndexValue - 空のschemaの場合", () => {
32
+ const value = new DocFrontMatterIndexValue({
33
+ type: "index-frontmatter",
34
+ icon: "",
35
+ schema: {},
36
+ });
37
+ expect(value.icon).toBe("");
38
+ expect(value.schema.toJson()).toEqual({});
39
+ });
40
+ test("DocFrontMatterIndexValue - toYamlでYAML文字列を生成", () => {
41
+ const value = new DocFrontMatterIndexValue({
42
+ type: "index-frontmatter",
43
+ icon: "📂",
44
+ schema: {
45
+ title: {
46
+ type: "text",
47
+ required: true,
48
+ title: "タイトル",
49
+ description: "ドキュメントのタイトル",
50
+ default: "",
51
+ },
52
+ },
53
+ });
54
+ const yaml = value.toYaml();
55
+ expect(yaml).toContain("icon: 📂");
56
+ expect(yaml).toContain("schema:");
57
+ expect(yaml).toContain("title:");
58
+ expect(yaml).toContain("type: text");
59
+ expect(yaml).toContain("required: true");
60
+ });
61
+ test("DocFrontMatterIndexValue - 空のiconとschemaでtoYaml", () => {
62
+ const value = new DocFrontMatterIndexValue({
63
+ type: "index-frontmatter",
64
+ icon: "",
65
+ schema: {},
66
+ });
67
+ const yaml = value.toYaml();
68
+ expect(yaml).toContain('icon: ""');
69
+ expect(yaml).toContain("schema: {}");
70
+ });
71
+ test("DocFrontMatterIndexValue - toJsonで元のデータ構造を返す", () => {
72
+ const data = {
73
+ type: "index-frontmatter",
74
+ icon: "📁",
75
+ schema: {
76
+ name: {
77
+ type: "text",
78
+ required: true,
79
+ title: "名前",
80
+ description: "項目の名前",
81
+ default: "",
82
+ },
83
+ },
84
+ };
85
+ const value = new DocFrontMatterIndexValue(data);
86
+ expect(value.toJson()).toEqual(data);
87
+ });
88
+ test("DocFrontMatterIndexValue - 不変性の確認", () => {
89
+ const value = new DocFrontMatterIndexValue({
90
+ type: "index-frontmatter",
91
+ icon: "📁",
92
+ schema: {},
93
+ });
94
+ expect(() => {
95
+ // @ts-expect-error - 不変性のテスト
96
+ value.value = {};
97
+ }).toThrow();
98
+ });
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=doc-front-matter-md-value-accessor.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-front-matter-md-value-accessor.test.d.ts","sourceRoot":"","sources":["../../lib/values/doc-front-matter-md-value-accessor.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,226 @@
1
+ import { expect, test } from "bun:test";
2
+ import { DocFrontMatterMdValue } from "./doc-front-matter-md-value";
3
+ test("text メソッドは文字列型の値のみを返す", () => {
4
+ const frontMatter = new DocFrontMatterMdValue({
5
+ title: "正しいタイトル",
6
+ count: 123,
7
+ flag: true,
8
+ list: ["item1", "item2"],
9
+ obj: { key: "value" },
10
+ nullable: null,
11
+ });
12
+ // 文字列型は正しく取得
13
+ expect(frontMatter.text("title")).toBe("正しいタイトル");
14
+ // 他の型はnullを返す
15
+ expect(frontMatter.text("count")).toBeNull();
16
+ expect(frontMatter.text("flag")).toBeNull();
17
+ expect(frontMatter.text("list")).toBeNull();
18
+ expect(frontMatter.text("obj")).toBeNull();
19
+ expect(frontMatter.text("nullable")).toBeNull();
20
+ expect(frontMatter.text("missing")).toBeNull();
21
+ });
22
+ test("number メソッドは数値型の値のみを返す", () => {
23
+ const frontMatter = new DocFrontMatterMdValue({
24
+ count: 42,
25
+ price: 99.99,
26
+ title: "文字列",
27
+ flag: false,
28
+ list: [1, 2, 3],
29
+ });
30
+ // 数値型は正しく取得
31
+ expect(frontMatter.number("count")).toBe(42);
32
+ expect(frontMatter.number("price")).toBe(99.99);
33
+ // 他の型はnullを返す
34
+ expect(frontMatter.number("title")).toBeNull();
35
+ expect(frontMatter.number("flag")).toBeNull();
36
+ expect(frontMatter.number("list")).toBeNull();
37
+ });
38
+ test("boolean メソッドは真偽値型の値のみを返す", () => {
39
+ const frontMatter = new DocFrontMatterMdValue({
40
+ published: true,
41
+ draft: false,
42
+ title: "文字列",
43
+ count: 0,
44
+ zero: 0,
45
+ empty: "",
46
+ });
47
+ // 真偽値型は正しく取得
48
+ expect(frontMatter.boolean("published")).toBe(true);
49
+ expect(frontMatter.boolean("draft")).toBe(false);
50
+ // 他の型はnullを返す(0や空文字列も)
51
+ expect(frontMatter.boolean("title")).toBeNull();
52
+ expect(frontMatter.boolean("count")).toBeNull();
53
+ expect(frontMatter.boolean("zero")).toBeNull();
54
+ expect(frontMatter.boolean("empty")).toBeNull();
55
+ });
56
+ test("relation メソッドは文字列型の値を返す(単一リレーション)", () => {
57
+ const frontMatter = new DocFrontMatterMdValue({
58
+ author: "user-123",
59
+ category: "tech-blog",
60
+ tags: ["tag1", "tag2"],
61
+ count: 123,
62
+ });
63
+ // 文字列型のリレーションは正しく取得
64
+ expect(frontMatter.relation("author")).toBe("user-123");
65
+ expect(frontMatter.relation("category")).toBe("tech-blog");
66
+ // 配列や他の型はnullを返す
67
+ expect(frontMatter.relation("tags")).toBeNull();
68
+ expect(frontMatter.relation("count")).toBeNull();
69
+ });
70
+ test("multiRelation メソッドは文字列配列のみを返す", () => {
71
+ const frontMatter = new DocFrontMatterMdValue({
72
+ features: ["login", "logout", "signup"],
73
+ tags: ["tech", "tutorial", "beginner"],
74
+ emptyArray: [],
75
+ singleString: "not-array",
76
+ numberArray: [1, 2, 3],
77
+ });
78
+ // 文字列配列は正しく取得
79
+ expect(frontMatter.multiRelation("features")).toEqual([
80
+ "login",
81
+ "logout",
82
+ "signup",
83
+ ]);
84
+ expect(frontMatter.multiRelation("tags")).toEqual([
85
+ "tech",
86
+ "tutorial",
87
+ "beginner",
88
+ ]);
89
+ expect(frontMatter.multiRelation("emptyArray")).toEqual([]);
90
+ // 単一値や数値配列は空配列を返す
91
+ expect(frontMatter.multiRelation("singleString")).toEqual([]);
92
+ expect(frontMatter.multiRelation("numberArray")).toEqual([]);
93
+ expect(frontMatter.multiRelation("missing")).toEqual([]);
94
+ });
95
+ test("multiText メソッドは文字列配列を返す", () => {
96
+ const frontMatter = new DocFrontMatterMdValue({
97
+ keywords: ["typescript", "javascript", "nodejs"],
98
+ authors: ["alice", "bob", "charlie"],
99
+ empty: [],
100
+ notArray: "single-value",
101
+ });
102
+ // 文字列配列は正しく取得
103
+ expect(frontMatter.multiText("keywords")).toEqual([
104
+ "typescript",
105
+ "javascript",
106
+ "nodejs",
107
+ ]);
108
+ expect(frontMatter.multiText("authors")).toEqual(["alice", "bob", "charlie"]);
109
+ expect(frontMatter.multiText("empty")).toEqual([]);
110
+ // 非配列は空配列を返す
111
+ expect(frontMatter.multiText("notArray")).toEqual([]);
112
+ expect(frontMatter.multiText("missing")).toEqual([]);
113
+ });
114
+ test("multiNumber メソッドは数値配列のみを返す", () => {
115
+ const frontMatter = new DocFrontMatterMdValue({
116
+ scores: [85, 90, 78],
117
+ prices: [19.99, 29.99, 39.99],
118
+ empty: [],
119
+ stringArray: ["1", "2", "3"],
120
+ singleNumber: 42,
121
+ });
122
+ // 数値配列は正しく取得
123
+ expect(frontMatter.multiNumber("scores")).toEqual([85, 90, 78]);
124
+ expect(frontMatter.multiNumber("prices")).toEqual([19.99, 29.99, 39.99]);
125
+ expect(frontMatter.multiNumber("empty")).toEqual([]);
126
+ // 文字列配列や単一値は空配列を返す
127
+ expect(frontMatter.multiNumber("stringArray")).toEqual([]);
128
+ expect(frontMatter.multiNumber("singleNumber")).toEqual([]);
129
+ expect(frontMatter.multiNumber("missing")).toEqual([]);
130
+ });
131
+ test("multiBoolean メソッドは真偽値配列のみを返す", () => {
132
+ const frontMatter = new DocFrontMatterMdValue({
133
+ flags: [true, false, true, true],
134
+ permissions: [false, false],
135
+ empty: [],
136
+ stringArray: ["true", "false"],
137
+ singleBool: true,
138
+ });
139
+ // 真偽値配列は正しく取得
140
+ expect(frontMatter.multiBoolean("flags")).toEqual([true, false, true, true]);
141
+ expect(frontMatter.multiBoolean("permissions")).toEqual([false, false]);
142
+ expect(frontMatter.multiBoolean("empty")).toEqual([]);
143
+ // 文字列配列や単一値は空配列を返す
144
+ expect(frontMatter.multiBoolean("stringArray")).toEqual([]);
145
+ expect(frontMatter.multiBoolean("singleBool")).toEqual([]);
146
+ expect(frontMatter.multiBoolean("missing")).toEqual([]);
147
+ });
148
+ test("has メソッドはプロパティの存在を正しく判定", () => {
149
+ const frontMatter = new DocFrontMatterMdValue({
150
+ title: "タイトル",
151
+ count: 0,
152
+ flag: false,
153
+ empty: "",
154
+ nullable: null,
155
+ list: [],
156
+ });
157
+ // 値が存在すればtrueを返す(falsy値でも)
158
+ expect(frontMatter.has("title")).toBe(true);
159
+ expect(frontMatter.has("count")).toBe(true);
160
+ expect(frontMatter.has("flag")).toBe(true);
161
+ expect(frontMatter.has("empty")).toBe(true);
162
+ expect(frontMatter.has("nullable")).toBe(true);
163
+ expect(frontMatter.has("list")).toBe(true);
164
+ // 存在しないキーはfalse
165
+ expect(frontMatter.has("missing")).toBe(false);
166
+ expect(frontMatter.has("notDefined")).toBe(false);
167
+ });
168
+ test("keys ゲッターはすべてのキーを返す", () => {
169
+ const frontMatter = new DocFrontMatterMdValue({
170
+ title: "テスト",
171
+ version: 1.0,
172
+ published: true,
173
+ tags: ["tag1", "tag2"],
174
+ });
175
+ const keys = frontMatter.keys;
176
+ expect(keys).toHaveLength(4);
177
+ expect(keys).toContain("title");
178
+ expect(keys).toContain("version");
179
+ expect(keys).toContain("published");
180
+ expect(keys).toContain("tags");
181
+ // 順序は保証されないので、セットで比較
182
+ expect(new Set(keys)).toEqual(new Set(["title", "version", "published", "tags"]));
183
+ });
184
+ test("特殊なケース:存在しないキーへのアクセス", () => {
185
+ const frontMatter = new DocFrontMatterMdValue({
186
+ title: "テスト",
187
+ });
188
+ expect(frontMatter.has("title")).toBe(true);
189
+ expect(frontMatter.has("undefinedValue")).toBe(false);
190
+ expect(frontMatter.text("undefinedValue")).toBeNull();
191
+ });
192
+ test("型の厳密な検証:文字列の数値は数値として扱われない", () => {
193
+ const frontMatter = new DocFrontMatterMdValue({
194
+ stringNumber: "123",
195
+ stringBool: "true",
196
+ actualNumber: 123,
197
+ actualBool: true,
198
+ });
199
+ // 文字列の"123"は数値として取得できない
200
+ expect(frontMatter.number("stringNumber")).toBeNull();
201
+ expect(frontMatter.text("stringNumber")).toBe("123");
202
+ // 文字列の"true"は真偽値として取得できない
203
+ expect(frontMatter.boolean("stringBool")).toBeNull();
204
+ expect(frontMatter.text("stringBool")).toBe("true");
205
+ // 実際の数値と真偽値は正しく取得
206
+ expect(frontMatter.number("actualNumber")).toBe(123);
207
+ expect(frontMatter.boolean("actualBool")).toBe(true);
208
+ });
209
+ test("ネストしたオブジェクトは適切に扱われる", () => {
210
+ const frontMatter = new DocFrontMatterMdValue({
211
+ meta: {
212
+ author: "John",
213
+ version: 1.0,
214
+ },
215
+ config: {
216
+ enabled: true,
217
+ settings: ["a", "b"],
218
+ },
219
+ });
220
+ // ネストしたオブジェクトは文字列や他の型として取得できない
221
+ expect(frontMatter.text("meta")).toBeNull();
222
+ expect(frontMatter.text("config")).toBeNull();
223
+ // ただし、存在はする
224
+ expect(frontMatter.has("meta")).toBe(true);
225
+ expect(frontMatter.has("config")).toBe(true);
226
+ });
@@ -0,0 +1,80 @@
1
+ import type { DocFileMdFrontMatter } from "../types";
2
+ import type { DocSchemaValue } from "./doc-schema-value";
3
+ /**
4
+ * FrontMatter
5
+ */
6
+ export declare class DocFrontMatterMdValue {
7
+ readonly value: DocFileMdFrontMatter;
8
+ constructor(value: DocFileMdFrontMatter);
9
+ toJson(): DocFileMdFrontMatter;
10
+ toYaml(): string;
11
+ /**
12
+ * Markdownテキストから生成
13
+ */
14
+ static from(markdownText: string): DocFrontMatterMdValue;
15
+ /**
16
+ * 空のFrontMatterを生成
17
+ */
18
+ static empty(): DocFrontMatterMdValue;
19
+ /**
20
+ * データから直接生成
21
+ */
22
+ static fromData(data: unknown): DocFrontMatterMdValue;
23
+ /**
24
+ * スキーマフィールドに基づいてデフォルト値を生成する
25
+ */
26
+ static generateDefaultValueFromSchemaField(fieldDef: {
27
+ type: string;
28
+ default?: unknown;
29
+ }): unknown;
30
+ /**
31
+ * 単一のプロパティを更新した新しいインスタンスを返す
32
+ * スキーマに基づいて型を検証し、スキーマのフィールドのみを含む新しいインスタンスを生成
33
+ */
34
+ withProperty(key: string, value: unknown, schema: DocSchemaValue): DocFrontMatterMdValue;
35
+ /**
36
+ * フィールド値の検証
37
+ */
38
+ private validateFieldValue;
39
+ /**
40
+ * テキスト型のプロパティを取得
41
+ */
42
+ text(key: string): string | null;
43
+ /**
44
+ * 数値型のプロパティを取得
45
+ */
46
+ number(key: string): number | null;
47
+ /**
48
+ * 真偽値型のプロパティを取得
49
+ */
50
+ boolean(key: string): boolean | null;
51
+ /**
52
+ * 単一リレーション型のプロパティを取得
53
+ */
54
+ relation(key: string): string | null;
55
+ /**
56
+ * 複数リレーション型のプロパティを取得
57
+ */
58
+ multiRelation(key: string): string[];
59
+ /**
60
+ * 複数テキスト型のプロパティを取得
61
+ */
62
+ multiText(key: string): string[];
63
+ /**
64
+ * 複数数値型のプロパティを取得
65
+ */
66
+ multiNumber(key: string): number[];
67
+ /**
68
+ * 複数真偽値型のプロパティを取得
69
+ */
70
+ multiBoolean(key: string): boolean[];
71
+ /**
72
+ * プロパティが存在するかチェック
73
+ */
74
+ has(key: string): boolean;
75
+ /**
76
+ * すべてのキーを取得
77
+ */
78
+ get keys(): string[];
79
+ }
80
+ //# sourceMappingURL=doc-front-matter-md-value.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-front-matter-md-value.d.ts","sourceRoot":"","sources":["../../lib/values/doc-front-matter-md-value.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAIV,oBAAoB,EAIrB,MAAM,UAAU,CAAA;AAUjB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAExD;;GAEG;AACH,qBAAa,qBAAqB;IACpB,QAAQ,CAAC,KAAK,EAAE,oBAAoB;IAAhD,YAAqB,KAAK,EAAE,oBAAoB,EAG/C;IAED,MAAM,IAAI,oBAAoB,CAE7B;IAED,MAAM,IAAI,MAAM,CAEf;IAED;;OAEG;IACH,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,qBAAqB,CAQvD;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,IAAI,qBAAqB,CAEpC;IAED;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,qBAAqB,CAGpD;IAED;;OAEG;IACH,MAAM,CAAC,mCAAmC,CAAC,QAAQ,EAAE;QACnD,IAAI,EAAE,MAAM,CAAA;QACZ,OAAO,CAAC,EAAE,OAAO,CAAA;KAClB,GAAG,OAAO,CAsBV;IAED;;;OAGG;IACH,YAAY,CACV,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,cAAc,GACrB,qBAAqB,CA4CvB;IAED;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAc1B;;OAEG;IACH,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAU/B;IAED;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAUjC;IAED;;OAEG;IACH,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAYnC;IAED;;OAEG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAWnC;IAED;;OAEG;IACH,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAYnC;IAED;;OAEG;IACH,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAY/B;IAED;;OAEG;IACH,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAYjC;IAED;;OAEG;IACH,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,EAAE,CAYnC;IAED;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAExB;IAED;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,EAAE,CAEnB;CACF"}