@shadow-shard-tools/docs-core 1.0.17 → 1.0.19

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 (254) hide show
  1. package/README.md +85 -5
  2. package/dist/cjs/configs/clientConfig.js +78 -0
  3. package/dist/cjs/configs/codeLanguagesConfig.js +36 -0
  4. package/dist/cjs/configs/index.browser.js +16 -0
  5. package/dist/cjs/configs/index.js +20 -0
  6. package/dist/cjs/configs/sstDocsConfig.browser.js +27 -0
  7. package/dist/cjs/configs/sstDocsConfig.js +88 -0
  8. package/dist/cjs/configs/sstDocsConfigShared.js +232 -0
  9. package/dist/cjs/constants/alignmentClasses.js +17 -0
  10. package/dist/cjs/constants/index.js +7 -0
  11. package/dist/cjs/constants/spacingClasses.js +9 -0
  12. package/dist/cjs/data/buildTree.js +131 -0
  13. package/dist/cjs/data/fsDataProvider.browser.js +10 -0
  14. package/dist/cjs/data/fsDataProvider.js +23 -0
  15. package/dist/cjs/data/httpDataProvider.js +25 -0
  16. package/dist/cjs/data/index.browser.js +17 -0
  17. package/dist/cjs/data/index.js +22 -0
  18. package/dist/cjs/data/loadAllCategories.js +30 -0
  19. package/dist/cjs/data/loadAllItems.js +26 -0
  20. package/dist/cjs/data/loadVersionData.fs.js +29 -0
  21. package/dist/cjs/data/loadVersionData.js +78 -0
  22. package/dist/cjs/data/loadVersions.js +6 -0
  23. package/dist/cjs/index.browser.js +22 -0
  24. package/dist/cjs/index.js +22 -0
  25. package/dist/cjs/themes/index.js +15 -0
  26. package/dist/cjs/themes/presets/default.js +121 -0
  27. package/dist/cjs/themes/styleThemeSchema.js +36 -0
  28. package/dist/cjs/themes/themeRegistry.js +22 -0
  29. package/dist/cjs/types/AudioData.js +2 -0
  30. package/dist/cjs/types/BaseImage.js +2 -0
  31. package/dist/cjs/types/Category.js +2 -0
  32. package/dist/cjs/types/CategoryTitleData.js +2 -0
  33. package/dist/cjs/types/ChartData.js +2 -0
  34. package/dist/cjs/types/ClientVisibleSstDocsConfig.js +2 -0
  35. package/dist/cjs/types/CodeData.js +2 -0
  36. package/dist/cjs/types/Content.js +2 -0
  37. package/dist/cjs/types/DataDiagnostic.js +2 -0
  38. package/dist/cjs/types/DataProvider.js +2 -0
  39. package/dist/cjs/types/DividerData.js +2 -0
  40. package/dist/cjs/types/DocItem.js +2 -0
  41. package/dist/cjs/types/HeaderBranding.js +2 -0
  42. package/dist/cjs/types/HtmlGeneratorSettings.js +2 -0
  43. package/dist/cjs/types/ImageCarouselData.js +2 -0
  44. package/dist/cjs/types/ImageCompareData.js +2 -0
  45. package/dist/cjs/types/ImageData.js +2 -0
  46. package/dist/cjs/types/ImageGridData.js +2 -0
  47. package/dist/cjs/types/IndexJson.js +2 -0
  48. package/dist/cjs/types/ListData.js +2 -0
  49. package/dist/cjs/types/Logger.js +2 -0
  50. package/dist/cjs/types/MathData.js +2 -0
  51. package/dist/cjs/types/MessageBoxData.js +2 -0
  52. package/dist/cjs/types/RawCategory.js +2 -0
  53. package/dist/cjs/types/SstDocsConfig.js +2 -0
  54. package/dist/cjs/types/StyleTheme.js +2 -0
  55. package/dist/cjs/types/TableData.js +2 -0
  56. package/dist/cjs/types/TextData.js +2 -0
  57. package/dist/cjs/types/TitleData.js +2 -0
  58. package/dist/cjs/types/Version.js +2 -0
  59. package/dist/cjs/types/YoutubeData.js +2 -0
  60. package/dist/cjs/types/index.js +2 -0
  61. package/dist/cjs/utilities/dom/copyToClipboard.js +40 -0
  62. package/dist/cjs/utilities/dom/downloadTextFile.js +23 -0
  63. package/dist/cjs/utilities/dom/getResponsiveWidth.js +11 -0
  64. package/dist/cjs/utilities/file/getFileExtension.js +9 -0
  65. package/dist/cjs/utilities/index.browser.js +53 -0
  66. package/dist/cjs/utilities/index.js +53 -0
  67. package/dist/cjs/utilities/path/pathExists.browser.js +6 -0
  68. package/dist/cjs/utilities/path/pathExists.js +16 -0
  69. package/dist/cjs/utilities/path/resolveAgainstProjectRoot.browser.js +6 -0
  70. package/dist/cjs/utilities/path/resolveAgainstProjectRoot.js +13 -0
  71. package/dist/cjs/utilities/path/resolveDataPath.browser.js +6 -0
  72. package/dist/cjs/utilities/path/resolveDataPath.js +18 -0
  73. package/dist/cjs/utilities/string/extractYouTubeId.js +18 -0
  74. package/dist/cjs/utilities/string/normalizeBaseUrlPath.js +11 -0
  75. package/dist/cjs/utilities/string/normalizeSystemPath.js +14 -0
  76. package/dist/cjs/utilities/string/processListItems.js +10 -0
  77. package/dist/cjs/utilities/string/sanitizeFilename.js +13 -0
  78. package/dist/cjs/utilities/string/slugify.js +12 -0
  79. package/dist/cjs/utilities/string/withBasePath.js +73 -0
  80. package/dist/cjs/utilities/system/createTimeout.js +11 -0
  81. package/dist/cjs/utilities/system/formatTime.js +12 -0
  82. package/dist/cjs/utilities/system/logger.browser.js +39 -0
  83. package/dist/cjs/utilities/system/logger.js +60 -0
  84. package/dist/cjs/utilities/validation/isMobileDevice.js +8 -0
  85. package/dist/cjs/utilities/validation/isValidColor.js +182 -0
  86. package/dist/cjs/utilities/validation/isValidImageUrl.js +42 -0
  87. package/dist/cjs/utilities/validation/isValidYouTubeId.js +9 -0
  88. package/dist/cjs/utilities/validation/validateScale.js +8 -0
  89. package/dist/configs/clientConfig.d.ts.map +1 -1
  90. package/dist/configs/clientConfig.js +38 -24
  91. package/dist/configs/clientConfig.js.map +1 -1
  92. package/dist/configs/index.browser.d.ts +4 -0
  93. package/dist/configs/index.browser.d.ts.map +1 -0
  94. package/dist/configs/index.browser.js +4 -0
  95. package/dist/configs/index.browser.js.map +1 -0
  96. package/dist/configs/index.d.ts +1 -3
  97. package/dist/configs/index.d.ts.map +1 -1
  98. package/dist/configs/index.js +1 -3
  99. package/dist/configs/index.js.map +1 -1
  100. package/dist/configs/sstDocsConfig.browser.d.ts +8 -0
  101. package/dist/configs/sstDocsConfig.browser.d.ts.map +1 -0
  102. package/dist/configs/sstDocsConfig.browser.js +18 -0
  103. package/dist/configs/sstDocsConfig.browser.js.map +1 -0
  104. package/dist/configs/sstDocsConfig.d.ts +2 -2
  105. package/dist/configs/sstDocsConfig.d.ts.map +1 -1
  106. package/dist/configs/sstDocsConfig.js +18 -183
  107. package/dist/configs/sstDocsConfig.js.map +1 -1
  108. package/dist/configs/sstDocsConfigShared.d.ts +17 -0
  109. package/dist/configs/sstDocsConfigShared.d.ts.map +1 -0
  110. package/dist/configs/sstDocsConfigShared.js +226 -0
  111. package/dist/configs/sstDocsConfigShared.js.map +1 -0
  112. package/dist/data/buildTree.d.ts +6 -10
  113. package/dist/data/buildTree.d.ts.map +1 -1
  114. package/dist/data/buildTree.js +117 -162
  115. package/dist/data/buildTree.js.map +1 -1
  116. package/dist/data/fsDataProvider.browser.d.ts +6 -0
  117. package/dist/data/fsDataProvider.browser.d.ts.map +1 -0
  118. package/dist/data/fsDataProvider.browser.js +7 -0
  119. package/dist/data/fsDataProvider.browser.js.map +1 -0
  120. package/dist/data/fsDataProvider.d.ts +2 -1
  121. package/dist/data/fsDataProvider.d.ts.map +1 -1
  122. package/dist/data/fsDataProvider.js +15 -3
  123. package/dist/data/fsDataProvider.js.map +1 -1
  124. package/dist/data/httpDataProvider.d.ts +2 -1
  125. package/dist/data/httpDataProvider.d.ts.map +1 -1
  126. package/dist/data/httpDataProvider.js +17 -4
  127. package/dist/data/httpDataProvider.js.map +1 -1
  128. package/dist/data/index.browser.d.ts +7 -0
  129. package/dist/data/index.browser.d.ts.map +1 -0
  130. package/dist/data/index.browser.js +7 -0
  131. package/dist/data/index.browser.js.map +1 -0
  132. package/dist/data/index.d.ts +4 -3
  133. package/dist/data/index.d.ts.map +1 -1
  134. package/dist/data/index.js +4 -3
  135. package/dist/data/index.js.map +1 -1
  136. package/dist/data/loadAllCategories.d.ts +10 -1
  137. package/dist/data/loadAllCategories.d.ts.map +1 -1
  138. package/dist/data/loadAllCategories.js +15 -5
  139. package/dist/data/loadAllCategories.js.map +1 -1
  140. package/dist/data/loadAllItems.d.ts +10 -1
  141. package/dist/data/loadAllItems.d.ts.map +1 -1
  142. package/dist/data/loadAllItems.js +19 -7
  143. package/dist/data/loadAllItems.js.map +1 -1
  144. package/dist/data/loadVersionData.d.ts +22 -1
  145. package/dist/data/loadVersionData.d.ts.map +1 -1
  146. package/dist/data/loadVersionData.fs.d.ts +3 -0
  147. package/dist/data/loadVersionData.fs.d.ts.map +1 -0
  148. package/dist/data/loadVersionData.fs.js +24 -0
  149. package/dist/data/loadVersionData.fs.js.map +1 -0
  150. package/dist/data/loadVersionData.js +67 -7
  151. package/dist/data/loadVersionData.js.map +1 -1
  152. package/dist/index.browser.d.ts +7 -0
  153. package/dist/index.browser.d.ts.map +1 -0
  154. package/dist/index.browser.js +7 -0
  155. package/dist/index.browser.js.map +1 -0
  156. package/dist/themes/index.d.ts +2 -2
  157. package/dist/themes/index.d.ts.map +1 -1
  158. package/dist/themes/index.js +2 -2
  159. package/dist/themes/index.js.map +1 -1
  160. package/dist/themes/presets/default.d.ts +3 -0
  161. package/dist/themes/presets/default.d.ts.map +1 -0
  162. package/dist/themes/presets/default.js +119 -0
  163. package/dist/themes/presets/default.js.map +1 -0
  164. package/dist/themes/styleThemeSchema.d.ts +6 -0
  165. package/dist/themes/styleThemeSchema.d.ts.map +1 -0
  166. package/dist/themes/styleThemeSchema.js +32 -0
  167. package/dist/themes/styleThemeSchema.js.map +1 -0
  168. package/dist/themes/themeRegistry.d.ts +3 -4
  169. package/dist/themes/themeRegistry.d.ts.map +1 -1
  170. package/dist/themes/themeRegistry.js +11 -11
  171. package/dist/themes/themeRegistry.js.map +1 -1
  172. package/dist/types/Content.d.ts +35 -18
  173. package/dist/types/Content.d.ts.map +1 -1
  174. package/dist/types/DataDiagnostic.d.ts +8 -0
  175. package/dist/types/DataDiagnostic.d.ts.map +1 -0
  176. package/dist/types/DataDiagnostic.js +2 -0
  177. package/dist/types/DataDiagnostic.js.map +1 -0
  178. package/dist/types/HtmlGeneratorSettings.d.ts +3 -11
  179. package/dist/types/HtmlGeneratorSettings.d.ts.map +1 -1
  180. package/dist/types/StyleTheme.d.ts +115 -131
  181. package/dist/types/StyleTheme.d.ts.map +1 -1
  182. package/dist/types/index.d.ts +2 -2
  183. package/dist/types/index.d.ts.map +1 -1
  184. package/dist/utilities/index.browser.d.ts +23 -0
  185. package/dist/utilities/index.browser.d.ts.map +1 -0
  186. package/dist/utilities/index.browser.js +29 -0
  187. package/dist/utilities/index.browser.js.map +1 -0
  188. package/dist/utilities/path/pathExists.browser.d.ts +2 -0
  189. package/dist/utilities/path/pathExists.browser.d.ts.map +1 -0
  190. package/dist/utilities/path/pathExists.browser.js +4 -0
  191. package/dist/utilities/path/pathExists.browser.js.map +1 -0
  192. package/dist/utilities/path/pathExists.js +1 -1
  193. package/dist/utilities/path/pathExists.js.map +1 -1
  194. package/dist/utilities/path/resolveAgainstProjectRoot.browser.d.ts +2 -0
  195. package/dist/utilities/path/resolveAgainstProjectRoot.browser.d.ts.map +1 -0
  196. package/dist/utilities/path/resolveAgainstProjectRoot.browser.js +4 -0
  197. package/dist/utilities/path/resolveAgainstProjectRoot.browser.js.map +1 -0
  198. package/dist/utilities/path/resolveAgainstProjectRoot.d.ts.map +1 -1
  199. package/dist/utilities/path/resolveAgainstProjectRoot.js.map +1 -1
  200. package/dist/utilities/path/resolveDataPath.browser.d.ts +2 -0
  201. package/dist/utilities/path/resolveDataPath.browser.d.ts.map +1 -0
  202. package/dist/utilities/path/resolveDataPath.browser.js +4 -0
  203. package/dist/utilities/path/resolveDataPath.browser.js.map +1 -0
  204. package/dist/utilities/path/resolveDataPath.d.ts.map +1 -1
  205. package/dist/utilities/path/resolveDataPath.js +1 -1
  206. package/dist/utilities/path/resolveDataPath.js.map +1 -1
  207. package/dist/utilities/string/normalizeSystemPath.d.ts.map +1 -1
  208. package/dist/utilities/string/normalizeSystemPath.js +9 -1
  209. package/dist/utilities/string/normalizeSystemPath.js.map +1 -1
  210. package/dist/utilities/string/withBasePath.d.ts.map +1 -1
  211. package/dist/utilities/string/withBasePath.js +66 -6
  212. package/dist/utilities/string/withBasePath.js.map +1 -1
  213. package/dist/utilities/system/logger.browser.d.ts +3 -0
  214. package/dist/utilities/system/logger.browser.d.ts.map +1 -0
  215. package/dist/utilities/system/logger.browser.js +36 -0
  216. package/dist/utilities/system/logger.browser.js.map +1 -0
  217. package/dist/utilities/system/logger.d.ts.map +1 -1
  218. package/dist/utilities/system/logger.js +26 -6
  219. package/dist/utilities/system/logger.js.map +1 -1
  220. package/package.json +313 -160
  221. package/dist/browser/serverOnly.d.ts +0 -15
  222. package/dist/browser/serverOnly.d.ts.map +0 -1
  223. package/dist/browser/serverOnly.js +0 -33
  224. package/dist/browser/serverOnly.js.map +0 -1
  225. package/dist/browser.d.ts +0 -38
  226. package/dist/browser.d.ts.map +0 -1
  227. package/dist/browser.js +0 -45
  228. package/dist/browser.js.map +0 -1
  229. package/dist/configs/sstDocsConfig.shared.d.ts +0 -8
  230. package/dist/configs/sstDocsConfig.shared.d.ts.map +0 -1
  231. package/dist/configs/sstDocsConfig.shared.js +0 -86
  232. package/dist/configs/sstDocsConfig.shared.js.map +0 -1
  233. package/dist/configs/stylesConfig.d.ts +0 -3
  234. package/dist/configs/stylesConfig.d.ts.map +0 -1
  235. package/dist/configs/stylesConfig.js +0 -8
  236. package/dist/configs/stylesConfig.js.map +0 -1
  237. package/dist/styles/themes.css +0 -1
  238. package/dist/styles/themes.css.map +0 -1
  239. package/dist/themes/baseThemeClasses.d.ts +0 -106
  240. package/dist/themes/baseThemeClasses.d.ts.map +0 -1
  241. package/dist/themes/baseThemeClasses.js +0 -106
  242. package/dist/themes/baseThemeClasses.js.map +0 -1
  243. package/dist/themes/darkTheme.d.ts +0 -3
  244. package/dist/themes/darkTheme.d.ts.map +0 -1
  245. package/dist/themes/darkTheme.js +0 -42
  246. package/dist/themes/darkTheme.js.map +0 -1
  247. package/dist/themes/lightTheme.d.ts +0 -3
  248. package/dist/themes/lightTheme.d.ts.map +0 -1
  249. package/dist/themes/lightTheme.js +0 -42
  250. package/dist/themes/lightTheme.js.map +0 -1
  251. package/dist/types/StylesConfig.d.ts +0 -8
  252. package/dist/types/StylesConfig.d.ts.map +0 -1
  253. package/dist/types/StylesConfig.js +0 -2
  254. package/dist/types/StylesConfig.js.map +0 -1
