@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,39 @@
1
+ /**
2
+ * 単一ブール型スキーマフィールド
3
+ */
4
+ export class DocSchemaFieldBooleanSingleValue {
5
+ key;
6
+ value;
7
+ constructor(key, value) {
8
+ this.key = key;
9
+ this.value = value;
10
+ Object.freeze(this);
11
+ }
12
+ get type() {
13
+ return this.value.type;
14
+ }
15
+ get required() {
16
+ return this.value.required;
17
+ }
18
+ get title() {
19
+ return this.value.title ?? "";
20
+ }
21
+ get description() {
22
+ return this.value.description ?? "";
23
+ }
24
+ get default() {
25
+ return this.value.default;
26
+ }
27
+ isArray = false;
28
+ isSingle = true;
29
+ isBoolean = true;
30
+ toJson() {
31
+ return { ...this.value };
32
+ }
33
+ /**
34
+ * 値の型を検証する
35
+ */
36
+ validate(value) {
37
+ return typeof value === "boolean";
38
+ }
39
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=doc-schema-field-boolean-single-value.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-schema-field-boolean-single-value.test.d.ts","sourceRoot":"","sources":["../../lib/values/doc-schema-field-boolean-single-value.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,73 @@
1
+ import { expect, test } from "bun:test";
2
+ import { DocSchemaFieldBooleanSingleValue } from "./doc-schema-field-boolean-single-value";
3
+ test("単一ブール型フィールドの基本プロパティを取得できる", () => {
4
+ const field = new DocSchemaFieldBooleanSingleValue("isPublished", {
5
+ type: "boolean",
6
+ required: true,
7
+ title: "公開状態",
8
+ description: "記事が公開されているかどうか",
9
+ default: false,
10
+ });
11
+ expect(field.key).toBe("isPublished");
12
+ expect(field.type).toBe("boolean");
13
+ expect(field.required).toBe(true);
14
+ expect(field.title).toBe("公開状態");
15
+ expect(field.description).toBe("記事が公開されているかどうか");
16
+ expect(field.default).toBe(false);
17
+ });
18
+ test("配列判定メソッドが正しく動作する", () => {
19
+ const field = new DocSchemaFieldBooleanSingleValue("active", {
20
+ type: "boolean",
21
+ required: false,
22
+ title: null,
23
+ description: null,
24
+ default: null,
25
+ });
26
+ expect(field.isArray).toBe(false);
27
+ expect(field.isSingle).toBe(true);
28
+ expect(field.isBoolean).toBe(true);
29
+ });
30
+ test("オプショナルなプロパティがundefinedでも動作する", () => {
31
+ const field = new DocSchemaFieldBooleanSingleValue("flag", {
32
+ type: "boolean",
33
+ required: true,
34
+ title: null,
35
+ description: null,
36
+ default: null,
37
+ });
38
+ expect(field.title).toBe("");
39
+ expect(field.description).toBe("");
40
+ expect(field.default).toBe(null);
41
+ });
42
+ test("値の検証メソッドが正しく動作する", () => {
43
+ const field = new DocSchemaFieldBooleanSingleValue("enabled", {
44
+ type: "boolean",
45
+ required: true,
46
+ title: null,
47
+ description: null,
48
+ default: null,
49
+ });
50
+ expect(field.validate(true)).toBe(true);
51
+ expect(field.validate(false)).toBe(true);
52
+ expect(field.validate("true")).toBe(false);
53
+ expect(field.validate(1)).toBe(false);
54
+ expect(field.validate(null)).toBe(false);
55
+ expect(field.validate(undefined)).toBe(false);
56
+ });
57
+ test("JSON形式に変換できる", () => {
58
+ const field = new DocSchemaFieldBooleanSingleValue("featured", {
59
+ type: "boolean",
60
+ required: false,
61
+ title: "注目記事",
62
+ description: null,
63
+ default: false,
64
+ });
65
+ const json = field.toJson();
66
+ expect(json).toEqual({
67
+ type: "boolean",
68
+ required: false,
69
+ title: "注目記事",
70
+ description: null,
71
+ default: false,
72
+ });
73
+ });
@@ -0,0 +1,37 @@
1
+ import type { DocSchemaField } from "../types";
2
+ import type { DocSchemaFieldValue } from "./doc-schema-field-value";
3
+ /**
4
+ * スキーマフィールドファクトリ
5
+ */
6
+ export declare class DocSchemaFieldFactory {
7
+ constructor();
8
+ /**
9
+ * スキーマエントリから適切な型のフィールドを生成
10
+ */
11
+ fromSchemaEntry(key: string, field: DocSchemaField): DocSchemaFieldValue;
12
+ /**
13
+ * 未検証のデータから正規化して生成
14
+ */
15
+ fromUnknown(key: string, data: unknown): DocSchemaFieldValue;
16
+ /**
17
+ * フィールド定義を正規化
18
+ */
19
+ private normalizeField;
20
+ /**
21
+ * デフォルトのテキストフィールドを作成
22
+ */
23
+ private createDefaultTextField;
24
+ /**
25
+ * 型名を正規化
26
+ */
27
+ private normalizeType;
28
+ /**
29
+ * オブジェクトからプロパティを安全に取得
30
+ */
31
+ private getFieldProperty;
32
+ /**
33
+ * 型固有のデフォルト値を取得(イミュータブル)
34
+ */
35
+ private getTypeSpecificDefaults;
36
+ }
37
+ //# sourceMappingURL=doc-schema-field-factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-schema-field-factory.d.ts","sourceRoot":"","sources":["../../lib/values/doc-schema-field-factory.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAe9C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAEnE;;GAEG;AACH,qBAAa,qBAAqB;IAChC,cAEC;IAED;;OAEG;IACH,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,GAAG,mBAAmB,CAkDvE;IAED;;OAEG;IACH,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,mBAAmB,CAI3D;IAED;;OAEG;IACH,OAAO,CAAC,cAAc;IAgCtB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAU9B;;OAEG;IACH,OAAO,CAAC,aAAa;IAUrB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAOxB;;OAEG;IACH,OAAO,CAAC,uBAAuB;CAkBhC"}
@@ -0,0 +1,151 @@
1
+ import { zDocSchemaField } from "../models";
2
+ import { DocSchemaFieldBooleanMultipleValue } from "./doc-schema-field-boolean-multiple-value";
3
+ import { DocSchemaFieldBooleanSingleValue } from "./doc-schema-field-boolean-single-value";
4
+ import { DocSchemaFieldNumberMultipleValue } from "./doc-schema-field-number-multiple-value";
5
+ import { DocSchemaFieldNumberSingleValue } from "./doc-schema-field-number-single-value";
6
+ import { DocSchemaFieldRelationMultipleValue } from "./doc-schema-field-relation-multiple-value";
7
+ import { DocSchemaFieldRelationSingleValue } from "./doc-schema-field-relation-single-value";
8
+ import { DocSchemaFieldSelectNumberMultipleValue } from "./doc-schema-field-select-number-multiple-value";
9
+ import { DocSchemaFieldSelectNumberSingleValue } from "./doc-schema-field-select-number-single-value";
10
+ import { DocSchemaFieldSelectTextMultipleValue } from "./doc-schema-field-select-text-multiple-value";
11
+ import { DocSchemaFieldSelectTextSingleValue } from "./doc-schema-field-select-text-single-value";
12
+ import { DocSchemaFieldTextMultipleValue } from "./doc-schema-field-text-multiple-value";
13
+ import { DocSchemaFieldTextSingleValue } from "./doc-schema-field-text-single-value";
14
+ import { DocSchemaFieldTypeValue } from "./doc-schema-field-type-value";
15
+ /**
16
+ * スキーマフィールドファクトリ
17
+ */
18
+ export class DocSchemaFieldFactory {
19
+ constructor() {
20
+ Object.freeze(this);
21
+ }
22
+ /**
23
+ * スキーマエントリから適切な型のフィールドを生成
24
+ */
25
+ fromSchemaEntry(key, field) {
26
+ if (field.type === "text") {
27
+ return new DocSchemaFieldTextSingleValue(key, field);
28
+ }
29
+ if (field.type === "multi-text") {
30
+ return new DocSchemaFieldTextMultipleValue(key, field);
31
+ }
32
+ if (field.type === "number") {
33
+ return new DocSchemaFieldNumberSingleValue(key, field);
34
+ }
35
+ if (field.type === "multi-number") {
36
+ return new DocSchemaFieldNumberMultipleValue(key, field);
37
+ }
38
+ if (field.type === "boolean") {
39
+ return new DocSchemaFieldBooleanSingleValue(key, field);
40
+ }
41
+ if (field.type === "multi-boolean") {
42
+ return new DocSchemaFieldBooleanMultipleValue(key, field);
43
+ }
44
+ if (field.type === "select-text") {
45
+ return new DocSchemaFieldSelectTextSingleValue(key, field);
46
+ }
47
+ if (field.type === "select-number") {
48
+ return new DocSchemaFieldSelectNumberSingleValue(key, field);
49
+ }
50
+ if (field.type === "multi-select-text") {
51
+ return new DocSchemaFieldSelectTextMultipleValue(key, field);
52
+ }
53
+ if (field.type === "multi-select-number") {
54
+ return new DocSchemaFieldSelectNumberMultipleValue(key, field);
55
+ }
56
+ if (field.type === "relation") {
57
+ return new DocSchemaFieldRelationSingleValue(key, field);
58
+ }
59
+ if (field.type === "multi-relation") {
60
+ return new DocSchemaFieldRelationMultipleValue(key, field);
61
+ }
62
+ throw new Error("Unknown field type");
63
+ }
64
+ /**
65
+ * 未検証のデータから正規化して生成
66
+ */
67
+ fromUnknown(key, data) {
68
+ const normalized = this.normalizeField(data);
69
+ const validated = zDocSchemaField.parse(normalized);
70
+ return this.fromSchemaEntry(key, validated);
71
+ }
72
+ /**
73
+ * フィールド定義を正規化
74
+ */
75
+ normalizeField(field) {
76
+ if (!field || typeof field !== "object") {
77
+ // オブジェクトでない場合はデフォルトのテキストフィールドとして扱う
78
+ return this.createDefaultTextField();
79
+ }
80
+ const fieldType = this.getFieldProperty(field, "type");
81
+ const fieldRequired = this.getFieldProperty(field, "required");
82
+ const fieldTitle = this.getFieldProperty(field, "title");
83
+ const fieldDescription = this.getFieldProperty(field, "description");
84
+ const fieldDefault = this.getFieldProperty(field, "default");
85
+ // 型の正規化
86
+ const normalizedType = this.normalizeType(fieldType);
87
+ const typeValue = DocSchemaFieldTypeValue.from(normalizedType);
88
+ // 正規化されたフィールドを構築
89
+ const baseField = {
90
+ type: normalizedType,
91
+ required: fieldRequired ?? false,
92
+ title: fieldTitle,
93
+ description: fieldDescription,
94
+ default: fieldDefault,
95
+ };
96
+ // 型固有のデフォルト値を追加
97
+ return {
98
+ ...baseField,
99
+ ...this.getTypeSpecificDefaults(field, typeValue),
100
+ };
101
+ }
102
+ /**
103
+ * デフォルトのテキストフィールドを作成
104
+ */
105
+ createDefaultTextField() {
106
+ return {
107
+ type: "text",
108
+ required: false,
109
+ title: "",
110
+ description: "",
111
+ default: "",
112
+ };
113
+ }
114
+ /**
115
+ * 型名を正規化
116
+ */
117
+ normalizeType(type) {
118
+ if (typeof type !== "string")
119
+ return "text";
120
+ // 旧型名から新型名への変換
121
+ if (type === "string")
122
+ return "text";
123
+ if (type === "multi-string")
124
+ return "multi-text";
125
+ return type;
126
+ }
127
+ /**
128
+ * オブジェクトからプロパティを安全に取得
129
+ */
130
+ getFieldProperty(obj, key) {
131
+ if (Object.hasOwn(obj, key)) {
132
+ return Object.getOwnPropertyDescriptor(obj, key)?.value;
133
+ }
134
+ return null;
135
+ }
136
+ /**
137
+ * 型固有のデフォルト値を取得(イミュータブル)
138
+ */
139
+ getTypeSpecificDefaults(field, fieldType) {
140
+ const defaults = {};
141
+ // リレーション型の場合、pathが必要
142
+ if (fieldType.isRelation) {
143
+ defaults.path = this.getFieldProperty(field, "path") ?? "";
144
+ }
145
+ // 選択型の場合、optionsが必要
146
+ if (fieldType.isSelect) {
147
+ defaults.options = this.getFieldProperty(field, "options") ?? [];
148
+ }
149
+ return defaults;
150
+ }
151
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=doc-schema-field-factory.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-schema-field-factory.test.d.ts","sourceRoot":"","sources":["../../lib/values/doc-schema-field-factory.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,215 @@
1
+ import { expect, test } from "bun:test";
2
+ import { DocSchemaFieldBooleanSingleValue } from "./doc-schema-field-boolean-single-value";
3
+ import { DocSchemaFieldFactory } from "./doc-schema-field-factory";
4
+ import { DocSchemaFieldNumberSingleValue } from "./doc-schema-field-number-single-value";
5
+ import { DocSchemaFieldRelationMultipleValue } from "./doc-schema-field-relation-multiple-value";
6
+ import { DocSchemaFieldRelationSingleValue } from "./doc-schema-field-relation-single-value";
7
+ import { DocSchemaFieldSelectTextSingleValue } from "./doc-schema-field-select-text-single-value";
8
+ import { DocSchemaFieldTextMultipleValue } from "./doc-schema-field-text-multiple-value";
9
+ import { DocSchemaFieldTextSingleValue } from "./doc-schema-field-text-single-value";
10
+ test("テキスト型フィールドを生成できる", () => {
11
+ const factory = new DocSchemaFieldFactory();
12
+ const field = factory.fromSchemaEntry("title", {
13
+ type: "text",
14
+ required: true,
15
+ title: "タイトル",
16
+ description: null,
17
+ default: null,
18
+ });
19
+ expect(field).toBeInstanceOf(DocSchemaFieldTextSingleValue);
20
+ expect(field.key).toBe("title");
21
+ expect(field.type).toBe("text");
22
+ });
23
+ test("数値型フィールドを生成できる", () => {
24
+ const factory = new DocSchemaFieldFactory();
25
+ const field = factory.fromSchemaEntry("price", {
26
+ type: "number",
27
+ required: false,
28
+ title: null,
29
+ description: null,
30
+ default: 1000,
31
+ });
32
+ expect(field).toBeInstanceOf(DocSchemaFieldNumberSingleValue);
33
+ expect(field.type).toBe("number");
34
+ expect(field.default).toBe(1000);
35
+ });
36
+ test("ブール型フィールドを生成できる", () => {
37
+ const factory = new DocSchemaFieldFactory();
38
+ const field = factory.fromSchemaEntry("published", {
39
+ type: "boolean",
40
+ required: true,
41
+ title: null,
42
+ description: null,
43
+ default: false,
44
+ });
45
+ expect(field).toBeInstanceOf(DocSchemaFieldBooleanSingleValue);
46
+ expect(field.type).toBe("boolean");
47
+ });
48
+ test("リレーション型フィールドを生成できる", () => {
49
+ const factory = new DocSchemaFieldFactory();
50
+ const field = factory.fromSchemaEntry("author", {
51
+ type: "relation",
52
+ required: true,
53
+ title: null,
54
+ description: null,
55
+ default: null,
56
+ path: "users/authors",
57
+ });
58
+ expect(field).toBeInstanceOf(DocSchemaFieldRelationSingleValue);
59
+ expect(field.type).toBe("relation");
60
+ expect(field.path).toBe("users/authors");
61
+ });
62
+ test("選択型フィールドを生成できる", () => {
63
+ const factory = new DocSchemaFieldFactory();
64
+ const field = factory.fromSchemaEntry("status", {
65
+ type: "select-text",
66
+ required: false,
67
+ title: null,
68
+ description: null,
69
+ default: null,
70
+ options: ["draft", "published"],
71
+ });
72
+ expect(field).toBeInstanceOf(DocSchemaFieldSelectTextSingleValue);
73
+ expect(field.options).toEqual([
74
+ "draft",
75
+ "published",
76
+ ]);
77
+ });
78
+ test("複数型フィールドを生成できる", () => {
79
+ const factory = new DocSchemaFieldFactory();
80
+ const field = factory.fromSchemaEntry("tags", {
81
+ type: "multi-text",
82
+ required: false,
83
+ title: null,
84
+ description: null,
85
+ default: ["tech", "news"],
86
+ });
87
+ expect(field).toBeInstanceOf(DocSchemaFieldTextMultipleValue);
88
+ expect(field.isArray).toBe(true);
89
+ expect(field.default).toEqual(["tech", "news"]);
90
+ });
91
+ test("複数リレーション型フィールドを生成できる", () => {
92
+ const factory = new DocSchemaFieldFactory();
93
+ const field = factory.fromSchemaEntry("categories", {
94
+ type: "multi-relation",
95
+ required: false,
96
+ title: null,
97
+ description: null,
98
+ default: null,
99
+ path: "metadata/categories",
100
+ });
101
+ expect(field).toBeInstanceOf(DocSchemaFieldRelationMultipleValue);
102
+ expect(field.path).toBe("metadata/categories");
103
+ });
104
+ test("不明な型でエラーが発生する", () => {
105
+ const factory = new DocSchemaFieldFactory();
106
+ expect(() => {
107
+ factory.fromSchemaEntry("unknown", {
108
+ type: "invalid-type",
109
+ required: false,
110
+ title: null,
111
+ description: null,
112
+ default: null,
113
+ });
114
+ }).toThrow();
115
+ });
116
+ test("fromUnknownメソッドで未検証データから生成できる", () => {
117
+ const factory = new DocSchemaFieldFactory();
118
+ // 正しいデータ
119
+ const field1 = factory.fromUnknown("field1", {
120
+ type: "text",
121
+ required: true,
122
+ title: null,
123
+ description: null,
124
+ default: null,
125
+ });
126
+ expect(field1).toBeInstanceOf(DocSchemaFieldTextSingleValue);
127
+ // 型が古い形式
128
+ const field2 = factory.fromUnknown("field2", {
129
+ type: "string",
130
+ required: false,
131
+ title: null,
132
+ description: null,
133
+ default: null,
134
+ });
135
+ expect(field2).toBeInstanceOf(DocSchemaFieldTextSingleValue);
136
+ expect(field2.type).toBe("text");
137
+ // オブジェクトでない場合
138
+ const field3 = factory.fromUnknown("field3", null);
139
+ expect(field3).toBeInstanceOf(DocSchemaFieldTextSingleValue);
140
+ expect(field3.required).toBe(false);
141
+ // 必須プロパティが欠けている場合
142
+ const field4 = factory.fromUnknown("field4", {});
143
+ expect(field4).toBeInstanceOf(DocSchemaFieldTextSingleValue);
144
+ expect(field4.type).toBe("text");
145
+ expect(field4.required).toBe(false);
146
+ });
147
+ test("型固有のデフォルト値が設定される", () => {
148
+ const factory = new DocSchemaFieldFactory();
149
+ // リレーション型でpathが設定されている場合
150
+ const relation = factory.fromUnknown("rel", {
151
+ type: "relation",
152
+ required: true,
153
+ title: null,
154
+ description: null,
155
+ default: null,
156
+ path: "some/valid/path",
157
+ });
158
+ expect(relation.path).toBe("some/valid/path");
159
+ // 選択型でoptionsが無い場合
160
+ const select = factory.fromUnknown("sel", {
161
+ type: "select-text",
162
+ required: false,
163
+ title: null,
164
+ description: null,
165
+ default: null,
166
+ });
167
+ expect(select.options).toEqual([]);
168
+ });
169
+ test("リレーション型でpathが空の場合はエラーが発生する", () => {
170
+ const factory = new DocSchemaFieldFactory();
171
+ // pathが空文字列の場合
172
+ expect(() => {
173
+ factory.fromUnknown("rel", {
174
+ type: "relation",
175
+ required: true,
176
+ title: null,
177
+ description: null,
178
+ default: null,
179
+ path: "",
180
+ });
181
+ }).toThrow();
182
+ // pathが未定義の場合
183
+ expect(() => {
184
+ factory.fromUnknown("rel", {
185
+ type: "relation",
186
+ required: true,
187
+ title: null,
188
+ description: null,
189
+ default: null,
190
+ });
191
+ }).toThrow();
192
+ });
193
+ test("multi-string型をmulti-textに正規化する", () => {
194
+ const factory = new DocSchemaFieldFactory();
195
+ const field = factory.fromUnknown("field", {
196
+ type: "multi-string",
197
+ required: false,
198
+ title: null,
199
+ description: null,
200
+ default: null,
201
+ });
202
+ expect(field).toBeInstanceOf(DocSchemaFieldTextMultipleValue);
203
+ expect(field.type).toBe("multi-text");
204
+ });
205
+ test("undefinedプロパティがnullに変換される", () => {
206
+ const factory = new DocSchemaFieldFactory();
207
+ // titleプロパティが存在しない場合
208
+ const field = factory.fromUnknown("field", {
209
+ type: "text",
210
+ required: true,
211
+ // title: undefined (プロパティが存在しない)
212
+ });
213
+ expect(field.title).toBe("");
214
+ expect(field.description).toBe("");
215
+ });
@@ -0,0 +1,23 @@
1
+ import type { DocFieldMultiNumber, DocSchemaField } from "../types";
2
+ /**
3
+ * 数値複数型スキーマフィールド
4
+ */
5
+ export declare class DocSchemaFieldNumberMultipleValue {
6
+ readonly key: string;
7
+ readonly value: DocFieldMultiNumber;
8
+ constructor(key: string, value: DocFieldMultiNumber);
9
+ get type(): "multi-number";
10
+ get required(): boolean;
11
+ get title(): string;
12
+ get description(): string;
13
+ get default(): number[] | null;
14
+ readonly isArray: boolean;
15
+ readonly isSingle: boolean;
16
+ readonly isNumber: boolean;
17
+ /**
18
+ * 値を検証する
19
+ */
20
+ validate(value: unknown): boolean;
21
+ toJson(): DocSchemaField;
22
+ }
23
+ //# sourceMappingURL=doc-schema-field-number-multiple-value.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-schema-field-number-multiple-value.d.ts","sourceRoot":"","sources":["../../lib/values/doc-schema-field-number-multiple-value.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAEnE;;GAEG;AACH,qBAAa,iCAAiC;IAE1C,QAAQ,CAAC,GAAG,EAAE,MAAM;IACpB,QAAQ,CAAC,KAAK,EAAE,mBAAmB;IAFrC,YACW,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,mBAAmB,EAOpC;IAED,IAAI,IAAI,mBAEP;IAED,IAAI,QAAQ,YAEX;IAED,IAAI,KAAK,WAER;IAED,IAAI,WAAW,WAEd;IAED,IAAI,OAAO,oBAEV;IAED,QAAQ,CAAC,OAAO,UAAO;IAEvB,QAAQ,CAAC,QAAQ,UAAQ;IAEzB,QAAQ,CAAC,QAAQ,UAAO;IAExB;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAEhC;IAED,MAAM,IAAI,cAAc,CAEvB;CACF"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * 数値複数型スキーマフィールド
3
+ */
4
+ export class DocSchemaFieldNumberMultipleValue {
5
+ key;
6
+ value;
7
+ constructor(key, value) {
8
+ this.key = key;
9
+ this.value = value;
10
+ Object.freeze(this);
11
+ Object.freeze(this.value);
12
+ if (this.value.default) {
13
+ Object.freeze(this.value.default);
14
+ }
15
+ }
16
+ get type() {
17
+ return this.value.type;
18
+ }
19
+ get required() {
20
+ return this.value.required;
21
+ }
22
+ get title() {
23
+ return this.value.title ?? "";
24
+ }
25
+ get description() {
26
+ return this.value.description ?? "";
27
+ }
28
+ get default() {
29
+ return this.value.default;
30
+ }
31
+ isArray = true;
32
+ isSingle = false;
33
+ isNumber = true;
34
+ /**
35
+ * 値を検証する
36
+ */
37
+ validate(value) {
38
+ return Array.isArray(value) && value.every((v) => typeof v === "number");
39
+ }
40
+ toJson() {
41
+ return { ...this.value };
42
+ }
43
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=doc-schema-field-number-multiple-value.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-schema-field-number-multiple-value.test.d.ts","sourceRoot":"","sources":["../../lib/values/doc-schema-field-number-multiple-value.test.ts"],"names":[],"mappings":""}