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

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 (171) hide show
  1. package/README.md +28 -5
  2. package/dist/cjs/configs/clientConfig.js +162 -0
  3. package/dist/cjs/configs/codeLanguagesConfig.js +36 -0
  4. package/dist/cjs/configs/index.js +20 -0
  5. package/dist/cjs/configs/sstDocsConfig.browser.js +27 -0
  6. package/dist/cjs/configs/sstDocsConfig.js +88 -0
  7. package/dist/cjs/configs/sstDocsConfigShared.js +174 -0
  8. package/dist/cjs/constants/alignmentClasses.js +17 -0
  9. package/dist/cjs/constants/index.js +7 -0
  10. package/dist/cjs/constants/spacingClasses.js +9 -0
  11. package/dist/cjs/data/buildTree.js +93 -0
  12. package/dist/cjs/data/fsDataProvider.js +23 -0
  13. package/dist/cjs/data/httpDataProvider.js +25 -0
  14. package/dist/cjs/data/index.js +19 -0
  15. package/dist/cjs/data/loadAllCategories.js +20 -0
  16. package/dist/cjs/data/loadAllItems.js +14 -0
  17. package/dist/cjs/data/loadVersionData.js +16 -0
  18. package/dist/cjs/data/loadVersions.js +6 -0
  19. package/dist/cjs/index.js +22 -0
  20. package/dist/cjs/themes/index.js +11 -0
  21. package/dist/cjs/themes/presets/default.js +121 -0
  22. package/dist/cjs/themes/themeRegistry.js +22 -0
  23. package/dist/cjs/types/AudioData.js +2 -0
  24. package/dist/cjs/types/BaseImage.js +2 -0
  25. package/dist/cjs/types/Category.js +2 -0
  26. package/dist/cjs/types/CategoryTitleData.js +2 -0
  27. package/dist/cjs/types/ChartData.js +2 -0
  28. package/dist/cjs/types/ClientVisibleSstDocsConfig.js +2 -0
  29. package/dist/cjs/types/CodeData.js +2 -0
  30. package/dist/cjs/types/Content.js +2 -0
  31. package/dist/cjs/types/DataProvider.js +2 -0
  32. package/dist/cjs/types/DividerData.js +2 -0
  33. package/dist/cjs/types/DocItem.js +2 -0
  34. package/dist/cjs/types/HeaderBranding.js +2 -0
  35. package/dist/cjs/types/HtmlGeneratorSettings.js +2 -0
  36. package/dist/cjs/types/ImageCarouselData.js +2 -0
  37. package/dist/cjs/types/ImageCompareData.js +2 -0
  38. package/dist/cjs/types/ImageData.js +2 -0
  39. package/dist/cjs/types/ImageGridData.js +2 -0
  40. package/dist/cjs/types/IndexJson.js +2 -0
  41. package/dist/cjs/types/ListData.js +2 -0
  42. package/dist/cjs/types/Logger.js +2 -0
  43. package/dist/cjs/types/MathData.js +2 -0
  44. package/dist/cjs/types/MessageBoxData.js +2 -0
  45. package/dist/cjs/types/RawCategory.js +2 -0
  46. package/dist/cjs/types/SstDocsConfig.js +2 -0
  47. package/dist/cjs/types/StyleTheme.js +2 -0
  48. package/dist/cjs/types/TableData.js +2 -0
  49. package/dist/cjs/types/TextData.js +2 -0
  50. package/dist/cjs/types/TitleData.js +2 -0
  51. package/dist/cjs/types/Version.js +2 -0
  52. package/dist/cjs/types/YoutubeData.js +2 -0
  53. package/dist/cjs/types/index.js +2 -0
  54. package/dist/cjs/utilities/dom/copyToClipboard.js +40 -0
  55. package/dist/cjs/utilities/dom/downloadTextFile.js +23 -0
  56. package/dist/cjs/utilities/dom/getResponsiveWidth.js +11 -0
  57. package/dist/cjs/utilities/file/getFileExtension.js +9 -0
  58. package/dist/cjs/utilities/index.js +53 -0
  59. package/dist/cjs/utilities/path/pathExists.js +16 -0
  60. package/dist/cjs/utilities/path/resolveAgainstProjectRoot.js +13 -0
  61. package/dist/cjs/utilities/path/resolveDataPath.js +18 -0
  62. package/dist/cjs/utilities/string/extractYouTubeId.js +18 -0
  63. package/dist/cjs/utilities/string/normalizeBaseUrlPath.js +11 -0
  64. package/dist/cjs/utilities/string/normalizeSystemPath.js +14 -0
  65. package/dist/cjs/utilities/string/processListItems.js +10 -0
  66. package/dist/cjs/utilities/string/sanitizeFilename.js +13 -0
  67. package/dist/cjs/utilities/string/slugify.js +12 -0
  68. package/dist/cjs/utilities/string/withBasePath.js +45 -0
  69. package/dist/cjs/utilities/system/createTimeout.js +11 -0
  70. package/dist/cjs/utilities/system/formatTime.js +12 -0
  71. package/dist/cjs/utilities/system/logger.js +40 -0
  72. package/dist/cjs/utilities/validation/isMobileDevice.js +8 -0
  73. package/dist/cjs/utilities/validation/isValidColor.js +182 -0
  74. package/dist/cjs/utilities/validation/isValidImageUrl.js +42 -0
  75. package/dist/cjs/utilities/validation/isValidYouTubeId.js +9 -0
  76. package/dist/cjs/utilities/validation/validateScale.js +8 -0
  77. package/dist/configs/clientConfig.d.ts.map +1 -1
  78. package/dist/configs/clientConfig.js +115 -17
  79. package/dist/configs/clientConfig.js.map +1 -1
  80. package/dist/configs/index.d.ts +1 -3
  81. package/dist/configs/index.d.ts.map +1 -1
  82. package/dist/configs/index.js +1 -3
  83. package/dist/configs/index.js.map +1 -1
  84. package/dist/configs/sstDocsConfig.browser.d.ts +8 -0
  85. package/dist/configs/sstDocsConfig.browser.d.ts.map +1 -0
  86. package/dist/configs/sstDocsConfig.browser.js +18 -0
  87. package/dist/configs/sstDocsConfig.browser.js.map +1 -0
  88. package/dist/configs/sstDocsConfig.d.ts +2 -2
  89. package/dist/configs/sstDocsConfig.d.ts.map +1 -1
  90. package/dist/configs/sstDocsConfig.js +18 -183
  91. package/dist/configs/sstDocsConfig.js.map +1 -1
  92. package/dist/configs/{sstDocsConfig.shared.d.ts → sstDocsConfigShared.d.ts} +3 -2
  93. package/dist/configs/sstDocsConfigShared.d.ts.map +1 -0
  94. package/dist/configs/sstDocsConfigShared.js +165 -0
  95. package/dist/configs/sstDocsConfigShared.js.map +1 -0
  96. package/dist/data/buildTree.d.ts +2 -14
  97. package/dist/data/buildTree.d.ts.map +1 -1
  98. package/dist/data/buildTree.js +79 -162
  99. package/dist/data/buildTree.js.map +1 -1
  100. package/dist/data/fsDataProvider.d.ts +2 -1
  101. package/dist/data/fsDataProvider.d.ts.map +1 -1
  102. package/dist/data/fsDataProvider.js +15 -3
  103. package/dist/data/fsDataProvider.js.map +1 -1
  104. package/dist/data/httpDataProvider.d.ts +2 -1
  105. package/dist/data/httpDataProvider.d.ts.map +1 -1
  106. package/dist/data/httpDataProvider.js +17 -4
  107. package/dist/data/httpDataProvider.js.map +1 -1
  108. package/dist/data/index.d.ts +2 -2
  109. package/dist/data/index.d.ts.map +1 -1
  110. package/dist/data/index.js +2 -2
  111. package/dist/data/index.js.map +1 -1
  112. package/dist/themes/index.d.ts +1 -2
  113. package/dist/themes/index.d.ts.map +1 -1
  114. package/dist/themes/index.js +1 -2
  115. package/dist/themes/index.js.map +1 -1
  116. package/dist/themes/presets/default.d.ts +3 -0
  117. package/dist/themes/presets/default.d.ts.map +1 -0
  118. package/dist/themes/presets/default.js +119 -0
  119. package/dist/themes/presets/default.js.map +1 -0
  120. package/dist/themes/themeRegistry.d.ts +3 -4
  121. package/dist/themes/themeRegistry.d.ts.map +1 -1
  122. package/dist/themes/themeRegistry.js +11 -11
  123. package/dist/themes/themeRegistry.js.map +1 -1
  124. package/dist/types/Content.d.ts +35 -18
  125. package/dist/types/Content.d.ts.map +1 -1
  126. package/dist/types/HtmlGeneratorSettings.d.ts +3 -11
  127. package/dist/types/HtmlGeneratorSettings.d.ts.map +1 -1
  128. package/dist/types/StyleTheme.d.ts +115 -131
  129. package/dist/types/StyleTheme.d.ts.map +1 -1
  130. package/dist/types/index.d.ts +1 -2
  131. package/dist/types/index.d.ts.map +1 -1
  132. package/dist/utilities/string/normalizeSystemPath.d.ts.map +1 -1
  133. package/dist/utilities/string/normalizeSystemPath.js +9 -1
  134. package/dist/utilities/string/normalizeSystemPath.js.map +1 -1
  135. package/dist/utilities/string/withBasePath.d.ts.map +1 -1
  136. package/dist/utilities/string/withBasePath.js +35 -6
  137. package/dist/utilities/string/withBasePath.js.map +1 -1
  138. package/package.json +141 -160
  139. package/dist/browser/serverOnly.d.ts +0 -15
  140. package/dist/browser/serverOnly.d.ts.map +0 -1
  141. package/dist/browser/serverOnly.js +0 -33
  142. package/dist/browser/serverOnly.js.map +0 -1
  143. package/dist/browser.d.ts +0 -38
  144. package/dist/browser.d.ts.map +0 -1
  145. package/dist/browser.js +0 -45
  146. package/dist/browser.js.map +0 -1
  147. package/dist/configs/sstDocsConfig.shared.d.ts.map +0 -1
  148. package/dist/configs/sstDocsConfig.shared.js +0 -86
  149. package/dist/configs/sstDocsConfig.shared.js.map +0 -1
  150. package/dist/configs/stylesConfig.d.ts +0 -3
  151. package/dist/configs/stylesConfig.d.ts.map +0 -1
  152. package/dist/configs/stylesConfig.js +0 -8
  153. package/dist/configs/stylesConfig.js.map +0 -1
  154. package/dist/styles/themes.css +0 -1
  155. package/dist/styles/themes.css.map +0 -1
  156. package/dist/themes/baseThemeClasses.d.ts +0 -106
  157. package/dist/themes/baseThemeClasses.d.ts.map +0 -1
  158. package/dist/themes/baseThemeClasses.js +0 -106
  159. package/dist/themes/baseThemeClasses.js.map +0 -1
  160. package/dist/themes/darkTheme.d.ts +0 -3
  161. package/dist/themes/darkTheme.d.ts.map +0 -1
  162. package/dist/themes/darkTheme.js +0 -42
  163. package/dist/themes/darkTheme.js.map +0 -1
  164. package/dist/themes/lightTheme.d.ts +0 -3
  165. package/dist/themes/lightTheme.d.ts.map +0 -1
  166. package/dist/themes/lightTheme.js +0 -42
  167. package/dist/themes/lightTheme.js.map +0 -1
  168. package/dist/types/StylesConfig.d.ts +0 -8
  169. package/dist/types/StylesConfig.d.ts.map +0 -1
  170. package/dist/types/StylesConfig.js +0 -2
  171. package/dist/types/StylesConfig.js.map +0 -1