@@ -1,174 +1,129 @@
1
- export function buildTree(rawMap, allDocs) {
2
- const errors = [];
3
- const docLookup = new Map(allDocs.map((d) => [d.id, d]));
4
- const usedDocIds = new Set();
5
- // First pass: collect valid category ids.
6
- const categoryIds = new Set();
7
- for (const raw of Object.values(rawMap)) {
8
- const id = typeof raw?.id === "string" ? raw.id.trim() : "";
9
- if (id.length === 0) {
10
- errors.push({
11
- type: "invalidCategoryId",
12
- message: "Encountered category with missing or invalid id.",
13
- });
14
- continue;
15
- }
16
- if (categoryIds.has(id)) {
17
- errors.push({
18
- type: "invalidCategoryId",
19
- categoryId: id,
20
- message: `Duplicate category id "${id}" encountered.`,
21
- });
22
- continue;
23
- }
24
- categoryIds.add(id);
1
+ import { createLogger } from "../utilities/system/logger.js";
2
+ function convertCategory(raw, rawMap, docLookup, usedDocIds, included, visiting, diagnostics, logger) {
3
+ if (visiting.has(raw.id)) {
4
+ const message = `Detected circular category reference at ${raw.id}.`;
5
+ diagnostics.push({
6
+ code: "circular-category",
7
+ level: "warn",
8
+ message,
9
+ context: { categoryId: raw.id },
10
+ });
11
+ logger.warn(message);
12
+ return null;
25
13
  }
26
- // Second pass: prepare categories, docs, and adjacency once.
27
- const prepared = new Map();
28
- const referencedAsChild = new Map();
29
- for (const raw of Object.values(rawMap)) {
30
- const id = typeof raw?.id === "string" ? raw.id.trim() : "";
31
- if (!categoryIds.has(id)) {
32
- continue;
33
- }
34
- let docs;
35
- if (raw.docs !== undefined && !Array.isArray(raw.docs)) {
36
- errors.push({
37
- type: "invalidDocsField",
38
- categoryId: id,
39
- message: `Category "${id}" has an invalid docs field (expected array).`,
40
- });
41
- }
42
- else if (Array.isArray(raw.docs)) {
43
- const collected = [];
44
- for (const rawDocId of raw.docs) {
45
- if (typeof rawDocId !== "string" || rawDocId.trim().length === 0) {
46
- errors.push({
47
- type: "invalidDocId",
48
- categoryId: id,
49
- docId: rawDocId,
50
- message: `Category "${id}" references an invalid doc id.`,
51
- });
52
- continue;
53
- }
54
- const docId = rawDocId.trim();
55
- const doc = docLookup.get(docId);
56
- if (!doc) {
57
- errors.push({
58
- type: "missingDoc",
59
- categoryId: id,
60
- docId,
61
- message: `Doc id "${docId}" referenced in category "${id}" was not found.`,
62
- });
63
- continue;
64
- }
65
- collected.push(doc);
66
- usedDocIds.add(docId);
14
+ visiting.add(raw.id);
15
+ let docs;
16
+ const docIds = Array.isArray(raw.docs) ? raw.docs : [];
17
+ if (docIds.length > 0) {
18
+ const validDocs = docIds
19
+ .map((rawId) => {
20
+ if (typeof rawId !== "string" || rawId.length === 0) {
21
+ const message = `Invalid doc id in category ${raw.id}.`;
22
+ diagnostics.push({
23
+ code: "invalid-doc-ref",
24
+ level: "warn",
25
+ message,
26
+ context: { categoryId: raw.id, docId: rawId },
27
+ });
28
+ logger.warn(message);
29
+ return null;
67
30
  }
68
- if (collected.length > 0) {
69
- docs = collected;
31
+ const doc = docLookup.get(rawId);
32
+ if (!doc) {
33
+ const message = `Doc id ${rawId} referenced in category ${raw.id} not found.`;
34
+ diagnostics.push({
35
+ code: "missing-doc-ref",
36
+ level: "warn",
37
+ message,
38
+ context: { categoryId: raw.id, docId: rawId },
39
+ });
40
+ logger.warn(message);
41
+ return null;
70
42
  }
43
+ usedDocIds.add(rawId);
44
+ return doc;
45
+ })
46
+ .filter((doc) => doc !== null);
47
+ if (validDocs.length > 0) {
48
+ docs = validDocs;
71
49
  }
72
- const childIds = [];
73
- if (raw.children !== undefined && !Array.isArray(raw.children)) {
74
- errors.push({
75
- type: "invalidChildrenField",
76
- categoryId: id,
77
- message: `Category "${id}" has an invalid children field (expected array).`,
78
- });
79
- }
80
- else if (Array.isArray(raw.children)) {
81
- for (const rawChildId of raw.children) {
82
- if (typeof rawChildId !== "string" ||
83
- rawChildId.trim().length === 0) {
84
- errors.push({
85
- type: "invalidChildId",
86
- categoryId: id,
87
- childId: rawChildId,
88
- message: `Category "${id}" references an invalid child category id.`,
89
- });
90
- continue;
91
- }
92
- const childId = rawChildId.trim();
93
- if (!categoryIds.has(childId)) {
94
- errors.push({
95
- type: "missingCategory",
96
- categoryId: id,
97
- childId,
98
- message: `Child category "${childId}" referenced in "${id}" was not found.`,
99
- });
100
- continue;
101
- }
102
- childIds.push(childId);
103
- referencedAsChild.set(childId, (referencedAsChild.get(childId) ?? 0) + 1);
104
- }
105
- }
106
- prepared.set(id, { raw, docs, childIds });
107
50
  }
108
- const allValidIds = Array.from(prepared.keys());
109
- const rootIds = allValidIds.filter((id) => !referencedAsChild.has(id));
110
- const rootsToUse = rootIds.length > 0 ? rootIds : allValidIds;
111
- const state = new Map();
112
- const built = new Map();
113
- const buildNode = (id, stack) => {
114
- const current = state.get(id) ?? "unvisited";
115
- if (current === "visiting") {
116
- const cyclePath = [...stack, id];
117
- errors.push({
118
- type: "cycle",
119
- path: cyclePath,
120
- message: `Detected circular category reference: ${cyclePath.join(" -> ")}`,
121
- });
122
- return null;
123
- }
124
- if (current === "visited") {
125
- return built.get(id) ?? null;
126
- }
127
- const preparedCategory = prepared.get(id);
128
- if (!preparedCategory) {
129
- errors.push({
130
- type: "missingCategory",
131
- categoryId: id,
132
- message: `Category "${id}" was referenced but not defined.`,
133
- });
134
- return null;
135
- }
136
- state.set(id, "visiting");
137
- stack.push(id);
138
- const children = [];
139
- for (const childId of preparedCategory.childIds) {
140
- const childNode = buildNode(childId, stack);
141
- if (childNode) {
142
- children.push(childNode);
51
+ let children;
52
+ const childIds = Array.isArray(raw.children) ? raw.children : [];
53
+ if (childIds.length > 0) {
54
+ const validChildren = childIds
55
+ .map((rawChildId) => {
56
+ if (typeof rawChildId !== "string" || rawChildId.length === 0) {
57
+ const message = `Invalid child category id in ${raw.id}.`;
58
+ diagnostics.push({
59
+ code: "invalid-child-ref",
60
+ level: "warn",
61
+ message,
62
+ context: { categoryId: raw.id, childId: rawChildId },
63
+ });
64
+ logger.warn(message);
65
+ return null;
143
66
  }
67
+ const childRaw = rawMap[rawChildId];
68
+ if (!childRaw) {
69
+ const message = `Child category ${rawChildId} referenced in ${raw.id} not found.`;
70
+ diagnostics.push({
71
+ code: "missing-child-ref",
72
+ level: "warn",
73
+ message,
74
+ context: { categoryId: raw.id, childId: rawChildId },
75
+ });
76
+ logger.warn(message);
77
+ return null;
78
+ }
79
+ return convertCategory(childRaw, rawMap, docLookup, usedDocIds, included, visiting, diagnostics, logger);
80
+ })
81
+ .filter((child) => child !== null);
82
+ if (validChildren.length > 0) {
83
+ children = validChildren;
144
84
  }
145
- const node = {
146
- id: preparedCategory.raw.id,
147
- title: preparedCategory.raw.title,
148
- description: preparedCategory.raw.description,
149
- content: preparedCategory.raw.content ?? [],
150
- };
151
- if (preparedCategory.docs && preparedCategory.docs.length > 0) {
152
- node.docs = preparedCategory.docs;
153
- }
154
- if (children.length > 0) {
155
- node.children = children;
156
- }
157
- built.set(id, node);
158
- state.set(id, "visited");
159
- stack.pop();
160
- return node;
85
+ }
86
+ visiting.delete(raw.id);
87
+ included.add(raw.id);
88
+ return {
89
+ id: raw.id,
90
+ title: raw.title,
91
+ description: raw.description,
92
+ content: raw.content ?? [],
93
+ docs,
94
+ children,
161
95
  };
162
- const tree = [];
163
- for (const id of rootsToUse) {
164
- if ((state.get(id) ?? "unvisited") === "visited") {
165
- continue;
166
- }
167
- const node = buildNode(id, []);
168
- if (node) {
169
- tree.push(node);
96
+ }
97
+ export function buildTree(rawMap, allDocs, options) {
98
+ const docLookup = new Map(allDocs.map((d) => [d.id, d]));
99
+ const usedDocIds = new Set();
100
+ const includedIds = new Set();
101
+ const diagnostics = [];
102
+ const logger = options?.logger ?? createLogger("data:buildTree");
103
+ const childCategoryIds = new Set();
104
+ Object.values(rawMap).forEach((category) => {
105
+ if (Array.isArray(category?.children)) {
106
+ category.children.forEach((childId) => {
107
+ if (typeof childId === "string" && childId.length > 0) {
108
+ childCategoryIds.add(childId);
109
+ }
110
+ });
170
111
  }
112
+ });
113
+ let rootCandidates = Object.values(rawMap).filter((category) => category &&
114
+ typeof category.id === "string" &&
115
+ category.id.length > 0 &&
116
+ !childCategoryIds.has(category.id));
117
+ if (rootCandidates.length === 0) {
118
+ rootCandidates = Object.values(rawMap).filter((category) => category && typeof category.id === "string" && category.id.length > 0);
171
119
  }
172
- return { tree, usedDocIds, errors };
120
+ const tree = rootCandidates
121
+ .map((rootCategory) => {
122
+ if (includedIds.has(rootCategory.id))
123
+ return null;
124
+ return convertCategory(rootCategory, rawMap, docLookup, usedDocIds, includedIds, new Set(), diagnostics, logger);
125
+ })
126
+ .filter((category) => category !== null);
127
+ return { tree, usedDocIds, diagnostics };
173
128
  }
174
129
  //# sourceMappingURL=buildTree.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"buildTree.js","sourceRoot":"","sources":["../../src/data/buildTree.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"buildTree.js","sourceRoot":"","sources":["../../src/data/buildTree.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { DataProvider } from "../types/DataProvider.js";
2
+ export declare class FsDataProvider implements DataProvider {
3
+ readJson<T>(_absPath: string): Promise<T>;
4
+ }
5
+ export declare const fsDataProvider: typeof FsDataProvider;
6
+ //# sourceMappingURL=fsDataProvider.browser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fsDataProvider.browser.d.ts","sourceRoot":"","sources":["../../src/data/fsDataProvider.browser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAE7D,qBAAa,cAAe,YAAW,YAAY;IAC3C,QAAQ,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;CAKhD;AAED,eAAO,MAAM,cAAc,uBAAiB,CAAC"}
@@ -0,0 +1,7 @@
1
+ export class FsDataProvider {
2
+ async readJson(_absPath) {
3
+ throw new Error("FsDataProvider is only available in Node.js environments where the file system can be read.");
4
+ }
5
+ }
6
+ export const fsDataProvider = FsDataProvider;
7
+ //# sourceMappingURL=fsDataProvider.browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fsDataProvider.browser.js","sourceRoot":"","sources":["../../src/data/fsDataProvider.browser.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,cAAc;IACzB,KAAK,CAAC,QAAQ,CAAI,QAAgB;QAChC,MAAM,IAAI,KAAK,CACb,6FAA6F,CAC9F,CAAC;IACJ,CAAC;CACF;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,cAAc,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import type { DataProvider } from "../index.js";
2
- export declare class fsDataProvider implements DataProvider {
2
+ export declare class FsDataProvider implements DataProvider {
3
3
  readJson<T>(absPath: string): Promise<T>;
4
4
  }
5
+ export declare const fsDataProvider: typeof FsDataProvider;
5
6
  //# sourceMappingURL=fsDataProvider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fsDataProvider.d.ts","sourceRoot":"","sources":["../../src/data/fsDataProvider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,qBAAa,cAAe,YAAW,YAAY;IAC3C,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;CAI/C"}
1
+ {"version":3,"file":"fsDataProvider.d.ts","sourceRoot":"","sources":["../../src/data/fsDataProvider.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,qBAAa,cAAe,YAAW,YAAY;IAC3C,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;CAkB/C;AAED,eAAO,MAAM,cAAc,uBAAiB,CAAC"}
@@ -1,8 +1,20 @@
1
1
  import { readFile } from "node:fs/promises";
2
- export class fsDataProvider {
2
+ export class FsDataProvider {
3
3
  async readJson(absPath) {
4
- const contents = await readFile(absPath, "utf8");
5
- return JSON.parse(contents);
4
+ let contents;
5
+ try {
6
+ contents = await readFile(absPath, "utf8");
7
+ }
8
+ catch (error) {
9
+ throw new Error(`Failed to read JSON from ${absPath}: ${error.message}`);
10
+ }
11
+ try {
12
+ return JSON.parse(contents);
13
+ }
14
+ catch (error) {
15
+ throw new Error(`Failed to parse JSON from ${absPath}: ${error.message}`);
16
+ }
6
17
  }
7
18
  }
19
+ export const fsDataProvider = FsDataProvider;
8
20
  //# sourceMappingURL=fsDataProvider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fsDataProvider.js","sourceRoot":"","sources":["../../src/data/fsDataProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAG5C,MAAM,OAAO,cAAc;IACzB,KAAK,CAAC,QAAQ,CAAI,OAAe;QAC/B,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACjD,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAM,CAAC;IACnC,CAAC;CACF"}
1
+ {"version":3,"file":"fsDataProvider.js","sourceRoot":"","sources":["../../src/data/fsDataProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAI5C,MAAM,OAAO,cAAc;IACzB,KAAK,CAAC,QAAQ,CAAI,OAAe;QAC/B,IAAI,QAAgB,CAAC;QACrB,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC7C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,4BAA4B,OAAO,KAAM,KAAe,CAAC,OAAO,EAAE,CACnE,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAM,CAAC;QACnC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,6BAA6B,OAAO,KAAM,KAAe,CAAC,OAAO,EAAE,CACpE,CAAC;QACJ,CAAC;IACH,CAAC;CACF;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,cAAc,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import type { DataProvider } from "../index.js";
2
- export declare class httpDataProvider implements DataProvider {
2
+ export declare class HttpDataProvider implements DataProvider {
3
3
  readJson<T>(absUrl: string): Promise<T>;
4
4
  }
5
+ export declare const httpDataProvider: typeof HttpDataProvider;
5
6
  //# sourceMappingURL=httpDataProvider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"httpDataProvider.d.ts","sourceRoot":"","sources":["../../src/data/httpDataProvider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,qBAAa,gBAAiB,YAAW,YAAY;IAC7C,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;CAQ9C"}
1
+ {"version":3,"file":"httpDataProvider.d.ts","sourceRoot":"","sources":["../../src/data/httpDataProvider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,qBAAa,gBAAiB,YAAW,YAAY;IAC7C,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;CAwB9C;AAED,eAAO,MAAM,gBAAgB,yBAAmB,CAAC"}
@@ -1,9 +1,22 @@
1
- export class httpDataProvider {
1
+ export class HttpDataProvider {
2
2
  async readJson(absUrl) {
3
- const res = await fetch(absUrl);
4
- if (!res.ok)
3
+ let res;
4
+ try {
5
+ res = await fetch(absUrl);
6
+ }
7
+ catch (error) {
8
+ throw new Error(`Failed to fetch ${absUrl}: ${error.message}`);
9
+ }
10
+ if (!res.ok) {
5
11
  throw new Error(`Failed to fetch ${absUrl}: ${res.status} ${res.statusText}`);
6
- return res.json();
12
+ }
13
+ try {
14
+ return (await res.json());
15
+ }
16
+ catch (error) {
17
+ throw new Error(`Failed to parse JSON from ${absUrl}: ${error.message}`);
18
+ }
7
19
  }
8
20
  }
21
+ export const httpDataProvider = HttpDataProvider;
9
22
  //# sourceMappingURL=httpDataProvider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"httpDataProvider.js","sourceRoot":"","sources":["../../src/data/httpDataProvider.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,gBAAgB;IAC3B,KAAK,CAAC,QAAQ,CAAI,MAAc;QAC9B,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC;QAChC,IAAI,CAAC,GAAG,CAAC,EAAE;YACT,MAAM,IAAI,KAAK,CACb,mBAAmB,MAAM,KAAK,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,CAC7D,CAAC;QACJ,OAAO,GAAG,CAAC,IAAI,EAAgB,CAAC;IAClC,CAAC;CACF"}
1
+ {"version":3,"file":"httpDataProvider.js","sourceRoot":"","sources":["../../src/data/httpDataProvider.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,gBAAgB;IAC3B,KAAK,CAAC,QAAQ,CAAI,MAAc;QAC9B,IAAI,GAAa,CAAC;QAClB,IAAI,CAAC;YACH,GAAG,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,mBAAmB,MAAM,KAAM,KAAe,CAAC,OAAO,EAAE,CACzD,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CACb,mBAAmB,MAAM,KAAK,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,CAC7D,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAM,CAAC;QACjC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,6BAA6B,MAAM,KAAM,KAAe,CAAC,OAAO,EAAE,CACnE,CAAC;QACJ,CAAC;IACH,CAAC;CACF;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,gBAAgB,CAAC"}
@@ -0,0 +1,7 @@
1
+ export { buildTree } from "./buildTree.js";
2
+ export { loadAllCategories } from "./loadAllCategories.js";
3
+ export { loadAllItems } from "./loadAllItems.js";
4
+ export { loadVersionData, loadVersionDataFromHttp, } from "./loadVersionData.js";
5
+ export { loadVersions } from "./loadVersions.js";
6
+ export { HttpDataProvider, httpDataProvider } from "./httpDataProvider.js";
7
+ //# sourceMappingURL=index.browser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.browser.d.ts","sourceRoot":"","sources":["../../src/data/index.browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EACL,eAAe,EACf,uBAAuB,GACxB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,7 @@
1
+ export { buildTree } from "./buildTree.js";
2
+ export { loadAllCategories } from "./loadAllCategories.js";
3
+ export { loadAllItems } from "./loadAllItems.js";
4
+ export { loadVersionData, loadVersionDataFromHttp, } from "./loadVersionData.js";
5
+ export { loadVersions } from "./loadVersions.js";
6
+ export { HttpDataProvider, httpDataProvider } from "./httpDataProvider.js";
7
+ //# sourceMappingURL=index.browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.browser.js","sourceRoot":"","sources":["../../src/data/index.browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EACL,eAAe,EACf,uBAAuB,GACxB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC"}
@@ -1,8 +1,9 @@
1
1
  export { buildTree } from "./buildTree.js";
2
2
  export { loadAllCategories } from "./loadAllCategories.js";
3
3
  export { loadAllItems } from "./loadAllItems.js";
4
- export { loadVersionData } from "./loadVersionData.js";
4
+ export { loadVersionData, loadVersionDataFromHttp, } from "./loadVersionData.js";
5
+ export { loadVersionDataFromFs } from "./loadVersionData.fs.js";
5
6
  export { loadVersions } from "./loadVersions.js";
6
- export { fsDataProvider } from "./fsDataProvider.js";
7
- export { httpDataProvider } from "./httpDataProvider.js";
7
+ export { FsDataProvider, fsDataProvider } from "./fsDataProvider.js";
8
+ export { HttpDataProvider, httpDataProvider } from "./httpDataProvider.js";
8
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/data/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/data/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EACL,eAAe,EACf,uBAAuB,GACxB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC"}
@@ -1,8 +1,9 @@
1
1
  export { buildTree } from "./buildTree.js";
2
2
  export { loadAllCategories } from "./loadAllCategories.js";
3
3
  export { loadAllItems } from "./loadAllItems.js";
4
- export { loadVersionData } from "./loadVersionData.js";
4
+ export { loadVersionData, loadVersionDataFromHttp, } from "./loadVersionData.js";
5
+ export { loadVersionDataFromFs } from "./loadVersionData.fs.js";
5
6
  export { loadVersions } from "./loadVersions.js";
6
- export { fsDataProvider } from "./fsDataProvider.js";
7
- export { httpDataProvider } from "./httpDataProvider.js";
7
+ export { FsDataProvider, fsDataProvider } from "./fsDataProvider.js";
8
+ export { HttpDataProvider, httpDataProvider } from "./httpDataProvider.js";
8
9
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/data/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/data/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EACL,eAAe,EACf,uBAAuB,GACxB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC"}
@@ -1,4 +1,13 @@
1
+ import type { DataDiagnostic } from "../types/DataDiagnostic.js";
1
2
  import type { DataProvider } from "../types/DataProvider.js";
3
+ import type { Logger } from "../types/Logger.js";
2
4
  import type { RawCategory } from "../types/RawCategory.js";
3
- export declare function loadAllCategories(provider: DataProvider, versionRootAbs: string, ids: string[]): Promise<Record<string, RawCategory>>;
5
+ export interface LoadAllCategoriesResult {
6
+ categories: Record<string, RawCategory>;
7
+ diagnostics: DataDiagnostic[];
8
+ }
9
+ export interface LoadAllCategoriesOptions {
10
+ logger?: Logger;
11
+ }
12
+ export declare function loadAllCategories(provider: DataProvider, versionRootAbs: string, ids: string[], options?: LoadAllCategoriesOptions): Promise<LoadAllCategoriesResult>;
4
13
  //# sourceMappingURL=loadAllCategories.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"loadAllCategories.d.ts","sourceRoot":"","sources":["../../src/data/loadAllCategories.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3D,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,YAAY,EACtB,cAAc,EAAE,MAAM,EACtB,GAAG,EAAE,MAAM,EAAE,GACZ,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAkBtC"}
1
+ {"version":3,"file":"loadAllCategories.d.ts","sourceRoot":"","sources":["../../src/data/loadAllCategories.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAG3D,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACxC,WAAW,EAAE,cAAc,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,YAAY,EACtB,cAAc,EAAE,MAAM,EACtB,GAAG,EAAE,MAAM,EAAE,EACb,OAAO,CAAC,EAAE,wBAAwB,GACjC,OAAO,CAAC,uBAAuB,CAAC,CA6BlC"}
@@ -1,18 +1,28 @@
1
- export async function loadAllCategories(provider, versionRootAbs, ids) {
1
+ import { createLogger } from "../utilities/system/logger.js";
2
+ export async function loadAllCategories(provider, versionRootAbs, ids, options) {
3
+ const diagnostics = [];
4
+ const logger = options?.logger ?? createLogger("data:loadAllCategories");
2
5
  const results = await Promise.allSettled(ids.map(async (id) => {
3
6
  const p = `${versionRootAbs}/categories/${id}.json`;
4
7
  const data = await provider.readJson(p);
5
8
  return { id, data };
6
9
  }));
7
- const map = {};
10
+ const categories = {};
8
11
  results.forEach((res, i) => {
9
12
  if (res.status === "fulfilled") {
10
- map[res.value.id] = res.value.data;
13
+ categories[res.value.id] = res.value.data;
11
14
  }
12
15
  else {
13
- console.warn(`Failed to load category ${ids[i]}:`, res.reason);
16
+ const message = `Failed to load category ${ids[i]}: ${res.reason.message ?? res.reason}`;
17
+ diagnostics.push({
18
+ code: "category-read-failed",
19
+ level: "warn",
20
+ message,
21
+ context: { id: ids[i] },
22
+ });
23
+ logger.warn(message);
14
24
  }
15
25
  });
16
- return map;
26
+ return { categories, diagnostics };
17
27
  }
18
28
  //# sourceMappingURL=loadAllCategories.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"loadAllCategories.js","sourceRoot":"","sources":["../../src/data/loadAllCategories.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,QAAsB,EACtB,cAAsB,EACtB,GAAa;IAEb,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CACtC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;QACnB,MAAM,CAAC,GAAG,GAAG,cAAc,eAAe,EAAE,OAAO,CAAC;QACpD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAc,CAAC,CAAC,CAAC;QACrD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IACtB,CAAC,CAAC,CACH,CAAC;IAEF,MAAM,GAAG,GAAgC,EAAE,CAAC;IAC5C,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;QACzB,IAAI,GAAG,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YAC/B,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;QACrC,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,2BAA2B,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QACjE,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,GAAG,CAAC;AACb,CAAC"}
1
+ {"version":3,"file":"loadAllCategories.js","sourceRoot":"","sources":["../../src/data/loadAllCategories.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAW7D,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,QAAsB,EACtB,cAAsB,EACtB,GAAa,EACb,OAAkC;IAElC,MAAM,WAAW,GAAqB,EAAE,CAAC;IACzC,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,YAAY,CAAC,wBAAwB,CAAC,CAAC;IAEzE,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CACtC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;QACnB,MAAM,CAAC,GAAG,GAAG,cAAc,eAAe,EAAE,OAAO,CAAC;QACpD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAc,CAAC,CAAC,CAAC;QACrD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IACtB,CAAC,CAAC,CACH,CAAC;IAEF,MAAM,UAAU,GAAgC,EAAE,CAAC;IACnD,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;QACzB,IAAI,GAAG,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YAC/B,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;QAC5C,CAAC;aAAM,CAAC;YACN,MAAM,OAAO,GAAG,2BAA2B,GAAG,CAAC,CAAC,CAAC,KAAM,GAAG,CAAC,MAAgB,CAAC,OAAO,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACpG,WAAW,CAAC,IAAI,CAAC;gBACf,IAAI,EAAE,sBAAsB;gBAC5B,KAAK,EAAE,MAAM;gBACb,OAAO;gBACP,OAAO,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE;aACxB,CAAC,CAAC;YACH,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC;AACrC,CAAC"}
@@ -1,4 +1,13 @@
1
+ import type { DataDiagnostic } from "../types/DataDiagnostic.js";
1
2
  import type { DataProvider } from "../types/DataProvider.js";
3
+ import type { Logger } from "../types/Logger.js";
2
4
  import type { DocItem } from "../types/DocItem.js";
3
- export declare function loadAllItems(provider: DataProvider, versionRootAbs: string, ids: string[]): Promise<DocItem[]>;
5
+ export interface LoadAllItemsResult {
6
+ items: DocItem[];
7
+ diagnostics: DataDiagnostic[];
8
+ }
9
+ export interface LoadAllItemsOptions {
10
+ logger?: Logger;
11
+ }
12
+ export declare function loadAllItems(provider: DataProvider, versionRootAbs: string, ids: string[], options?: LoadAllItemsOptions): Promise<LoadAllItemsResult>;
4
13
  //# sourceMappingURL=loadAllItems.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"loadAllItems.d.ts","sourceRoot":"","sources":["../../src/data/loadAllItems.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAEnD,wBAAsB,YAAY,CAChC,QAAQ,EAAE,YAAY,EACtB,cAAc,EAAE,MAAM,EACtB,GAAG,EAAE,MAAM,EAAE,GACZ,OAAO,CAAC,OAAO,EAAE,CAAC,CAapB"}
1
+ {"version":3,"file":"loadAllItems.d.ts","sourceRoot":"","sources":["../../src/data/loadAllItems.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAGnD,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,WAAW,EAAE,cAAc,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,YAAY,CAChC,QAAQ,EAAE,YAAY,EACtB,cAAc,EAAE,MAAM,EACtB,GAAG,EAAE,MAAM,EAAE,EACb,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,kBAAkB,CAAC,CA0B7B"}