@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,99 @@
1
+ import type { DocFileMdFrontMatter, DocRelationFile, DocSchemaRecord } from "../types";
2
+ import { DocSchemaFieldRelationMultipleValue } from "./doc-schema-field-relation-multiple-value";
3
+ import { DocSchemaFieldRelationSingleValue } from "./doc-schema-field-relation-single-value";
4
+ import type { DocSchemaFieldValue } from "./doc-schema-field-value";
5
+ /**
6
+ * スキーマとリレーション
7
+ */
8
+ export declare class DocSchemaValue {
9
+ readonly value: DocSchemaRecord;
10
+ constructor(value: DocSchemaRecord);
11
+ /**
12
+ * フィールド名の一覧を取得
13
+ */
14
+ get fieldNames(): string[];
15
+ /**
16
+ * 指定されたフィールド名のフィールドを取得
17
+ */
18
+ field(name: string): DocSchemaFieldValue | null;
19
+ get fields(): DocSchemaFieldValue[];
20
+ get relationFields(): (DocSchemaFieldRelationSingleValue | DocSchemaFieldRelationMultipleValue)[];
21
+ /**
22
+ * 空のスキーマエンティティを作成
23
+ */
24
+ static empty(): DocSchemaValue;
25
+ /**
26
+ * スキーマからリレーションパスを抽出
27
+ */
28
+ extractRelationPaths(): Set<string>;
29
+ /**
30
+ * フィールドがリレーション型かどうかを判定
31
+ */
32
+ private isRelationField;
33
+ /**
34
+ * リレーションオプションを作成
35
+ */
36
+ createRelationOption(filePath: string, title: string | null): DocRelationFile;
37
+ /**
38
+ * ファイルをスキップすべきかどうかを判定
39
+ */
40
+ shouldSkipFile(filePath: string): boolean;
41
+ /**
42
+ * 値を指定された型に変換する(デフォルト値フォールバック付き)
43
+ */
44
+ convertValue(value: unknown, targetType: string, defaultValue: unknown): unknown;
45
+ /**
46
+ * 型別の変換処理
47
+ */
48
+ private convertByType;
49
+ /**
50
+ * 文字列型への変換
51
+ */
52
+ private convertToString;
53
+ /**
54
+ * 数値型への変換
55
+ */
56
+ private convertToNumber;
57
+ /**
58
+ * ブール型への変換
59
+ */
60
+ private convertToBoolean;
61
+ /**
62
+ * 配列型への変換
63
+ */
64
+ private convertToArray;
65
+ /**
66
+ * リレーション型への変換
67
+ */
68
+ private convertToRelation;
69
+ /**
70
+ * マルチリレーション型への変換
71
+ */
72
+ private convertToMultiRelation;
73
+ /**
74
+ * パスからファイル名を抽出(拡張子除去)
75
+ */
76
+ private extractFileNameFromPath;
77
+ /**
78
+ * スキーマベースでFrontMatterを補完する
79
+ */
80
+ getCompleteFrontMatter(rawFrontMatter: unknown): DocFileMdFrontMatter;
81
+ /**
82
+ * スキーマからデフォルトFrontMatterを生成
83
+ */
84
+ private generateDefaultFrontMatter;
85
+ /**
86
+ * 既存の値を保持しながらマージ
87
+ */
88
+ private mergePreservingExistingValues;
89
+ /**
90
+ * ファイルパスからファイル名を抽出(拡張子なし)
91
+ */
92
+ private extractFileName;
93
+ /**
94
+ * nullまundefinedのチェック
95
+ */
96
+ private isNullOrUndefined;
97
+ toJson(): DocSchemaRecord;
98
+ }
99
+ //# sourceMappingURL=doc-schema-value.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-schema-value.d.ts","sourceRoot":"","sources":["../../lib/values/doc-schema-value.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,oBAAoB,EACpB,eAAe,EAEf,eAAe,EAEhB,MAAM,UAAU,CAAA;AAGjB,OAAO,EAAE,mCAAmC,EAAE,MAAM,4CAA4C,CAAA;AAChG,OAAO,EAAE,iCAAiC,EAAE,MAAM,0CAA0C,CAAA;AAC5F,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAEnE;;GAEG;AACH,qBAAa,cAAc;IACb,QAAQ,CAAC,KAAK,EAAE,eAAe;IAA3C,YAAqB,KAAK,EAAE,eAAe,EAI1C;IAED;;OAEG;IACH,IAAI,UAAU,IAAI,MAAM,EAAE,CAEzB;IAED;;OAEG;IACH,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI,CAU9C;IAED,IAAI,MAAM,0BAUT;IAED,IAAI,cAAc,IAAI,CAClB,iCAAiC,GACjC,mCAAmC,CACtC,EAAE,CAOF;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,IAAI,cAAc,CAE7B;IAED;;OAEG;IACH,oBAAoB,IAAI,GAAG,CAAC,MAAM,CAAC,CAYlC;IAED;;OAEG;IACH,OAAO,CAAC,eAAe;IAIvB;;OAEG;IACH,oBAAoB,CAClB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GAAG,IAAI,GACnB,eAAe,CAQjB;IAED;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAExC;IAED;;OAEG;IACH,YAAY,CACV,KAAK,EAAE,OAAO,EACd,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,OAAO,GACpB,OAAO,CAUT;IAED;;OAEG;IACH,OAAO,CAAC,aAAa;IA0BrB;;OAEG;IACH,OAAO,CAAC,eAAe;IAOvB;;OAEG;IACH,OAAO,CAAC,eAAe;IAUvB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAYxB;;OAEG;IACH,OAAO,CAAC,cAAc;IAQtB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAOzB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAiB9B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAK/B;;OAEG;IACH,sBAAsB,CAAC,cAAc,EAAE,OAAO,GAAG,oBAAoB,CAMpE;IAED;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAalC;;OAEG;IACH,OAAO,CAAC,6BAA6B;IAkBrC;;OAEG;IACH,OAAO,CAAC,eAAe;IAIvB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAIzB,MAAM,IAAI,eAAe,CAExB;CACF"}
@@ -0,0 +1,269 @@
1
+ import { zDocFileMdFrontMatter, zDocRelationFile, zDocSchema } from "../models";
2
+ import { DocFrontMatterMdValue } from "./doc-front-matter-md-value";
3
+ import { DocSchemaFieldFactory } from "./doc-schema-field-factory";
4
+ import { DocSchemaFieldRelationMultipleValue } from "./doc-schema-field-relation-multiple-value";
5
+ import { DocSchemaFieldRelationSingleValue } from "./doc-schema-field-relation-single-value";
6
+ /**
7
+ * スキーマとリレーション
8
+ */
9
+ export class DocSchemaValue {
10
+ value;
11
+ constructor(value) {
12
+ this.value = value;
13
+ zDocSchema.parse(value);
14
+ Object.freeze(this.value);
15
+ Object.freeze(this);
16
+ }
17
+ /**
18
+ * フィールド名の一覧を取得
19
+ */
20
+ get fieldNames() {
21
+ return Object.keys(this.value);
22
+ }
23
+ /**
24
+ * 指定されたフィールド名のフィールドを取得
25
+ */
26
+ field(name) {
27
+ const fieldDef = this.value[name];
28
+ if (fieldDef === undefined) {
29
+ return null;
30
+ }
31
+ const factory = new DocSchemaFieldFactory();
32
+ return factory.fromSchemaEntry(name, fieldDef);
33
+ }
34
+ get fields() {
35
+ const factory = new DocSchemaFieldFactory();
36
+ return this.fieldNames.map((name) => {
37
+ const fieldValue = this.value[name];
38
+ if (!fieldValue) {
39
+ throw new Error(`Field ${name} not found in schema`);
40
+ }
41
+ return factory.fromSchemaEntry(name, fieldValue);
42
+ });
43
+ }
44
+ get relationFields() {
45
+ return this.fields.filter((t) => {
46
+ return (t instanceof DocSchemaFieldRelationSingleValue ||
47
+ t instanceof DocSchemaFieldRelationMultipleValue);
48
+ });
49
+ }
50
+ /**
51
+ * 空のスキーマエンティティを作成
52
+ */
53
+ static empty() {
54
+ return new DocSchemaValue({});
55
+ }
56
+ /**
57
+ * スキーマからリレーションパスを抽出
58
+ */
59
+ extractRelationPaths() {
60
+ if (!this.value)
61
+ return new Set();
62
+ const uniqueRelationPaths = new Set();
63
+ for (const field of Object.values(this.value)) {
64
+ if (this.isRelationField(field) && "path" in field) {
65
+ uniqueRelationPaths.add(field.path);
66
+ }
67
+ }
68
+ return uniqueRelationPaths;
69
+ }
70
+ /**
71
+ * フィールドがリレーション型かどうかを判定
72
+ */
73
+ isRelationField(field) {
74
+ return field.type === "relation" || field.type === "multi-relation";
75
+ }
76
+ /**
77
+ * リレーションオプションを作成
78
+ */
79
+ createRelationOption(filePath, title) {
80
+ const fileName = this.extractFileName(filePath);
81
+ return zDocRelationFile.parse({
82
+ name: fileName,
83
+ label: title || fileName,
84
+ value: fileName,
85
+ path: filePath,
86
+ });
87
+ }
88
+ /**
89
+ * ファイルをスキップすべきかどうかを判定
90
+ */
91
+ shouldSkipFile(filePath) {
92
+ return filePath.endsWith("index.md") || filePath.endsWith("README.md");
93
+ }
94
+ /**
95
+ * 値を指定された型に変換する(デフォルト値フォールバック付き)
96
+ */
97
+ convertValue(value, targetType, defaultValue) {
98
+ if (this.isNullOrUndefined(value)) {
99
+ return defaultValue;
100
+ }
101
+ try {
102
+ return this.convertByType(value, targetType, defaultValue);
103
+ }
104
+ catch {
105
+ return defaultValue;
106
+ }
107
+ }
108
+ /**
109
+ * 型別の変換処理
110
+ */
111
+ convertByType(value, targetType, defaultValue) {
112
+ if (targetType === "text") {
113
+ return this.convertToString(value, defaultValue);
114
+ }
115
+ if (targetType === "number") {
116
+ return this.convertToNumber(value, defaultValue);
117
+ }
118
+ if (targetType === "boolean") {
119
+ return this.convertToBoolean(value, defaultValue);
120
+ }
121
+ if (targetType === "multi-text" || targetType === "array") {
122
+ return this.convertToArray(value, defaultValue);
123
+ }
124
+ if (targetType === "relation") {
125
+ return this.convertToRelation(value, defaultValue);
126
+ }
127
+ if (targetType === "multi-relation") {
128
+ return this.convertToMultiRelation(value, defaultValue);
129
+ }
130
+ return defaultValue;
131
+ }
132
+ /**
133
+ * 文字列型への変換
134
+ */
135
+ convertToString(value, defaultValue) {
136
+ if (typeof value === "string")
137
+ return value;
138
+ if (typeof value === "number")
139
+ return String(value);
140
+ if (typeof value === "boolean")
141
+ return String(value);
142
+ return defaultValue;
143
+ }
144
+ /**
145
+ * 数値型への変換
146
+ */
147
+ convertToNumber(value, defaultValue) {
148
+ if (typeof value === "number")
149
+ return value;
150
+ if (typeof value === "string") {
151
+ const parsed = Number(value);
152
+ return Number.isNaN(parsed) ? defaultValue : parsed;
153
+ }
154
+ if (typeof value === "boolean")
155
+ return value ? 1 : 0;
156
+ return defaultValue;
157
+ }
158
+ /**
159
+ * ブール型への変換
160
+ */
161
+ convertToBoolean(value, defaultValue) {
162
+ if (typeof value === "boolean")
163
+ return value;
164
+ if (typeof value === "string") {
165
+ const lower = value.toLowerCase();
166
+ if (lower === "true" || lower === "1")
167
+ return true;
168
+ if (lower === "false" || lower === "0")
169
+ return false;
170
+ return defaultValue;
171
+ }
172
+ if (typeof value === "number")
173
+ return value !== 0;
174
+ return defaultValue;
175
+ }
176
+ /**
177
+ * 配列型への変換
178
+ */
179
+ convertToArray(value, defaultValue) {
180
+ if (Array.isArray(value))
181
+ return value;
182
+ if (typeof value === "string") {
183
+ return value.split(",").map((item) => item.trim());
184
+ }
185
+ return defaultValue;
186
+ }
187
+ /**
188
+ * リレーション型への変換
189
+ */
190
+ convertToRelation(value, defaultValue) {
191
+ if (typeof value === "string") {
192
+ return this.extractFileNameFromPath(value);
193
+ }
194
+ return defaultValue;
195
+ }
196
+ /**
197
+ * マルチリレーション型への変換
198
+ */
199
+ convertToMultiRelation(value, defaultValue) {
200
+ if (Array.isArray(value)) {
201
+ return value
202
+ .filter((item) => typeof item === "string")
203
+ .map((item) => this.extractFileNameFromPath(item));
204
+ }
205
+ if (typeof value === "string") {
206
+ return value
207
+ .split(",")
208
+ .map((item) => this.extractFileNameFromPath(item.trim()));
209
+ }
210
+ return defaultValue;
211
+ }
212
+ /**
213
+ * パスからファイル名を抽出(拡張子除去)
214
+ */
215
+ extractFileNameFromPath(path) {
216
+ const fileName = path.split("/").pop() || path;
217
+ return fileName.replace(/\.md$/, "");
218
+ }
219
+ /**
220
+ * スキーマベースでFrontMatterを補完する
221
+ */
222
+ getCompleteFrontMatter(rawFrontMatter) {
223
+ const defaultFrontMatter = this.generateDefaultFrontMatter();
224
+ return this.mergePreservingExistingValues(defaultFrontMatter, rawFrontMatter);
225
+ }
226
+ /**
227
+ * スキーマからデフォルトFrontMatterを生成
228
+ */
229
+ generateDefaultFrontMatter() {
230
+ if (!this.value)
231
+ return {};
232
+ const defaultFrontMatter = {};
233
+ for (const [key, field] of Object.entries(this.value)) {
234
+ defaultFrontMatter[key] =
235
+ DocFrontMatterMdValue.generateDefaultValueFromSchemaField(field);
236
+ }
237
+ return zDocFileMdFrontMatter.parse(defaultFrontMatter);
238
+ }
239
+ /**
240
+ * 既存の値を保持しながらマージ
241
+ */
242
+ mergePreservingExistingValues(defaults, existing) {
243
+ const result = { ...defaults };
244
+ if (existing && typeof existing === "object") {
245
+ const validatedData = zDocFileMdFrontMatter.parse(existing);
246
+ for (const [key, value] of Object.entries(validatedData)) {
247
+ if (value !== undefined && value !== null) {
248
+ result[key] = value;
249
+ }
250
+ }
251
+ }
252
+ return result;
253
+ }
254
+ /**
255
+ * ファイルパスからファイル名を抽出(拡張子なし)
256
+ */
257
+ extractFileName(filePath) {
258
+ return filePath.split("/").pop()?.replace(".md", "") || filePath;
259
+ }
260
+ /**
261
+ * nullまundefinedのチェック
262
+ */
263
+ isNullOrUndefined(value) {
264
+ return value === null || value === undefined;
265
+ }
266
+ toJson() {
267
+ return this.value;
268
+ }
269
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=doc-schema-value.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-schema-value.test.d.ts","sourceRoot":"","sources":["../../lib/values/doc-schema-value.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,301 @@
1
+ import { expect, test } from "bun:test";
2
+ import { DocSchemaFieldRelationMultipleValue } from "./doc-schema-field-relation-multiple-value";
3
+ import { DocSchemaFieldRelationSingleValue } from "./doc-schema-field-relation-single-value";
4
+ import { DocSchemaFieldTextSingleValue } from "./doc-schema-field-text-single-value";
5
+ import { DocSchemaValue } from "./doc-schema-value";
6
+ test("スキーマの基本プロパティを取得できる", () => {
7
+ const schema = new DocSchemaValue({
8
+ title: {
9
+ type: "text",
10
+ required: true,
11
+ title: null,
12
+ description: null,
13
+ default: null,
14
+ },
15
+ author: {
16
+ type: "relation",
17
+ required: false,
18
+ path: "users/authors",
19
+ title: null,
20
+ description: null,
21
+ default: null,
22
+ },
23
+ });
24
+ expect(schema.fieldNames).toEqual(["title", "author"]);
25
+ });
26
+ test("フィールドを名前で取得できる", () => {
27
+ const schema = new DocSchemaValue({
28
+ title: {
29
+ type: "text",
30
+ required: true,
31
+ title: "タイトル",
32
+ description: null,
33
+ default: null,
34
+ },
35
+ });
36
+ const field = schema.field("title");
37
+ expect(field).toBeInstanceOf(DocSchemaFieldTextSingleValue);
38
+ expect(field?.key).toBe("title");
39
+ expect(field?.title).toBe("タイトル");
40
+ });
41
+ test("存在しないフィールドの場合nullを返す", () => {
42
+ const schema = new DocSchemaValue({});
43
+ expect(schema.field("nonexistent")).toBeNull();
44
+ });
45
+ test("全フィールドを取得できる", () => {
46
+ const schema = new DocSchemaValue({
47
+ title: {
48
+ type: "text",
49
+ required: true,
50
+ title: null,
51
+ description: null,
52
+ default: null,
53
+ },
54
+ price: {
55
+ type: "number",
56
+ required: false,
57
+ title: null,
58
+ description: null,
59
+ default: null,
60
+ },
61
+ published: {
62
+ type: "boolean",
63
+ required: true,
64
+ title: null,
65
+ description: null,
66
+ default: null,
67
+ },
68
+ });
69
+ const fields = schema.fields;
70
+ expect(fields.length).toBe(3);
71
+ expect(fields[0].key).toBe("title");
72
+ expect(fields[1].key).toBe("price");
73
+ expect(fields[2].key).toBe("published");
74
+ });
75
+ test("リレーションフィールドのみを取得できる", () => {
76
+ const schema = new DocSchemaValue({
77
+ title: {
78
+ type: "text",
79
+ required: true,
80
+ title: null,
81
+ description: null,
82
+ default: null,
83
+ },
84
+ author: {
85
+ type: "relation",
86
+ required: false,
87
+ path: "users/authors",
88
+ title: null,
89
+ description: null,
90
+ default: null,
91
+ },
92
+ tags: {
93
+ type: "multi-relation",
94
+ required: false,
95
+ path: "metadata/tags",
96
+ title: null,
97
+ description: null,
98
+ default: null,
99
+ },
100
+ description: {
101
+ type: "text",
102
+ required: false,
103
+ title: null,
104
+ description: null,
105
+ default: null,
106
+ },
107
+ });
108
+ const relationFields = schema.relationFields;
109
+ expect(relationFields.length).toBe(2);
110
+ expect(relationFields[0]).toBeInstanceOf(DocSchemaFieldRelationSingleValue);
111
+ expect(relationFields[1]).toBeInstanceOf(DocSchemaFieldRelationMultipleValue);
112
+ });
113
+ test("空のスキーマを作成できる", () => {
114
+ const schema = DocSchemaValue.empty();
115
+ expect(schema.fieldNames).toEqual([]);
116
+ expect(schema.fields).toEqual([]);
117
+ });
118
+ test("リレーションパスを抽出できる", () => {
119
+ const schema = new DocSchemaValue({
120
+ author: {
121
+ type: "relation",
122
+ required: false,
123
+ path: "users/authors",
124
+ title: null,
125
+ description: null,
126
+ default: null,
127
+ },
128
+ category: {
129
+ type: "relation",
130
+ required: false,
131
+ path: "categories",
132
+ title: null,
133
+ description: null,
134
+ default: null,
135
+ },
136
+ tags: {
137
+ type: "multi-relation",
138
+ required: false,
139
+ path: "metadata/tags",
140
+ title: null,
141
+ description: null,
142
+ default: null,
143
+ },
144
+ title: {
145
+ type: "text",
146
+ required: true,
147
+ title: null,
148
+ description: null,
149
+ default: null,
150
+ },
151
+ });
152
+ const paths = schema.extractRelationPaths();
153
+ expect(paths.size).toBe(3);
154
+ expect(paths.has("users/authors")).toBe(true);
155
+ expect(paths.has("categories")).toBe(true);
156
+ expect(paths.has("metadata/tags")).toBe(true);
157
+ });
158
+ test("リレーションオプションを作成できる", () => {
159
+ const schema = new DocSchemaValue({});
160
+ const option = schema.createRelationOption("users/tanaka.md", "田中太郎");
161
+ expect(option.value).toBe("tanaka");
162
+ expect(option.label).toBe("田中太郎");
163
+ expect(option.path).toBe("users/tanaka.md");
164
+ });
165
+ test("タイトルがnullの場合ファイル名をラベルとして使用する", () => {
166
+ const schema = new DocSchemaValue({});
167
+ const option = schema.createRelationOption("categories/tech.md", null);
168
+ expect(option.value).toBe("tech");
169
+ expect(option.label).toBe("tech");
170
+ });
171
+ test("ファイルをスキップすべきか判定できる", () => {
172
+ const schema = new DocSchemaValue({});
173
+ expect(schema.shouldSkipFile("docs/index.md")).toBe(true);
174
+ expect(schema.shouldSkipFile("docs/README.md")).toBe(true);
175
+ expect(schema.shouldSkipFile("docs/article.md")).toBe(false);
176
+ });
177
+ test("値を指定された型に変換できる", () => {
178
+ const schema = new DocSchemaValue({});
179
+ // テキスト型への変換
180
+ expect(schema.convertValue(123, "text", "default")).toBe("123");
181
+ expect(schema.convertValue(true, "text", "default")).toBe("true");
182
+ expect(schema.convertValue(null, "text", "default")).toBe("default");
183
+ // 数値型への変換
184
+ expect(schema.convertValue("123", "number", 0)).toBe(123);
185
+ expect(schema.convertValue(true, "number", 0)).toBe(1);
186
+ expect(schema.convertValue(false, "number", 0)).toBe(0);
187
+ expect(schema.convertValue("invalid", "number", 0)).toBe(0);
188
+ // ブール型への変換
189
+ expect(schema.convertValue("true", "boolean", false)).toBe(true);
190
+ expect(schema.convertValue("1", "boolean", false)).toBe(true);
191
+ expect(schema.convertValue("false", "boolean", false)).toBe(false);
192
+ expect(schema.convertValue(0, "boolean", false)).toBe(false);
193
+ expect(schema.convertValue(1, "boolean", false)).toBe(true);
194
+ // 配列型への変換
195
+ expect(schema.convertValue("a,b,c", "multi-text", [])).toEqual([
196
+ "a",
197
+ "b",
198
+ "c",
199
+ ]);
200
+ expect(schema.convertValue(["x", "y"], "array", [])).toEqual(["x", "y"]);
201
+ // リレーション型への変換
202
+ expect(schema.convertValue("users/tanaka.md", "relation", "")).toBe("tanaka");
203
+ expect(schema.convertValue("tanaka", "relation", "")).toBe("tanaka");
204
+ // マルチリレーション型への変換
205
+ expect(schema.convertValue("a.md,b.md", "multi-relation", [])).toEqual([
206
+ "a",
207
+ "b",
208
+ ]);
209
+ expect(schema.convertValue(["x.md", "y.md"], "multi-relation", [])).toEqual([
210
+ "x",
211
+ "y",
212
+ ]);
213
+ });
214
+ test("スキーマベースでFrontMatterを補完できる", () => {
215
+ const schema = new DocSchemaValue({
216
+ title: {
217
+ type: "text",
218
+ required: true,
219
+ default: "無題",
220
+ title: null,
221
+ description: null,
222
+ },
223
+ published: {
224
+ type: "boolean",
225
+ required: false,
226
+ default: false,
227
+ title: null,
228
+ description: null,
229
+ },
230
+ tags: {
231
+ type: "multi-text",
232
+ required: false,
233
+ default: [],
234
+ title: null,
235
+ description: null,
236
+ },
237
+ });
238
+ const result = schema.getCompleteFrontMatter({
239
+ title: "記事タイトル",
240
+ });
241
+ expect(result).toEqual({
242
+ title: "記事タイトル",
243
+ published: false,
244
+ tags: [],
245
+ });
246
+ });
247
+ test("既存の値を保持しながらデフォルト値を補完する", () => {
248
+ const schema = new DocSchemaValue({
249
+ title: {
250
+ type: "text",
251
+ required: true,
252
+ default: "無題",
253
+ title: null,
254
+ description: null,
255
+ },
256
+ author: {
257
+ type: "text",
258
+ required: false,
259
+ default: "匿名",
260
+ title: null,
261
+ description: null,
262
+ },
263
+ published: {
264
+ type: "boolean",
265
+ required: false,
266
+ default: false,
267
+ title: null,
268
+ description: null,
269
+ },
270
+ });
271
+ const result = schema.getCompleteFrontMatter({
272
+ author: "田中太郎",
273
+ published: true,
274
+ });
275
+ expect(result).toEqual({
276
+ title: "無題",
277
+ author: "田中太郎",
278
+ published: true,
279
+ });
280
+ });
281
+ test("JSON形式に変換できる", () => {
282
+ const schemaData = {
283
+ field1: {
284
+ type: "text",
285
+ required: true,
286
+ title: null,
287
+ description: null,
288
+ default: null,
289
+ },
290
+ field2: {
291
+ type: "number",
292
+ required: false,
293
+ title: null,
294
+ description: null,
295
+ default: null,
296
+ },
297
+ };
298
+ const schema = new DocSchemaValue(schemaData);
299
+ const json = schema.toJson();
300
+ expect(json).toEqual(schemaData);
301
+ });