@@ -0,0 +1,165 @@
1
+ import { AVAILABLE_THEME_PRESET_NAMES, DEFAULT_THEME_PRESET, getThemePreset, isThemePresetName, } from "../themes/themeRegistry.js";
2
+ import path from "node:path";
3
+ import { normalizeSystemPath } from "../utilities/string/normalizeSystemPath.js";
4
+ export const SST_DOCS_CONFIG_FILENAME = "sst-docs.config.json";
5
+ export class SstDocsConfigError extends Error {
6
+ constructor(message) {
7
+ super(message);
8
+ this.name = "SstDocsConfigError";
9
+ }
10
+ }
11
+ export function parseConfigContents(contents, sourcePath) {
12
+ let parsed;
13
+ try {
14
+ parsed = JSON.parse(contents);
15
+ }
16
+ catch (error) {
17
+ throw new SstDocsConfigError(`Failed to parse ${SST_DOCS_CONFIG_FILENAME}: ${error.message}`);
18
+ }
19
+ return normalizeConfig(parsed, sourcePath);
20
+ }
21
+ export function derivePublicDataPath(fsDataPath) {
22
+ const normalizedFsPath = normalizeSystemPath(fsDataPath.trim());
23
+ const posixPath = path.posix.normalize(normalizedFsPath || "/");
24
+ const segments = posixPath.split("/").filter(Boolean);
25
+ const publicIndex = segments.indexOf("public");
26
+ const publicSegments = publicIndex >= 0 ? segments.slice(publicIndex + 1) : segments;
27
+ if (publicSegments.length === 0) {
28
+ return "/";
29
+ }
30
+ const joined = `/${publicSegments.join("/")}`;
31
+ return joined.endsWith("/") ? joined : `${joined}/`;
32
+ }
33
+ export function resolvePublicDataPath(baseUrl, config) {
34
+ const publicPath = typeof config === "string" ? config : config.PUBLIC_DATA_PATH;
35
+ const normalizedPublicPath = normalizePublicPath(publicPath);
36
+ if (!baseUrl || baseUrl.trim().length === 0) {
37
+ return normalizedPublicPath;
38
+ }
39
+ if (isAbsoluteUrl(baseUrl)) {
40
+ const url = new URL(baseUrl);
41
+ url.pathname = joinUrlPaths(url.pathname || "/", normalizedPublicPath);
42
+ return url.toString();
43
+ }
44
+ const parsedBase = new URL(baseUrl, "http://local.placeholder");
45
+ const joinedPath = joinUrlPaths(parsedBase.pathname || "/", normalizedPublicPath);
46
+ return `${joinedPath}${parsedBase.search}${parsedBase.hash}`;
47
+ }
48
+ function normalizePublicPath(value) {
49
+ const normalized = normalizeSystemPath(value.trim());
50
+ const posixPath = path.posix.normalize(normalized || "/");
51
+ const withLeading = posixPath.startsWith("/") ? posixPath : `/${posixPath}`;
52
+ return withLeading.endsWith("/") ? withLeading : `${withLeading}/`;
53
+ }
54
+ function joinUrlPaths(base, child) {
55
+ const normalizedBase = normalizePublicPath(base);
56
+ const normalizedChild = normalizePublicPath(child).replace(/^\/+/, "");
57
+ const joined = path.posix.join(normalizedBase, normalizedChild);
58
+ return joined.endsWith("/") ? joined : `${joined}/`;
59
+ }
60
+ function isAbsoluteUrl(value) {
61
+ try {
62
+ new URL(value);
63
+ return true;
64
+ }
65
+ catch {
66
+ return false;
67
+ }
68
+ }
69
+ function normalizeConfig(value, sourcePath) {
70
+ if (!value || typeof value !== "object") {
71
+ throw new SstDocsConfigError(`Invalid configuration in ${sourcePath}: expected an object`);
72
+ }
73
+ const raw = value;
74
+ if (typeof raw.FS_DATA_PATH !== "string") {
75
+ throw new SstDocsConfigError(`Missing or invalid FS_DATA_PATH in ${sourcePath}`);
76
+ }
77
+ const fsDataPath = normalizeSystemPath(raw.FS_DATA_PATH.trim());
78
+ if (fsDataPath.length === 0) {
79
+ throw new SstDocsConfigError(`FS_DATA_PATH cannot be empty in ${sourcePath}`);
80
+ }
81
+ return {
82
+ FS_DATA_PATH: fsDataPath,
83
+ PUBLIC_DATA_PATH: derivePublicDataPath(fsDataPath),
84
+ HEADER_BRANDING: normalizeHeaderBranding(raw.HEADER_BRANDING, sourcePath),
85
+ HTML_GENERATOR_SETTINGS: normalizeHtmlGeneratorSettings(raw.HTML_GENERATOR_SETTINGS, sourcePath),
86
+ };
87
+ }
88
+ function normalizeHeaderBranding(value, sourcePath) {
89
+ if (value === undefined) {
90
+ return {};
91
+ }
92
+ if (!value || typeof value !== "object") {
93
+ throw new SstDocsConfigError(`HEADER_BRANDING must be an object in ${sourcePath}`);
94
+ }
95
+ const { logoSrc, logoAlt, logoText } = value;
96
+ return {
97
+ logoSrc: normalizeOptionalString(logoSrc, "logoSrc", sourcePath),
98
+ logoAlt: normalizeOptionalString(logoAlt, "logoAlt", sourcePath),
99
+ logoText: normalizeOptionalString(logoText, "logoText", sourcePath),
100
+ };
101
+ }
102
+ function normalizeOptionalString(value, key, sourcePath) {
103
+ if (value === undefined || value === null)
104
+ return undefined;
105
+ if (typeof value !== "string") {
106
+ throw new SstDocsConfigError(`HEADER_BRANDING.${key} must be a string in ${sourcePath}`);
107
+ }
108
+ const trimmed = value.trim();
109
+ return trimmed.length > 0 ? trimmed : undefined;
110
+ }
111
+ function normalizeHtmlGeneratorSettings(value, sourcePath) {
112
+ if (value === undefined) {
113
+ return undefined;
114
+ }
115
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
116
+ throw new SstDocsConfigError(`HTML_GENERATOR_SETTINGS must be an object in ${sourcePath}`);
117
+ }
118
+ const { OUTPUT_DIRECTORY, THEME, SEPARATE_BUILD_FOR_HTML_GENERATOR, } = value;
119
+ if (typeof OUTPUT_DIRECTORY !== "string") {
120
+ throw new SstDocsConfigError(`HTML_GENERATOR_SETTINGS.OUTPUT_DIRECTORY must be a string in ${sourcePath}`);
121
+ }
122
+ const outputDirectory = normalizeSystemPath(OUTPUT_DIRECTORY.trim());
123
+ if (outputDirectory.length === 0) {
124
+ throw new SstDocsConfigError(`HTML_GENERATOR_SETTINGS.OUTPUT_DIRECTORY cannot be empty in ${sourcePath}`);
125
+ }
126
+ if (THEME === undefined) {
127
+ throw new SstDocsConfigError(`HTML_GENERATOR_SETTINGS.THEME must be provided in ${sourcePath}`);
128
+ }
129
+ if (SEPARATE_BUILD_FOR_HTML_GENERATOR !== undefined &&
130
+ typeof SEPARATE_BUILD_FOR_HTML_GENERATOR !== "boolean") {
131
+ throw new SstDocsConfigError(`HTML_GENERATOR_SETTINGS.SEPARATE_BUILD_FOR_HTML_GENERATOR must be a boolean in ${sourcePath}`);
132
+ }
133
+ const resolvedTheme = resolveThemeConfiguration(THEME, sourcePath);
134
+ return {
135
+ OUTPUT_DIRECTORY: outputDirectory,
136
+ THEME: resolvedTheme,
137
+ SEPARATE_BUILD_FOR_HTML_GENERATOR: SEPARATE_BUILD_FOR_HTML_GENERATOR ?? false,
138
+ };
139
+ }
140
+ function resolveThemeConfiguration(value, sourcePath) {
141
+ if (typeof value !== "string") {
142
+ throw new SstDocsConfigError(`HTML_GENERATOR_SETTINGS.THEME must be a string preset in ${sourcePath}`);
143
+ }
144
+ const themeName = ensureThemePresetName(value, sourcePath, "HTML_GENERATOR_SETTINGS.THEME");
145
+ return cloneTheme(getThemePreset(themeName));
146
+ }
147
+ function ensureThemePresetName(raw, sourcePath, propertyPath) {
148
+ if (raw === undefined || raw === null) {
149
+ return DEFAULT_THEME_PRESET;
150
+ }
151
+ if (typeof raw !== "string") {
152
+ const options = AVAILABLE_THEME_PRESET_NAMES.join(", ");
153
+ throw new SstDocsConfigError(`${propertyPath} must be one of: ${options} in ${sourcePath}`);
154
+ }
155
+ const normalized = raw.trim().toLowerCase();
156
+ if (!isThemePresetName(normalized)) {
157
+ const options = AVAILABLE_THEME_PRESET_NAMES.join(", ");
158
+ throw new SstDocsConfigError(`Unknown ${propertyPath} "${raw}" in ${sourcePath}. Supported presets: ${options}`);
159
+ }
160
+ return normalized;
161
+ }
162
+ function cloneTheme(theme) {
163
+ return JSON.parse(JSON.stringify(theme));
164
+ }
165
+ //# sourceMappingURL=sstDocsConfigShared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sstDocsConfigShared.js","sourceRoot":"","sources":["../../src/configs/sstDocsConfigShared.ts"],"names":[],"mappings":"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"}
@@ -1,20 +1,8 @@
1
1
  import type { Category } from "../types/Category.js";
