@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,73 @@
1
+ import { describe, expect, it } from "bun:test";
2
+ import { DocContentMdFrontMatterValue } from "./doc-content-md-front-matter-value";
3
+ describe("OpenMarkdownFrontmatter", () => {
4
+ describe("fromMarkdown", () => {
5
+ it("Markdownテキストからフロントマターを抽出できる", () => {
6
+ const markdown = `---
7
+ title: テストタイトル
8
+ description: テスト説明
9
+ tags:
10
+ - tag1
11
+ - tag2
12
+ ---
13
+ # 見出し
14
+ 本文コンテンツ`;
15
+ const frontMatter = DocContentMdFrontMatterValue.fromMarkdown(markdown);
16
+ expect(frontMatter.data).toEqual({
17
+ title: "テストタイトル",
18
+ description: "テスト説明",
19
+ tags: ["tag1", "tag2"],
20
+ });
21
+ expect(frontMatter.yamlText).toBe(`title: テストタイトル
22
+ description: テスト説明
23
+ tags:
24
+ - tag1
25
+ - tag2`);
26
+ });
27
+ it("フロントマターがない場合は空のインスタンスを返す", () => {
28
+ const markdown = `# 見出し
29
+ 本文コンテンツ`;
30
+ const frontMatter = DocContentMdFrontMatterValue.fromMarkdown(markdown);
31
+ expect(frontMatter.data).toBeNull();
32
+ expect(frontMatter.yamlText).toBe("");
33
+ });
34
+ it("フロントマターの終わりがない場合は空のインスタンスを返す", () => {
35
+ const markdown = `---
36
+ title: テストタイトル
37
+ # 見出し
38
+ 本文コンテンツ`;
39
+ const frontMatter = DocContentMdFrontMatterValue.fromMarkdown(markdown);
40
+ expect(frontMatter.data).toBeNull();
41
+ expect(frontMatter.yamlText).toBe("");
42
+ });
43
+ it("空のフロントマターも正しく処理する", () => {
44
+ const markdown = `---
45
+ ---
46
+ # 見出し
47
+ 本文コンテンツ`;
48
+ const frontMatter = DocContentMdFrontMatterValue.fromMarkdown(markdown);
49
+ expect(frontMatter.data).toEqual({});
50
+ expect(frontMatter.yamlText).toBe("");
51
+ });
52
+ });
53
+ describe("update", () => {
54
+ it("更新後もyamlTextが保持される", () => {
55
+ const frontMatter = DocContentMdFrontMatterValue.fromFrontMatter({
56
+ title: "元のタイトル",
57
+ description: "元の説明",
58
+ });
59
+ const updated = frontMatter.update({
60
+ title: "新しいタイトル",
61
+ newField: "新しいフィールド",
62
+ });
63
+ expect(updated.data).toEqual({
64
+ title: "新しいタイトル",
65
+ description: "元の説明",
66
+ newField: "新しいフィールド",
67
+ });
68
+ expect(updated.yamlText).toContain("title: 新しいタイトル");
69
+ expect(updated.yamlText).toContain("description: 元の説明");
70
+ expect(updated.yamlText).toContain("newField: 新しいフィールド");
71
+ });
72
+ });
73
+ });
@@ -0,0 +1,66 @@
1
+ import { DocContentMdFrontMatterValue } from "./doc-content-md-front-matter-value";
2
+ /**
3
+ * Markdownの解析と生成
4
+ */
5
+ export declare class DocContentMdValue {
6
+ readonly text: string;
7
+ constructor(text: string);
8
+ /**
9
+ * Front Matter
10
+ */
11
+ get frontMatter(): DocContentMdFrontMatterValue;
12
+ /**
13
+ * body
14
+ */
15
+ get content(): string;
16
+ /**
17
+ * title
18
+ */
19
+ get title(): string;
20
+ /**
21
+ * H1の次の段落、またはH1がない場合は最初の段落をdescriptionとして取得する
22
+ */
23
+ get description(): string | null;
24
+ /**
25
+ * 新しいフロントマターとコンテンツでMarkdownインスタンスを作成
26
+ */
27
+ static fromProps(props: {
28
+ frontMatter: Record<string, unknown>;
29
+ content: string;
30
+ }): DocContentMdValue;
31
+ /**
32
+ * 現在のフロントマターをYAMLテキストに変換する
33
+ */
34
+ frontMatterToText(): string;
35
+ /**
36
+ * 現在のフロントマターを更新して新しいMarkdownテキストを生成
37
+ */
38
+ updateFrontMatter(draft: Record<string, unknown>): string;
39
+ /**
40
+ * 新しいフロントマターでOpenMarkdownインスタンスを作成
41
+ */
42
+ withFrontMatter(frontMatter: Record<string, unknown>): DocContentMdValue;
43
+ /**
44
+ * フロントマターを更新した新しいOpenMarkdownインスタンスを作成
45
+ */
46
+ withUpdatedFrontMatter(draft: Record<string, unknown>): DocContentMdValue;
47
+ /**
48
+ * マークダウンをtitle、description、本文の3つの部分に分離する
49
+ */
50
+ private parseContentParts;
51
+ /**
52
+ * title、description、本文からマークダウンを構築する
53
+ */
54
+ private buildContent;
55
+ /**
56
+ * H1タイトルを更新した新しいOpenMarkdownインスタンスを作成
57
+ */
58
+ withTitle(newTitle: string): DocContentMdValue;
59
+ /**
60
+ * H1の次のdescription段落を更新した新しいOpenMarkdownインスタンスを作成
61
+ * @param newDescription 新しいdescription
62
+ * @param defaultTitle H1がない場合に使用するデフォルトタイトル
63
+ */
64
+ withDescription(newDescription: string, defaultTitle?: string): DocContentMdValue;
65
+ }
66
+ //# sourceMappingURL=doc-content-md-value.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-content-md-value.d.ts","sourceRoot":"","sources":["../../lib/values/doc-content-md-value.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,qCAAqC,CAAA;AAElF;;GAEG;AACH,qBAAa,iBAAiB;IAChB,QAAQ,CAAC,IAAI,EAAE,MAAM;IAAjC,YAAqB,IAAI,EAAE,MAAM,EAAI;IAErC;;OAEG;IACH,IAAI,WAAW,IAAI,4BAA4B,CAE9C;IAED;;OAEG;IACH,IAAI,OAAO,IAAI,MAAM,CAyBpB;IAED;;OAEG;IACH,IAAI,KAAK,IAAI,MAAM,CAalB;IAED;;OAEG;IACH,IAAW,WAAW,IAAI,MAAM,GAAG,IAAI,CAsBtC;IAED;;OAEG;IACH,OAAc,SAAS,CAAC,KAAK,EAAE;QAC7B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QACpC,OAAO,EAAE,MAAM,CAAA;KAChB,GAAG,iBAAiB,CAkBpB;IAED;;OAEG;IACI,iBAAiB,IAAI,MAAM,CAEjC;IAED;;OAEG;IACI,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAM/D;IAED;;OAEG;IACI,eAAe,CACpB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACnC,iBAAiB,CAKnB;IAED;;OAEG;IACI,sBAAsB,CAC3B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,iBAAiB,CAGnB;IAED;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAwDzB;;OAEG;IACH,OAAO,CAAC,YAAY;IAsBpB;;OAEG;IACI,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,iBAAiB,CAYpD;IAED;;;;OAIG;IACI,eAAe,CACpB,cAAc,EAAE,MAAM,EACtB,YAAY,CAAC,EAAE,MAAM,GACpB,iBAAiB,CAoBnB;CACF"}
@@ -0,0 +1,218 @@
1
+ import { DocContentMdFrontMatterValue } from "./doc-content-md-front-matter-value";
2
+ /**
3
+ * Markdownの解析と生成
4
+ */
5
+ export class DocContentMdValue {
6
+ text;
7
+ constructor(text) {
8
+ this.text = text;
9
+ }
10
+ /**
11
+ * Front Matter
12
+ */
13
+ get frontMatter() {
14
+ return DocContentMdFrontMatterValue.fromMarkdown(this.text);
15
+ }
16
+ /**
17
+ * body
18
+ */
19
+ get content() {
20
+ if (!this.text || typeof this.text !== "string") {
21
+ return this.text || "";
22
+ }
23
+ if (!this.text.startsWith("---")) {
24
+ return this.text;
25
+ }
26
+ const startIndex = this.text.indexOf("---");
27
+ const endIndex = this.text.indexOf("---", startIndex + 3);
28
+ if (endIndex === -1) {
29
+ return this.text;
30
+ }
31
+ let content = this.text.slice(endIndex + 3);
32
+ if (this.text.slice(endIndex + 3).startsWith("\n\n")) {
33
+ content = `\n${this.text.slice(endIndex + 4).trim()}`;
34
+ }
35
+ else {
36
+ content = this.text.slice(endIndex + 3).trim();
37
+ }
38
+ return content.trim();
39
+ }
40
+ /**
41
+ * title
42
+ */
43
+ get title() {
44
+ const content = this.content;
45
+ if (!content || typeof content !== "string") {
46
+ return "";
47
+ }
48
+ const titleMatch = content.match(/^#\s+(.*?)$/m);
49
+ if (!titleMatch || !titleMatch[1]) {
50
+ return "";
51
+ }
52
+ return titleMatch[1].trim();
53
+ }
54
+ /**
55
+ * H1の次の段落、またはH1がない場合は最初の段落をdescriptionとして取得する
56
+ */
57
+ get description() {
58
+ const content = this.content;
59
+ // H1を見つける
60
+ const h1Match = content.match(/^#\s+(.+)$/m);
61
+ let searchContent;
62
+ if (h1Match) {
63
+ // H1がある場合は、H1の後の内容から検索
64
+ const h1EndIndex = (h1Match.index ?? 0) + h1Match[0].length;
65
+ searchContent = content.substring(h1EndIndex);
66
+ }
67
+ else {
68
+ // H1がない場合は、コンテンツ全体から検索
69
+ searchContent = content;
70
+ }
71
+ // 空行をスキップして最初の段落を取得(見出しやリストが来るまで)
72
+ const paragraphMatch = searchContent.match(/^\s*\n*([^#\n*-][^\n]*(?:\n(?![#\s*-])[^\n]*)*)/m);
73
+ return paragraphMatch ? (paragraphMatch[1]?.trim() ?? null) : null;
74
+ }
75
+ /**
76
+ * 新しいフロントマターとコンテンツでMarkdownインスタンスを作成
77
+ */
78
+ static fromProps(props) {
79
+ const contentOpenMarkdown = new DocContentMdValue(props.content);
80
+ const existingContent = contentOpenMarkdown.content;
81
+ // 新しいフロントマターでMarkdownテキストを生成
82
+ const frontMatterInstance = DocContentMdFrontMatterValue.fromFrontMatter(props.frontMatter);
83
+ const frontMatterText = frontMatterInstance.frontMatterText();
84
+ let markdownText;
85
+ if (frontMatterText) {
86
+ markdownText = `---\n${frontMatterText}\n---\n\n${existingContent}`.trim();
87
+ }
88
+ else {
89
+ markdownText = existingContent;
90
+ }
91
+ return new DocContentMdValue(markdownText);
92
+ }
93
+ /**
94
+ * 現在のフロントマターをYAMLテキストに変換する
95
+ */
96
+ frontMatterToText() {
97
+ return this.frontMatter.frontMatterText();
98
+ }
99
+ /**
100
+ * 現在のフロントマターを更新して新しいMarkdownテキストを生成
101
+ */
102
+ updateFrontMatter(draft) {
103
+ const updatedFrontMatter = this.frontMatter.update(draft);
104
+ return DocContentMdValue.fromProps({
105
+ frontMatter: updatedFrontMatter.data || {},
106
+ content: this.content,
107
+ }).text;
108
+ }
109
+ /**
110
+ * 新しいフロントマターでOpenMarkdownインスタンスを作成
111
+ */
112
+ withFrontMatter(frontMatter) {
113
+ return DocContentMdValue.fromProps({
114
+ frontMatter,
115
+ content: this.content,
116
+ });
117
+ }
118
+ /**
119
+ * フロントマターを更新した新しいOpenMarkdownインスタンスを作成
120
+ */
121
+ withUpdatedFrontMatter(draft) {
122
+ const updatedFrontMatter = this.frontMatter.update(draft);
123
+ return this.withFrontMatter(updatedFrontMatter.data || {});
124
+ }
125
+ /**
126
+ * マークダウンをtitle、description、本文の3つの部分に分離する
127
+ */
128
+ parseContentParts() {
129
+ const content = this.content;
130
+ // H1を見つける
131
+ const h1Match = content.match(/^#\s+(.+)$/m);
132
+ if (!h1Match) {
133
+ // H1がない場合、最初の段落をdescriptionとして抽出
134
+ const paragraphMatch = content.match(/^(\s*)([^#\n*-][^\n]*(?:\n(?![#\s*-])[^\n]*)*)(.*)/ms);
135
+ if (paragraphMatch) {
136
+ const [, , descriptionPart, remaining] = paragraphMatch;
137
+ return {
138
+ title: null,
139
+ description: descriptionPart?.trim() ?? "",
140
+ body: remaining?.trim() ?? "",
141
+ };
142
+ }
143
+ return {
144
+ title: null,
145
+ description: null,
146
+ body: content.trim(),
147
+ };
148
+ }
149
+ const title = h1Match[1]?.trim() ?? "";
150
+ const h1EndIndex = (h1Match.index ?? 0) + h1Match[0].length;
151
+ const afterH1 = content.substring(h1EndIndex);
152
+ // description段落を見つける
153
+ const paragraphMatch = afterH1.match(/^(\s*\n*)([^#\n*-][^\n]*(?:\n(?![#\s*-])[^\n]*)*)(.*)/ms);
154
+ if (paragraphMatch) {
155
+ const [, , descriptionPart, remaining] = paragraphMatch;
156
+ return {
157
+ title,
158
+ description: descriptionPart?.trim() ?? "",
159
+ body: remaining?.trim() ?? "",
160
+ };
161
+ }
162
+ return {
163
+ title,
164
+ description: null,
165
+ body: afterH1.trim(),
166
+ };
167
+ }
168
+ /**
169
+ * title、description、本文からマークダウンを構築する
170
+ */
171
+ buildContent(title, description, body) {
172
+ const parts = [];
173
+ if (title) {
174
+ parts.push(`# ${title}`);
175
+ }
176
+ if (description) {
177
+ parts.push(description);
178
+ }
179
+ if (body) {
180
+ parts.push(body);
181
+ }
182
+ return parts.join("\n\n");
183
+ }
184
+ /**
185
+ * H1タイトルを更新した新しいOpenMarkdownインスタンスを作成
186
+ */
187
+ withTitle(newTitle) {
188
+ const { description, body } = this.parseContentParts();
189
+ const updatedContent = this.buildContent(newTitle, description, body);
190
+ // 既存のFrontMatterを保持
191
+ const frontMatterData = this.frontMatter.data !== null ? this.frontMatter.data : {};
192
+ return DocContentMdValue.fromProps({
193
+ frontMatter: frontMatterData,
194
+ content: updatedContent,
195
+ });
196
+ }
197
+ /**
198
+ * H1の次のdescription段落を更新した新しいOpenMarkdownインスタンスを作成
199
+ * @param newDescription 新しいdescription
200
+ * @param defaultTitle H1がない場合に使用するデフォルトタイトル
201
+ */
202
+ withDescription(newDescription, defaultTitle) {
203
+ const { title, body } = this.parseContentParts();
204
+ // H1がない場合、デフォルトタイトルを使用
205
+ const finalTitle = title || defaultTitle;
206
+ if (!finalTitle) {
207
+ // タイトルが提供されない場合は変更しない
208
+ return this;
209
+ }
210
+ const updatedContent = this.buildContent(finalTitle, newDescription, body);
211
+ // 既存のFrontMatterを保持
212
+ const frontMatterData = this.frontMatter.data !== null ? this.frontMatter.data : {};
213
+ return DocContentMdValue.fromProps({
214
+ frontMatter: frontMatterData,
215
+ content: updatedContent,
216
+ });
217
+ }
218
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=doc-content-md-value.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-content-md-value.test.d.ts","sourceRoot":"","sources":["../../lib/values/doc-content-md-value.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,179 @@
1
+ import { describe, expect, it } from "bun:test";
2
+ import { z } from "zod/v4";
3
+ import { DocContentMdValue } from "./doc-content-md-value";
4
+ describe("parseMarkdown", () => {
5
+ it("フロントマターがある場合は正しく抽出する", () => {
6
+ const text = `---
7
+ title: テストタイトル
8
+ description: テスト説明
9
+ ---
10
+ # 見出し
11
+ 本文コンテンツ`;
12
+ const openMarkdown = new DocContentMdValue(text);
13
+ expect(openMarkdown.frontMatter.data).toEqual({
14
+ title: "テストタイトル",
15
+ description: "テスト説明",
16
+ });
17
+ expect(openMarkdown.content).toBe("# 見出し\n本文コンテンツ");
18
+ expect(openMarkdown.title).toBe("見出し");
19
+ });
20
+ it("フロントマターがない場合はnullを返す", () => {
21
+ const text = `# 見出し
22
+ 本文コンテンツ`;
23
+ const openMarkdown = new DocContentMdValue(text);
24
+ expect(openMarkdown.frontMatter.data).toBeNull();
25
+ expect(openMarkdown.content).toBe("# 見出し\n本文コンテンツ");
26
+ expect(openMarkdown.title).toBe("見出し");
27
+ });
28
+ it("最初の行が---でもフロントマターの終わりがない場合はnullを返す", () => {
29
+ const text = `---
30
+ ここには終わりがない
31
+ # 見出し
32
+ 本文コンテンツ`;
33
+ const openMarkdown = new DocContentMdValue(text);
34
+ expect(openMarkdown.frontMatter.data).toBeNull();
35
+ expect(openMarkdown.content).toContain("---");
36
+ });
37
+ it("空のフロントマターを処理できる", () => {
38
+ const text = `---
39
+ ---
40
+ # 見出し
41
+ コンテンツ部分`;
42
+ const openMarkdown = new DocContentMdValue(text);
43
+ expect(openMarkdown.frontMatter.data).toEqual({});
44
+ expect(openMarkdown.content).toBe("# 見出し\nコンテンツ部分");
45
+ expect(openMarkdown.title).toBe("見出し");
46
+ });
47
+ it("フロントマターの後に空行がある場合も処理できる", () => {
48
+ const text = `---
49
+ title: テストタイトル
50
+ ---
51
+
52
+ # 見出し
53
+ 本文コンテンツ`;
54
+ const openMarkdown = new DocContentMdValue(text);
55
+ expect(openMarkdown.frontMatter.data).toEqual({ title: "テストタイトル" });
56
+ expect(openMarkdown.content).toBe("# 見出し\n本文コンテンツ");
57
+ expect(openMarkdown.title).toBe("見出し");
58
+ });
59
+ });
60
+ describe("OpenMarkdown instance", () => {
61
+ it("基本的なfront matterを解析できる", () => {
62
+ const text = `---
63
+ title: テストタイトル
64
+ description: テスト説明
65
+ ---
66
+ # 見出し
67
+ 本文コンテンツ`;
68
+ const openMarkdown = new DocContentMdValue(text);
69
+ expect(openMarkdown.frontMatter.data).toEqual({
70
+ title: "テストタイトル",
71
+ description: "テスト説明",
72
+ });
73
+ expect(openMarkdown.content).toBe("# 見出し\n本文コンテンツ");
74
+ expect(openMarkdown.title).toBe("見出し");
75
+ });
76
+ it("空のfront matterも処理できる", () => {
77
+ const text = `---
78
+ ---
79
+ # 見出し
80
+ 本文コンテンツ`;
81
+ const openMarkdown = new DocContentMdValue(text);
82
+ expect(openMarkdown.frontMatter.data).toEqual({});
83
+ expect(openMarkdown.content).toBe("# 見出し\n本文コンテンツ");
84
+ expect(openMarkdown.title).toBe("見出し");
85
+ });
86
+ it("配列値を含むfront matterを処理できる", () => {
87
+ const text = `---
88
+ title: テストタイトル
89
+ tags:
90
+ - タグ1
91
+ - タグ2
92
+ - タグ3
93
+ ---
94
+ # 見出し
95
+ 本文コンテンツ`;
96
+ const openMarkdown = new DocContentMdValue(text);
97
+ expect(openMarkdown.frontMatter.data).toEqual({
98
+ title: "テストタイトル",
99
+ tags: ["タグ1", "タグ2", "タグ3"],
100
+ });
101
+ expect(openMarkdown.content).toBe("# 見出し\n本文コンテンツ");
102
+ expect(openMarkdown.title).toBe("見出し");
103
+ });
104
+ it("型変換を含むスキーマでも正しく動作する", () => {
105
+ // スキーマの型を明示的に定義
106
+ const schema = z.object({
107
+ title: z.string(),
108
+ count: z.number().transform((val) => val * 2),
109
+ });
110
+ const text = `---
111
+ title: テストタイトル
112
+ count: 42
113
+ ---
114
+ # 見出し
115
+ 本文コンテンツ`;
116
+ const openMarkdown = new DocContentMdValue(text);
117
+ const data = schema.parse(openMarkdown.frontMatter.data);
118
+ expect(data).toEqual({
119
+ title: "テストタイトル",
120
+ count: 84,
121
+ });
122
+ expect(openMarkdown.content).toBe("# 見出し\n本文コンテンツ");
123
+ expect(openMarkdown.title).toBe("見出し");
124
+ });
125
+ it("fromPropsメソッドでMarkdownテキストを生成できる", () => {
126
+ const text = `---
127
+ title: テストタイトル
128
+ ---
129
+ # 見出し
130
+ 本文コンテンツ`;
131
+ const openMarkdown = new DocContentMdValue(text);
132
+ const generatedMarkdown = DocContentMdValue.fromProps({
133
+ frontMatter: openMarkdown.frontMatter.data || {},
134
+ content: openMarkdown.content,
135
+ });
136
+ expect(generatedMarkdown.text).toContain("title: テストタイトル");
137
+ expect(generatedMarkdown.text).toContain("# 見出し");
138
+ expect(generatedMarkdown.text).toContain("本文コンテンツ");
139
+ });
140
+ it("updateFrontMatterメソッドでフロントマターを更新できる", () => {
141
+ const text = `---
142
+ title: テストタイトル
143
+ ---
144
+ # 見出し
145
+ 本文コンテンツ`;
146
+ const openMarkdown = new DocContentMdValue(text);
147
+ const updatedText = openMarkdown.updateFrontMatter({
148
+ title: "更新されたタイトル",
149
+ description: "新しい説明",
150
+ });
151
+ expect(updatedText).toContain("title: 更新されたタイトル");
152
+ expect(updatedText).toContain("description: 新しい説明");
153
+ expect(updatedText).toContain("# 見出し");
154
+ expect(updatedText).toContain("本文コンテンツ");
155
+ });
156
+ it("frontMatter.yamlTextでフロントマターYAMLテキストを取得できる", () => {
157
+ const text = `---
158
+ title: テストタイトル
159
+ description: テスト説明
160
+ tags:
161
+ - tag1
162
+ - tag2
163
+ ---
164
+ # 見出し
165
+ 本文コンテンツ`;
166
+ const openMarkdown = new DocContentMdValue(text);
167
+ expect(openMarkdown.frontMatter.yamlText).toBe(`title: テストタイトル
168
+ description: テスト説明
169
+ tags:
170
+ - tag1
171
+ - tag2`);
172
+ });
173
+ it("フロントマターがない場合frontMatter.yamlTextは空文字", () => {
174
+ const text = `# 見出し
175
+ 本文コンテンツ`;
176
+ const openMarkdown = new DocContentMdValue(text);
177
+ expect(openMarkdown.frontMatter.yamlText).toBe("");
178
+ });
179
+ });
@@ -0,0 +1,89 @@
1
+ import type { DocPathSystem } from "../doc-path-system";
2
+ import { DocFilePathValue } from "./doc-file-path-value";
3
+ type DocDirectoryPath = {
4
+ path: string;
5
+ name: string;
6
+ fullPath: string;
7
+ };
8
+ /**
9
+ * ディレクトリパスを表す値オブジェクト
10
+ */
11
+ export declare class DocDirectoryPathValue {
12
+ private readonly value;
13
+ private readonly pathSystem;
14
+ constructor(value: DocDirectoryPath, pathSystem: DocPathSystem);
15
+ /**
16
+ * 相対ディレクトリパス
17
+ */
18
+ get path(): string;
19
+ /**
20
+ * ディレクトリ名
21
+ */
22
+ get name(): string;
23
+ /**
24
+ * 親ディレクトリパスを取得
25
+ */
26
+ get parent(): DocDirectoryPathValue | null;
27
+ /**
28
+ * 親ディレクトリパス
29
+ */
30
+ get parentPath(): string;
31
+ /**
32
+ * 深さ(ディレクトリの階層数)
33
+ */
34
+ get depth(): number;
35
+ /**
36
+ * パスセグメント(ディレクトリの配列)
37
+ */
38
+ get segments(): string[];
39
+ /**
40
+ * ルートからの相対パス(先頭のスラッシュなし)
41
+ */
42
+ get normalizedPath(): string;
43
+ /**
44
+ * アーカイブディレクトリかどうか(ディレクトリ名が「_」の場合)
45
+ */
46
+ get isArchived(): boolean;
47
+ /**
48
+ * 隠しディレクトリかどうか
49
+ */
50
+ get isHidden(): boolean;
51
+ /**
52
+ * ルートディレクトリかどうか
53
+ */
54
+ get isRoot(): boolean;
55
+ /**
56
+ * 絶対パス
57
+ */
58
+ get fullPath(): string;
59
+ /**
60
+ * インデックスファイルのパスを取得
61
+ */
62
+ get indexFile(): DocFilePathValue;
63
+ /**
64
+ * ファイルパスを作成
65
+ */
66
+ file(fileName: string): DocFilePathValue;
67
+ /**
68
+ * サブディレクトリのパスを作成
69
+ */
70
+ subdirectory(dirName: string): DocDirectoryPathValue;
71
+ /**
72
+ * 相対パスからインスタンスを生成(DI対応)
73
+ */
74
+ static fromPathWithSystem(dirPath: string, basePath: string, pathSystem: DocPathSystem): DocDirectoryPathValue;
75
+ /**
76
+ * JSON形式で出力
77
+ */
78
+ toJson(): DocDirectoryPath;
79
+ /**
80
+ * パスが等しいかどうか
81
+ */
82
+ equals(other: DocDirectoryPathValue): boolean;
83
+ /**
84
+ * 指定されたディレクトリがこのディレクトリの子孫かどうか
85
+ */
86
+ contains(other: DocDirectoryPathValue): boolean;
87
+ }
88
+ export {};
89
+ //# sourceMappingURL=doc-directory-path-value.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-directory-path-value.d.ts","sourceRoot":"","sources":["../../lib/values/doc-directory-path-value.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAExD,KAAK,gBAAgB,GAAG;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAED;;GAEG;AACH,qBAAa,qBAAqB;IAI9B,OAAO,CAAC,QAAQ,CAAC,KAAK;IAHxB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAe;IAE1C,YACmB,KAAK,EAAE,gBAAgB,EACxC,UAAU,EAAE,aAAa,EAI1B;IAED;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;OAEG;IACH,IAAI,MAAM,IAAI,qBAAqB,GAAG,IAAI,CAezC;IAED;;OAEG;IACH,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED;;OAEG;IACH,IAAI,KAAK,IAAI,MAAM,CAKlB;IAED;;OAEG;IACH,IAAI,QAAQ,IAAI,MAAM,EAAE,CAEvB;IAED;;OAEG;IACH,IAAI,cAAc,IAAI,MAAM,CAE3B;IAED;;OAEG;IACH,IAAI,UAAU,IAAI,OAAO,CAExB;IAED;;OAEG;IACH,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED;;OAEG;IACH,IAAI,MAAM,IAAI,OAAO,CAEpB;IAED;;OAEG;IACH,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED;;OAEG;IACH,IAAI,SAAS,IAAI,gBAAgB,CAMhC;IAED;;OAEG;IACH,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB,CAMvC;IAED;;OAEG;IACH,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,qBAAqB,CAUnD;IAED;;OAEG;IACH,MAAM,CAAC,kBAAkB,CACvB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,aAAa,GACxB,qBAAqB,CAavB;IAED;;OAEG;IACH,MAAM,IAAI,gBAAgB,CAEzB;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAE5C;IAED;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAG9C;CACF"}