2
2
  import type { DocItem } from "../types/DocItem.js";
3
3
  import type { RawCategory } from "../types/RawCategory.js";
4
- type BuildTreeIssueType = "invalidCategoryId" | "invalidChildrenField" | "invalidChildId" | "missingCategory" | "invalidDocsField" | "invalidDocId" | "missingDoc" | "cycle";
5
- export interface BuildTreeIssue {
6
- type: BuildTreeIssueType;
7
- categoryId?: string;
8
- childId?: string;
9
- docId?: string;
10
- path?: string[];
11
- message: string;
12
- }
13
- export interface BuildTreeResult {
4
+ export declare function buildTree(rawMap: Record<string, RawCategory>, allDocs: DocItem[]): {
14
5
  tree: Category[];
15
6
  usedDocIds: Set<string>;
16
- errors: BuildTreeIssue[];
17
- }
18
- export declare function buildTree(rawMap: Record<string, RawCategory>, allDocs: DocItem[]): BuildTreeResult;
19
- export {};
7
+ };
20
8
  //# sourceMappingURL=buildTree.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"buildTree.d.ts","sourceRoot":"","sources":["../../src/data/buildTree.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3D,KAAK,kBAAkB,GACnB,mBAAmB,GACnB,sBAAsB,GACtB,gBAAgB,GAChB,iBAAiB,GACjB,kBAAkB,GAClB,cAAc,GACd,YAAY,GACZ,OAAO,CAAC;AAEZ,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,kBAAkB,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,QAAQ,EAAE,CAAC;IACjB,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACxB,MAAM,EAAE,cAAc,EAAE,CAAC;CAC1B;AAUD,wBAAgB,SAAS,CACvB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,EACnC,OAAO,EAAE,OAAO,EAAE,GACjB,eAAe,CAuMjB"}
1
+ {"version":3,"file":"buildTree.d.ts","sourceRoot":"","sources":["../../src/data/buildTree.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AA2F3D,wBAAgB,SAAS,CACvB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,EACnC,OAAO,EAAE,OAAO,EAAE,GACjB;IAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAAC,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CAAE,CA8C/C"}
@@ -1,174 +1,91 @@
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
+ function convertCategory(raw, rawMap, docLookup, usedDocIds, included, visiting) {
2
+ if (visiting.has(raw.id)) {
3
+ console.warn(`Detected circular category reference at ${raw.id}.`);
4
+ return null;
25
5
  }
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);
6
+ visiting.add(raw.id);
7
+ let docs;
8
+ const docIds = Array.isArray(raw.docs) ? raw.docs : [];
9
+ if (docIds.length > 0) {
10
+ const validDocs = docIds
11
+ .map((rawId) => {
12
+ if (typeof rawId !== "string" || rawId.length === 0) {
13
+ console.warn(`Invalid doc id in category ${raw.id}:`, rawId);
14
+ return null;
67
15
  }
68
- if (collected.length > 0) {
69
- docs = collected;
16
+ const doc = docLookup.get(rawId);
17
+ if (!doc) {
18
+ console.warn(`Doc id ${rawId} referenced in category ${raw.id} not found.`);
19
+ return null;
70
20
  }
21
+ usedDocIds.add(rawId);
22
+ return doc;
23
+ })
24
+ .filter((doc) => doc !== null);
25
+ if (validDocs.length > 0) {
26
+ docs = validDocs;
71
27
  }
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
28
  }
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);
29
+ let children;
30
+ const childIds = Array.isArray(raw.children) ? raw.children : [];
31
+ if (childIds.length > 0) {
32
+ const validChildren = childIds
33
+ .map((rawChildId) => {
34
+ if (typeof rawChildId !== "string" || rawChildId.length === 0) {
35
+ console.warn(`Invalid child category id in ${raw.id}:`, rawChildId);
36
+ return null;
143
37
  }
38
+ const childRaw = rawMap[rawChildId];
39
+ if (!childRaw) {
40
+ console.warn(`Child category ${rawChildId} referenced in ${raw.id} not found.`);
41
+ return null;
42
+ }
43
+ return convertCategory(childRaw, rawMap, docLookup, usedDocIds, included, visiting);
44
+ })
45
+ .filter((child) => child !== null);
46
+ if (validChildren.length > 0) {
47
+ children = validChildren;
144
48
  }
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;
49
+ }
50
+ visiting.delete(raw.id);
51
+ included.add(raw.id);
52
+ return {
53
+ id: raw.id,
54
+ title: raw.title,
55
+ description: raw.description,
56
+ content: raw.content ?? [],
57
+ docs,
58
+ children,
161
59
  };
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);
60
+ }
61
+ export function buildTree(rawMap, allDocs) {
62
+ const docLookup = new Map(allDocs.map((d) => [d.id, d]));
63
+ const usedDocIds = new Set();
64
+ const includedIds = new Set();
65
+ const childCategoryIds = new Set();
66
+ Object.values(rawMap).forEach((category) => {
67
+ if (Array.isArray(category?.children)) {
68
+ category.children.forEach((childId) => {
69
+ if (typeof childId === "string" && childId.length > 0) {
70
+ childCategoryIds.add(childId);
71
+ }
72
+ });
170
73
  }
74
+ });
75
+ let rootCandidates = Object.values(rawMap).filter((category) => category &&
76
+ typeof category.id === "string" &&
77
+ category.id.length > 0 &&
78
+ !childCategoryIds.has(category.id));
79
+ if (rootCandidates.length === 0) {
80
+ rootCandidates = Object.values(rawMap).filter((category) => category && typeof category.id === "string" && category.id.length > 0);
171
81
  }
172
- return { tree, usedDocIds, errors };
82
+ const tree = rootCandidates
83
+ .map((rootCategory) => {
84
+ if (includedIds.has(rootCategory.id))
85
+ return null;
86
+ return convertCategory(rootCategory, rawMap, docLookup, usedDocIds, includedIds, new Set());
87
+ })
88
+ .filter((category) => category !== null);
89
+ return { tree, usedDocIds };
173
90
  }
174
91
  //# 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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"}
@@ -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":"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;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;AAG5C,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"}
@@ -3,6 +3,6 @@ export { loadAllCategories } from "./loadAllCategories.js";
3
3
  export { loadAllItems } from "./loadAllItems.js";
4
4
  export { loadVersionData } from "./loadVersionData.js";
5
5
  export { loadVersions } from "./loadVersions.js";
6
- export { fsDataProvider } from "./fsDataProvider.js";
7
- export { httpDataProvider } from "./httpDataProvider.js";
6
+ export { FsDataProvider, fsDataProvider } from "./fsDataProvider.js";
7
+ export { HttpDataProvider, httpDataProvider } from "./httpDataProvider.js";
8
8
  //# 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,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,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"}
@@ -3,6 +3,6 @@ export { loadAllCategories } from "./loadAllCategories.js";
3
3
  export { loadAllItems } from "./loadAllItems.js";
4
4
  export { loadVersionData } from "./loadVersionData.js";
5
5
  export { loadVersions } from "./loadVersions.js";
6
- export { fsDataProvider } from "./fsDataProvider.js";
7
- export { httpDataProvider } from "./httpDataProvider.js";
6
+ export { FsDataProvider, fsDataProvider } from "./fsDataProvider.js";
7
+ export { HttpDataProvider, httpDataProvider } from "./httpDataProvider.js";
8
8
  //# 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,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,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"}