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

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 (144) hide show
  1. package/README.md +60 -1
  2. package/dist/cjs/configs/clientConfig.js +30 -112
  3. package/dist/cjs/configs/index.browser.js +16 -0
  4. package/dist/cjs/configs/sstDocsConfigShared.js +169 -101
  5. package/dist/cjs/data/buildTree.js +48 -10
  6. package/dist/cjs/data/fsDataProvider.browser.js +10 -0
  7. package/dist/cjs/data/index.browser.js +19 -0
  8. package/dist/cjs/data/index.js +6 -1
  9. package/dist/cjs/data/loadAllCategories.js +15 -5
  10. package/dist/cjs/data/loadAllItems.js +19 -7
  11. package/dist/cjs/data/loadProducts.js +6 -0
  12. package/dist/cjs/data/loadVersionData.fs.js +31 -0
  13. package/dist/cjs/data/loadVersionData.js +130 -7
  14. package/dist/cjs/index.browser.js +22 -0
  15. package/dist/cjs/themes/index.js +5 -1
  16. package/dist/cjs/themes/styleThemeSchema.js +36 -0
  17. package/dist/cjs/types/DataDiagnostic.js +2 -0
  18. package/dist/cjs/types/Product.js +2 -0
  19. package/dist/cjs/utilities/index.browser.js +53 -0
  20. package/dist/cjs/utilities/path/pathExists.browser.js +6 -0
  21. package/dist/cjs/utilities/path/pathExists.js +1 -1
  22. package/dist/cjs/utilities/path/resolveAgainstProjectRoot.browser.js +6 -0
  23. package/dist/cjs/utilities/path/resolveDataPath.browser.js +6 -0
  24. package/dist/cjs/utilities/path/resolveDataPath.js +1 -1
  25. package/dist/cjs/utilities/string/withBasePath.js +37 -9
  26. package/dist/cjs/utilities/system/logger.browser.js +39 -0
  27. package/dist/cjs/utilities/system/logger.js +26 -6
  28. package/dist/configs/clientConfig.d.ts.map +1 -1
  29. package/dist/configs/clientConfig.js +30 -112
  30. package/dist/configs/clientConfig.js.map +1 -1
  31. package/dist/configs/index.browser.d.ts +4 -0
  32. package/dist/configs/index.browser.d.ts.map +1 -0
  33. package/dist/configs/index.browser.js +4 -0
  34. package/dist/configs/index.browser.js.map +1 -0
  35. package/dist/configs/sstDocsConfig.browser.d.ts.map +1 -1
  36. package/dist/configs/sstDocsConfig.browser.js.map +1 -1
  37. package/dist/configs/sstDocsConfig.d.ts.map +1 -1
  38. package/dist/configs/sstDocsConfig.js.map +1 -1
  39. package/dist/configs/sstDocsConfigShared.d.ts +8 -0
  40. package/dist/configs/sstDocsConfigShared.d.ts.map +1 -1
  41. package/dist/configs/sstDocsConfigShared.js +168 -97
  42. package/dist/configs/sstDocsConfigShared.js.map +1 -1
  43. package/dist/data/buildTree.d.ts +10 -2
  44. package/dist/data/buildTree.d.ts.map +1 -1
  45. package/dist/data/buildTree.js +48 -10
  46. package/dist/data/buildTree.js.map +1 -1
  47. package/dist/data/fsDataProvider.browser.d.ts +6 -0
  48. package/dist/data/fsDataProvider.browser.d.ts.map +1 -0
  49. package/dist/data/fsDataProvider.browser.js +7 -0
  50. package/dist/data/fsDataProvider.browser.js.map +1 -0
  51. package/dist/data/fsDataProvider.d.ts.map +1 -1
  52. package/dist/data/fsDataProvider.js.map +1 -1
  53. package/dist/data/index.browser.d.ts +8 -0
  54. package/dist/data/index.browser.d.ts.map +1 -0
  55. package/dist/data/index.browser.js +8 -0
  56. package/dist/data/index.browser.js.map +1 -0
  57. package/dist/data/index.d.ts +3 -1
  58. package/dist/data/index.d.ts.map +1 -1
  59. package/dist/data/index.js +3 -1
  60. package/dist/data/index.js.map +1 -1
  61. package/dist/data/loadAllCategories.d.ts +10 -1
  62. package/dist/data/loadAllCategories.d.ts.map +1 -1
  63. package/dist/data/loadAllCategories.js +15 -5
  64. package/dist/data/loadAllCategories.js.map +1 -1
  65. package/dist/data/loadAllItems.d.ts +10 -1
  66. package/dist/data/loadAllItems.d.ts.map +1 -1
  67. package/dist/data/loadAllItems.js +19 -7
  68. package/dist/data/loadAllItems.js.map +1 -1
  69. package/dist/data/loadProducts.d.ts +4 -0
  70. package/dist/data/loadProducts.d.ts.map +1 -0
  71. package/dist/data/loadProducts.js +4 -0
  72. package/dist/data/loadProducts.js.map +1 -0
  73. package/dist/data/loadVersionData.d.ts +37 -1
  74. package/dist/data/loadVersionData.d.ts.map +1 -1
  75. package/dist/data/loadVersionData.fs.d.ts +3 -0
  76. package/dist/data/loadVersionData.fs.d.ts.map +1 -0
  77. package/dist/data/loadVersionData.fs.js +26 -0
  78. package/dist/data/loadVersionData.fs.js.map +1 -0
  79. package/dist/data/loadVersionData.js +127 -7
  80. package/dist/data/loadVersionData.js.map +1 -1
  81. package/dist/index.browser.d.ts +7 -0
  82. package/dist/index.browser.d.ts.map +1 -0
  83. package/dist/index.browser.js +7 -0
  84. package/dist/index.browser.js.map +1 -0
  85. package/dist/themes/index.d.ts +1 -0
  86. package/dist/themes/index.d.ts.map +1 -1
  87. package/dist/themes/index.js +1 -0
  88. package/dist/themes/index.js.map +1 -1
  89. package/dist/themes/styleThemeSchema.d.ts +6 -0
  90. package/dist/themes/styleThemeSchema.d.ts.map +1 -0
  91. package/dist/themes/styleThemeSchema.js +32 -0
  92. package/dist/themes/styleThemeSchema.js.map +1 -0
  93. package/dist/themes/themeRegistry.d.ts.map +1 -1
  94. package/dist/themes/themeRegistry.js.map +1 -1
  95. package/dist/types/ClientVisibleSstDocsConfig.d.ts +1 -0
  96. package/dist/types/ClientVisibleSstDocsConfig.d.ts.map +1 -1
  97. package/dist/types/DataDiagnostic.d.ts +8 -0
  98. package/dist/types/DataDiagnostic.d.ts.map +1 -0
  99. package/dist/types/DataDiagnostic.js +2 -0
  100. package/dist/types/DataDiagnostic.js.map +1 -0
  101. package/dist/types/HtmlGeneratorSettings.d.ts +1 -1
  102. package/dist/types/HtmlGeneratorSettings.d.ts.map +1 -1
  103. package/dist/types/Product.d.ts +5 -0
  104. package/dist/types/Product.d.ts.map +1 -0
  105. package/dist/types/Product.js +2 -0
  106. package/dist/types/Product.js.map +1 -0
  107. package/dist/types/SstDocsConfig.d.ts +2 -0
  108. package/dist/types/SstDocsConfig.d.ts.map +1 -1
  109. package/dist/types/index.d.ts +2 -0
  110. package/dist/types/index.d.ts.map +1 -1
  111. package/dist/utilities/index.browser.d.ts +23 -0
  112. package/dist/utilities/index.browser.d.ts.map +1 -0
  113. package/dist/utilities/index.browser.js +29 -0
  114. package/dist/utilities/index.browser.js.map +1 -0
  115. package/dist/utilities/path/pathExists.browser.d.ts +2 -0
  116. package/dist/utilities/path/pathExists.browser.d.ts.map +1 -0
  117. package/dist/utilities/path/pathExists.browser.js +4 -0
  118. package/dist/utilities/path/pathExists.browser.js.map +1 -0
  119. package/dist/utilities/path/pathExists.js +1 -1
  120. package/dist/utilities/path/pathExists.js.map +1 -1
  121. package/dist/utilities/path/resolveAgainstProjectRoot.browser.d.ts +2 -0
  122. package/dist/utilities/path/resolveAgainstProjectRoot.browser.d.ts.map +1 -0
  123. package/dist/utilities/path/resolveAgainstProjectRoot.browser.js +4 -0
  124. package/dist/utilities/path/resolveAgainstProjectRoot.browser.js.map +1 -0
  125. package/dist/utilities/path/resolveAgainstProjectRoot.d.ts.map +1 -1
  126. package/dist/utilities/path/resolveAgainstProjectRoot.js.map +1 -1
  127. package/dist/utilities/path/resolveDataPath.browser.d.ts +2 -0
  128. package/dist/utilities/path/resolveDataPath.browser.d.ts.map +1 -0
  129. package/dist/utilities/path/resolveDataPath.browser.js +4 -0
  130. package/dist/utilities/path/resolveDataPath.browser.js.map +1 -0
  131. package/dist/utilities/path/resolveDataPath.d.ts.map +1 -1
  132. package/dist/utilities/path/resolveDataPath.js +1 -1
  133. package/dist/utilities/path/resolveDataPath.js.map +1 -1
  134. package/dist/utilities/string/withBasePath.d.ts.map +1 -1
  135. package/dist/utilities/string/withBasePath.js +37 -6
  136. package/dist/utilities/string/withBasePath.js.map +1 -1
  137. package/dist/utilities/system/logger.browser.d.ts +3 -0
  138. package/dist/utilities/system/logger.browser.d.ts.map +1 -0
  139. package/dist/utilities/system/logger.browser.js +36 -0
  140. package/dist/utilities/system/logger.browser.js.map +1 -0
  141. package/dist/utilities/system/logger.d.ts.map +1 -1
  142. package/dist/utilities/system/logger.js +26 -6
  143. package/dist/utilities/system/logger.js.map +1 -1
  144. package/package.json +181 -9
@@ -1,9 +1,17 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.buildTree = buildTree;
4
- function convertCategory(raw, rawMap, docLookup, usedDocIds, included, visiting) {
4
+ const logger_js_1 = require("../utilities/system/logger.js");
5
+ function convertCategory(raw, rawMap, docLookup, usedDocIds, included, visiting, diagnostics, logger) {
5
6
  if (visiting.has(raw.id)) {
6
- console.warn(`Detected circular category reference at ${raw.id}.`);
7
+ const message = `Detected circular category reference at ${raw.id}.`;
8
+ diagnostics.push({
9
+ code: "circular-category",
10
+ level: "warn",
11
+ message,
12
+ context: { categoryId: raw.id },
13
+ });
14
+ logger.warn(message);
7
15
  return null;
8
16
  }
9
17
  visiting.add(raw.id);
@@ -13,12 +21,26 @@ function convertCategory(raw, rawMap, docLookup, usedDocIds, included, visiting)
13
21
  const validDocs = docIds
14
22
  .map((rawId) => {
15
23
  if (typeof rawId !== "string" || rawId.length === 0) {
16
- console.warn(`Invalid doc id in category ${raw.id}:`, rawId);
24
+ const message = `Invalid doc id in category ${raw.id}.`;
25
+ diagnostics.push({
26
+ code: "invalid-doc-ref",
27
+ level: "warn",
28
+ message,
29
+ context: { categoryId: raw.id, docId: rawId },
30
+ });
31
+ logger.warn(message);
17
32
  return null;
18
33
  }
19
34
  const doc = docLookup.get(rawId);
20
35
  if (!doc) {
21
- console.warn(`Doc id ${rawId} referenced in category ${raw.id} not found.`);
36
+ const message = `Doc id ${rawId} referenced in category ${raw.id} not found.`;
37
+ diagnostics.push({
38
+ code: "missing-doc-ref",
39
+ level: "warn",
40
+ message,
41
+ context: { categoryId: raw.id, docId: rawId },
42
+ });
43
+ logger.warn(message);
22
44
  return null;
23
45
  }
24
46
  usedDocIds.add(rawId);
@@ -35,15 +57,29 @@ function convertCategory(raw, rawMap, docLookup, usedDocIds, included, visiting)
35
57
  const validChildren = childIds
36
58
  .map((rawChildId) => {
37
59
  if (typeof rawChildId !== "string" || rawChildId.length === 0) {
38
- console.warn(`Invalid child category id in ${raw.id}:`, rawChildId);
60
+ const message = `Invalid child category id in ${raw.id}.`;
61
+ diagnostics.push({
62
+ code: "invalid-child-ref",
63
+ level: "warn",
64
+ message,
65
+ context: { categoryId: raw.id, childId: rawChildId },
66
+ });
67
+ logger.warn(message);
39
68
  return null;
40
69
  }
41
70
  const childRaw = rawMap[rawChildId];
42
71
  if (!childRaw) {
43
- console.warn(`Child category ${rawChildId} referenced in ${raw.id} not found.`);
72
+ const message = `Child category ${rawChildId} referenced in ${raw.id} not found.`;
73
+ diagnostics.push({
74
+ code: "missing-child-ref",
75
+ level: "warn",
76
+ message,
77
+ context: { categoryId: raw.id, childId: rawChildId },
78
+ });
79
+ logger.warn(message);
44
80
  return null;
45
81
  }
46
- return convertCategory(childRaw, rawMap, docLookup, usedDocIds, included, visiting);
82
+ return convertCategory(childRaw, rawMap, docLookup, usedDocIds, included, visiting, diagnostics, logger);
47
83
  })
48
84
  .filter((child) => child !== null);
49
85
  if (validChildren.length > 0) {
@@ -61,10 +97,12 @@ function convertCategory(raw, rawMap, docLookup, usedDocIds, included, visiting)
61
97
  children,
62
98
  };
63
99
  }
64
- function buildTree(rawMap, allDocs) {
100
+ function buildTree(rawMap, allDocs, options) {
65
101
  const docLookup = new Map(allDocs.map((d) => [d.id, d]));
66
102
  const usedDocIds = new Set();
67
103
  const includedIds = new Set();
104
+ const diagnostics = [];
105
+ const logger = options?.logger ?? (0, logger_js_1.createLogger)("data:buildTree");
68
106
  const childCategoryIds = new Set();
69
107
  Object.values(rawMap).forEach((category) => {
70
108
  if (Array.isArray(category?.children)) {
@@ -86,8 +124,8 @@ function buildTree(rawMap, allDocs) {
86
124
  .map((rootCategory) => {
87
125
  if (includedIds.has(rootCategory.id))
88
126
  return null;
89
- return convertCategory(rootCategory, rawMap, docLookup, usedDocIds, includedIds, new Set());
127
+ return convertCategory(rootCategory, rawMap, docLookup, usedDocIds, includedIds, new Set(), diagnostics, logger);
90
128
  })
91
129
  .filter((category) => category !== null);
92
- return { tree, usedDocIds };
130
+ return { tree, usedDocIds, diagnostics };
93
131
  }
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.fsDataProvider = exports.FsDataProvider = void 0;
4
+ class FsDataProvider {
5
+ async readJson(_absPath) {
6
+ throw new Error("FsDataProvider is only available in Node.js environments where the file system can be read.");
7
+ }
8
+ }
9
+ exports.FsDataProvider = FsDataProvider;
10
+ exports.fsDataProvider = FsDataProvider;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.httpDataProvider = exports.HttpDataProvider = exports.loadProducts = exports.loadVersions = exports.loadVersionDataFromHttp = exports.loadVersionData = exports.loadAllItems = exports.loadAllCategories = exports.buildTree = void 0;
4
+ var buildTree_js_1 = require("./buildTree.js");
5
+ Object.defineProperty(exports, "buildTree", { enumerable: true, get: function () { return buildTree_js_1.buildTree; } });
6
+ var loadAllCategories_js_1 = require("./loadAllCategories.js");
7
+ Object.defineProperty(exports, "loadAllCategories", { enumerable: true, get: function () { return loadAllCategories_js_1.loadAllCategories; } });
8
+ var loadAllItems_js_1 = require("./loadAllItems.js");
9
+ Object.defineProperty(exports, "loadAllItems", { enumerable: true, get: function () { return loadAllItems_js_1.loadAllItems; } });
10
+ var loadVersionData_js_1 = require("./loadVersionData.js");
11
+ Object.defineProperty(exports, "loadVersionData", { enumerable: true, get: function () { return loadVersionData_js_1.loadVersionData; } });
12
+ Object.defineProperty(exports, "loadVersionDataFromHttp", { enumerable: true, get: function () { return loadVersionData_js_1.loadVersionDataFromHttp; } });
13
+ var loadVersions_js_1 = require("./loadVersions.js");
14
+ Object.defineProperty(exports, "loadVersions", { enumerable: true, get: function () { return loadVersions_js_1.loadVersions; } });
15
+ var loadProducts_js_1 = require("./loadProducts.js");
16
+ Object.defineProperty(exports, "loadProducts", { enumerable: true, get: function () { return loadProducts_js_1.loadProducts; } });
17
+ var httpDataProvider_js_1 = require("./httpDataProvider.js");
18
+ Object.defineProperty(exports, "HttpDataProvider", { enumerable: true, get: function () { return httpDataProvider_js_1.HttpDataProvider; } });
19
+ Object.defineProperty(exports, "httpDataProvider", { enumerable: true, get: function () { return httpDataProvider_js_1.httpDataProvider; } });
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.httpDataProvider = exports.HttpDataProvider = exports.fsDataProvider = exports.FsDataProvider = exports.loadVersions = exports.loadVersionData = exports.loadAllItems = exports.loadAllCategories = exports.buildTree = void 0;
3
+ exports.httpDataProvider = exports.HttpDataProvider = exports.fsDataProvider = exports.FsDataProvider = exports.loadProducts = exports.loadVersions = exports.loadVersionDataFromFs = exports.loadVersionDataFromHttp = exports.loadVersionData = exports.loadAllItems = exports.loadAllCategories = exports.buildTree = void 0;
4
4
  var buildTree_js_1 = require("./buildTree.js");
5
5
  Object.defineProperty(exports, "buildTree", { enumerable: true, get: function () { return buildTree_js_1.buildTree; } });
6
6
  var loadAllCategories_js_1 = require("./loadAllCategories.js");
@@ -9,8 +9,13 @@ var loadAllItems_js_1 = require("./loadAllItems.js");
9
9
  Object.defineProperty(exports, "loadAllItems", { enumerable: true, get: function () { return loadAllItems_js_1.loadAllItems; } });
10
10
  var loadVersionData_js_1 = require("./loadVersionData.js");
11
11
  Object.defineProperty(exports, "loadVersionData", { enumerable: true, get: function () { return loadVersionData_js_1.loadVersionData; } });
12
+ Object.defineProperty(exports, "loadVersionDataFromHttp", { enumerable: true, get: function () { return loadVersionData_js_1.loadVersionDataFromHttp; } });
13
+ var loadVersionData_fs_js_1 = require("./loadVersionData.fs.js");
14
+ Object.defineProperty(exports, "loadVersionDataFromFs", { enumerable: true, get: function () { return loadVersionData_fs_js_1.loadVersionDataFromFs; } });
12
15
  var loadVersions_js_1 = require("./loadVersions.js");
13
16
  Object.defineProperty(exports, "loadVersions", { enumerable: true, get: function () { return loadVersions_js_1.loadVersions; } });
17
+ var loadProducts_js_1 = require("./loadProducts.js");
18
+ Object.defineProperty(exports, "loadProducts", { enumerable: true, get: function () { return loadProducts_js_1.loadProducts; } });
14
19
  var fsDataProvider_js_1 = require("./fsDataProvider.js");
15
20
  Object.defineProperty(exports, "FsDataProvider", { enumerable: true, get: function () { return fsDataProvider_js_1.FsDataProvider; } });
16
21
  Object.defineProperty(exports, "fsDataProvider", { enumerable: true, get: function () { return fsDataProvider_js_1.fsDataProvider; } });
@@ -1,20 +1,30 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.loadAllCategories = loadAllCategories;
4
- async function loadAllCategories(provider, versionRootAbs, ids) {
4
+ const logger_js_1 = require("../utilities/system/logger.js");
5
+ async function loadAllCategories(provider, versionRootAbs, ids, options) {
6
+ const diagnostics = [];
7
+ const logger = options?.logger ?? (0, logger_js_1.createLogger)("data:loadAllCategories");
5
8
  const results = await Promise.allSettled(ids.map(async (id) => {
6
9
  const p = `${versionRootAbs}/categories/${id}.json`;
7
10
  const data = await provider.readJson(p);
8
11
  return { id, data };
9
12
  }));
10
- const map = {};
13
+ const categories = {};
11
14
  results.forEach((res, i) => {
12
15
  if (res.status === "fulfilled") {
13
- map[res.value.id] = res.value.data;
16
+ categories[res.value.id] = res.value.data;
14
17
  }
15
18
  else {
16
- console.warn(`Failed to load category ${ids[i]}:`, res.reason);
19
+ const message = `Failed to load category ${ids[i]}: ${res.reason.message ?? res.reason}`;
20
+ diagnostics.push({
21
+ code: "category-read-failed",
22
+ level: "warn",
23
+ message,
24
+ context: { id: ids[i] },
25
+ });
26
+ logger.warn(message);
17
27
  }
18
28
  });
19
- return map;
29
+ return { categories, diagnostics };
20
30
  }
@@ -1,14 +1,26 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.loadAllItems = loadAllItems;
4
- async function loadAllItems(provider, versionRootAbs, ids) {
4
+ const logger_js_1 = require("../utilities/system/logger.js");
5
+ async function loadAllItems(provider, versionRootAbs, ids, options) {
6
+ const diagnostics = [];
7
+ const logger = options?.logger ?? (0, logger_js_1.createLogger)("data:loadAllItems");
5
8
  const results = await Promise.allSettled(ids.map((id) => provider.readJson(`${versionRootAbs}/items/${id}.json`)));
6
- const list = [];
9
+ const items = [];
7
10
  results.forEach((res, i) => {
8
- if (res.status === "fulfilled")
9
- list.push(res.value);
10
- else
11
- console.warn(`Failed to load item ${ids[i]}:`, res.reason);
11
+ if (res.status === "fulfilled") {
12
+ items.push(res.value);
13
+ }
14
+ else {
15
+ const message = `Failed to load item ${ids[i]}: ${res.reason.message ?? res.reason}`;
16
+ diagnostics.push({
17
+ code: "item-read-failed",
18
+ level: "warn",
19
+ message,
20
+ context: { id: ids[i] },
21
+ });
22
+ logger.warn(message);
23
+ }
12
24
  });
13
- return list;
25
+ return { items, diagnostics };
14
26
  }
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.loadProducts = loadProducts;
4
+ async function loadProducts(provider, dataRootAbs) {
5
+ return provider.readJson(`${dataRootAbs}/products.json`);
6
+ }
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.loadVersionDataFromFs = loadVersionDataFromFs;
7
+ const node_path_1 = __importDefault(require("node:path"));
8
+ const normalizeSystemPath_js_1 = require("../utilities/string/normalizeSystemPath.js");
9
+ const logger_js_1 = require("../utilities/system/logger.js");
10
+ const fsDataProvider_js_1 = require("./fsDataProvider.js");
11
+ const loadVersionData_js_1 = require("./loadVersionData.js");
12
+ async function loadVersionDataFromFs(baseDir, options) {
13
+ const logger = options?.logger ?? (0, logger_js_1.createLogger)("data:loadVersionDataFromFs");
14
+ const provider = new fsDataProvider_js_1.FsDataProvider();
15
+ const diagnostics = [];
16
+ const root = (0, normalizeSystemPath_js_1.normalizeSystemPath)(node_path_1.default.resolve(baseDir));
17
+ const { product, products, versionsRoot, versions, selectedVersion, diagnostics: selectionDiagnostics, } = await (0, loadVersionData_js_1.selectProductAndVersion)(provider, root, options, logger, (base, child) => (0, normalizeSystemPath_js_1.normalizeSystemPath)(node_path_1.default.resolve(base, child)));
18
+ const versionRoot = (0, normalizeSystemPath_js_1.normalizeSystemPath)(node_path_1.default.resolve(versionsRoot, selectedVersion));
19
+ const { items, tree, standaloneDocs, diagnostics: loadDiagnostics } = await (0, loadVersionData_js_1.loadVersionData)(provider, versionRoot, { logger });
20
+ diagnostics.push(...selectionDiagnostics, ...loadDiagnostics);
21
+ return {
22
+ version: selectedVersion,
23
+ versions,
24
+ product,
25
+ products,
26
+ items,
27
+ tree,
28
+ standaloneDocs,
29
+ diagnostics,
30
+ };
31
+ }
@@ -1,16 +1,139 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.loadVersionData = loadVersionData;
4
+ exports.loadVersionDataFromHttp = loadVersionDataFromHttp;
5
+ exports.selectVersion = selectVersion;
6
+ exports.selectProductAndVersion = selectProductAndVersion;
7
+ const logger_js_1 = require("../utilities/system/logger.js");
8
+ const httpDataProvider_js_1 = require("./httpDataProvider.js");
9
+ const loadProducts_js_1 = require("./loadProducts.js");
4
10
  const buildTree_js_1 = require("./buildTree.js");
5
11
  const loadAllCategories_js_1 = require("./loadAllCategories.js");
6
12
  const loadAllItems_js_1 = require("./loadAllItems.js");
7
- async function loadVersionData(provider, versionRootAbs) {
13
+ const loadVersions_js_1 = require("./loadVersions.js");
14
+ async function loadVersionData(provider, versionRootAbs, options) {
15
+ const logger = options?.logger;
16
+ const diagnostics = [];
8
17
  const index = await provider.readJson(`${versionRootAbs}/index.json`);
9
- const [rawCats, items] = await Promise.all([
10
- (0, loadAllCategories_js_1.loadAllCategories)(provider, versionRootAbs, index.categories),
11
- (0, loadAllItems_js_1.loadAllItems)(provider, versionRootAbs, index.items),
18
+ const [categoriesResult, itemsResult] = await Promise.all([
19
+ (0, loadAllCategories_js_1.loadAllCategories)(provider, versionRootAbs, index.categories, { logger }),
20
+ (0, loadAllItems_js_1.loadAllItems)(provider, versionRootAbs, index.items, { logger }),
12
21
  ]);
13
- const { tree, usedDocIds } = (0, buildTree_js_1.buildTree)(rawCats, items);
14
- const standaloneDocs = items.filter((d) => !usedDocIds.has(d.id));
15
- return { items, tree, standaloneDocs };
22
+ const { tree, usedDocIds, diagnostics: treeDiagnostics } = (0, buildTree_js_1.buildTree)(categoriesResult.categories, itemsResult.items, { logger });
23
+ const standaloneDocs = itemsResult.items.filter((d) => !usedDocIds.has(d.id));
24
+ diagnostics.push(...categoriesResult.diagnostics, ...itemsResult.diagnostics, ...treeDiagnostics);
25
+ return { items: itemsResult.items, tree, standaloneDocs, diagnostics };
26
+ }
27
+ async function loadVersionDataFromHttp(baseUrl, options) {
28
+ const logger = options?.logger ?? (0, logger_js_1.createLogger)("data:loadVersionDataFromHttp");
29
+ const provider = new httpDataProvider_js_1.HttpDataProvider();
30
+ const root = trimTrailingSlash(baseUrl);
31
+ const { product, products, versionsRoot, versions, selectedVersion, diagnostics: selectionDiagnostics, } = await selectProductAndVersion(provider, root, options, logger, joinUrl);
32
+ const versionRoot = joinUrl(versionsRoot, selectedVersion);
33
+ const { items, tree, standaloneDocs, diagnostics } = await loadVersionData(provider, versionRoot, { logger });
34
+ return {
35
+ version: selectedVersion,
36
+ versions,
37
+ product,
38
+ products,
39
+ items,
40
+ tree,
41
+ standaloneDocs,
42
+ diagnostics: [...selectionDiagnostics, ...diagnostics],
43
+ };
44
+ }
45
+ async function selectVersion(provider, root, requested, logger) {
46
+ const versions = await (0, loadVersions_js_1.loadVersions)(provider, root);
47
+ const diagnostics = [];
48
+ const fallback = "current";
49
+ if (versions.length === 0) {
50
+ const message = `No versions found under ${root}. Falling back to "${fallback}".`;
51
+ diagnostics.push({
52
+ code: "no-versions-found",
53
+ level: "warn",
54
+ message,
55
+ context: { root },
56
+ });
57
+ logger.warn(message);
58
+ return { versions, selectedVersion: requested ?? fallback, diagnostics };
59
+ }
60
+ if (requested) {
61
+ const match = versions.find((v) => v.version === requested);
62
+ if (!match) {
63
+ const message = `Requested version "${requested}" not found. Using first available: "${versions[0].version}".`;
64
+ diagnostics.push({
65
+ code: "version-not-found",
66
+ level: "warn",
67
+ message,
68
+ context: { requested, available: versions.map((v) => v.version) },
69
+ });
70
+ logger.warn(message);
71
+ return { versions, selectedVersion: versions[0].version, diagnostics };
72
+ }
73
+ return { versions, selectedVersion: requested, diagnostics };
74
+ }
75
+ return { versions, selectedVersion: versions[0].version, diagnostics };
76
+ }
77
+ async function selectProductAndVersion(provider, root, options, logger, joinChild) {
78
+ const diagnostics = [];
79
+ const productVersioning = options?.productVersioning ?? false;
80
+ let versionsRoot = root;
81
+ let product;
82
+ let products;
83
+ if (productVersioning) {
84
+ const productSelection = await selectProduct(provider, root, options?.product, logger);
85
+ diagnostics.push(...productSelection.diagnostics);
86
+ products = productSelection.products;
87
+ product = productSelection.selectedProduct;
88
+ if (productSelection.selectedProduct) {
89
+ versionsRoot = joinChild(root, productSelection.selectedProduct);
90
+ }
91
+ }
92
+ const { versions, selectedVersion, diagnostics: versionDiagnostics, } = await selectVersion(provider, versionsRoot, options?.version, logger);
93
+ diagnostics.push(...versionDiagnostics);
94
+ return {
95
+ product,
96
+ products,
97
+ versionsRoot,
98
+ versions,
99
+ selectedVersion,
100
+ diagnostics,
101
+ };
102
+ }
103
+ async function selectProduct(provider, root, requested, logger) {
104
+ const diagnostics = [];
105
+ const products = await (0, loadProducts_js_1.loadProducts)(provider, root);
106
+ if (products.length === 0) {
107
+ const message = `No products found under ${root}.`;
108
+ diagnostics.push({
109
+ code: "no-products-found",
110
+ level: "warn",
111
+ message,
112
+ context: { root },
113
+ });
114
+ logger.warn(message);
115
+ return { products, selectedProduct: undefined, diagnostics };
116
+ }
117
+ if (requested) {
118
+ const match = products.find((p) => p.product === requested);
119
+ if (!match) {
120
+ const message = `Requested product "${requested}" not found. Using first available: "${products[0].product}".`;
121
+ diagnostics.push({
122
+ code: "product-not-found",
123
+ level: "warn",
124
+ message,
125
+ context: { requested, available: products.map((p) => p.product) },
126
+ });
127
+ logger.warn(message);
128
+ return { products, selectedProduct: products[0].product, diagnostics };
129
+ }
130
+ return { products, selectedProduct: requested, diagnostics };
131
+ }
132
+ return { products, selectedProduct: products[0].product, diagnostics };
133
+ }
134
+ function trimTrailingSlash(value) {
135
+ return value.replace(/\/+$/, "");
136
+ }
137
+ function joinUrl(base, child) {
138
+ return `${trimTrailingSlash(base)}/${child.replace(/^\/+/, "")}`;
16
139
  }
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./configs/index.browser.js"), exports);
18
+ __exportStar(require("./constants/index.js"), exports);
19
+ __exportStar(require("./themes/index.js"), exports);
20
+ __exportStar(require("./types/index.js"), exports);
21
+ __exportStar(require("./data/index.browser.js"), exports);
22
+ __exportStar(require("./utilities/index.browser.js"), exports);
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isThemePresetName = exports.getThemePreset = exports.DOCS_CORE_THEME_PRESETS = exports.DEFAULT_THEME_PRESET = exports.AVAILABLE_THEME_PRESET_NAMES = exports.defaultTheme = void 0;
3
+ exports.styleThemeSchema = exports.parseStyleTheme = exports.isStyleTheme = exports.isThemePresetName = exports.getThemePreset = exports.DOCS_CORE_THEME_PRESETS = exports.DEFAULT_THEME_PRESET = exports.AVAILABLE_THEME_PRESET_NAMES = exports.defaultTheme = void 0;
4
4
  var default_js_1 = require("./presets/default.js");
5
5
  Object.defineProperty(exports, "defaultTheme", { enumerable: true, get: function () { return default_js_1.defaultTheme; } });
6
6
  var themeRegistry_js_1 = require("./themeRegistry.js");
@@ -9,3 +9,7 @@ Object.defineProperty(exports, "DEFAULT_THEME_PRESET", { enumerable: true, get:
9
9
  Object.defineProperty(exports, "DOCS_CORE_THEME_PRESETS", { enumerable: true, get: function () { return themeRegistry_js_1.DOCS_CORE_THEME_PRESETS; } });
10
10
  Object.defineProperty(exports, "getThemePreset", { enumerable: true, get: function () { return themeRegistry_js_1.getThemePreset; } });
11
11
  Object.defineProperty(exports, "isThemePresetName", { enumerable: true, get: function () { return themeRegistry_js_1.isThemePresetName; } });
12
+ var styleThemeSchema_js_1 = require("./styleThemeSchema.js");
13
+ Object.defineProperty(exports, "isStyleTheme", { enumerable: true, get: function () { return styleThemeSchema_js_1.isStyleTheme; } });
14
+ Object.defineProperty(exports, "parseStyleTheme", { enumerable: true, get: function () { return styleThemeSchema_js_1.parseStyleTheme; } });
15
+ Object.defineProperty(exports, "styleThemeSchema", { enumerable: true, get: function () { return styleThemeSchema_js_1.styleThemeSchema; } });
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.styleThemeSchema = void 0;
4
+ exports.parseStyleTheme = parseStyleTheme;
5
+ exports.isStyleTheme = isStyleTheme;
6
+ const zod_1 = require("zod");
7
+ const default_js_1 = require("./presets/default.js");
8
+ function buildSchemaFromPreset(preset) {
9
+ const build = (value) => {
10
+ if (typeof value === "string") {
11
+ return zod_1.z.string();
12
+ }
13
+ if (value && typeof value === "object" && !Array.isArray(value)) {
14
+ const shape = {};
15
+ Object.entries(value).forEach(([key, child]) => {
16
+ shape[key] = build(child);
17
+ });
18
+ return zod_1.z.object(shape).strict();
19
+ }
20
+ throw new Error("Invalid style theme preset shape.");
21
+ };
22
+ return build(preset);
23
+ }
24
+ exports.styleThemeSchema = buildSchemaFromPreset(default_js_1.defaultTheme);
25
+ function parseStyleTheme(theme) {
26
+ const result = exports.styleThemeSchema.safeParse(theme);
27
+ if (!result.success) {
28
+ throw new Error(`Invalid style theme provided. ${result.error.issues
29
+ .map((issue) => `${issue.path.join(".") || "theme"}: ${issue.message}`)
30
+ .join("; ")}`);
31
+ }
32
+ return result.data;
33
+ }
34
+ function isStyleTheme(theme) {
35
+ return exports.styleThemeSchema.safeParse(theme).success;
36
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.downloadTextFile = exports.copyToClipboard = exports.getResponsiveWidth = exports.validateScale = exports.isValidYouTubeId = exports.isValidImageUrl = exports.isValidColor = exports.isMobileDevice = exports.createLogger = exports.formatTime = exports.createTimeout = exports.pathExists = exports.resolveAgainstProjectRoot = exports.resolveDataPath = exports.getFileExtension = exports.normalizeSystemPath = exports.normalizeBaseUrlPath = exports.processListItems = exports.withBasePath = exports.extractYouTubeId = exports.sanitizeFilename = exports.slugify = void 0;
4
+ // string
5
+ var slugify_js_1 = require("./string/slugify.js");
6
+ Object.defineProperty(exports, "slugify", { enumerable: true, get: function () { return slugify_js_1.slugify; } });
7
+ var sanitizeFilename_js_1 = require("./string/sanitizeFilename.js");
8
+ Object.defineProperty(exports, "sanitizeFilename", { enumerable: true, get: function () { return sanitizeFilename_js_1.sanitizeFilename; } });
9
+ var extractYouTubeId_js_1 = require("./string/extractYouTubeId.js");
10
+ Object.defineProperty(exports, "extractYouTubeId", { enumerable: true, get: function () { return extractYouTubeId_js_1.extractYouTubeId; } });
11
+ var withBasePath_js_1 = require("./string/withBasePath.js");
12
+ Object.defineProperty(exports, "withBasePath", { enumerable: true, get: function () { return withBasePath_js_1.withBasePath; } });
13
+ var processListItems_js_1 = require("./string/processListItems.js");
14
+ Object.defineProperty(exports, "processListItems", { enumerable: true, get: function () { return processListItems_js_1.processListItems; } });
15
+ var normalizeBaseUrlPath_js_1 = require("./string/normalizeBaseUrlPath.js");
16
+ Object.defineProperty(exports, "normalizeBaseUrlPath", { enumerable: true, get: function () { return normalizeBaseUrlPath_js_1.normalizeBaseUrlPath; } });
17
+ var normalizeSystemPath_js_1 = require("./string/normalizeSystemPath.js");
18
+ Object.defineProperty(exports, "normalizeSystemPath", { enumerable: true, get: function () { return normalizeSystemPath_js_1.normalizeSystemPath; } });
19
+ // file
20
+ var getFileExtension_js_1 = require("./file/getFileExtension.js");
21
+ Object.defineProperty(exports, "getFileExtension", { enumerable: true, get: function () { return getFileExtension_js_1.getFileExtension; } });
22
+ //path
23
+ var resolveDataPath_browser_js_1 = require("./path/resolveDataPath.browser.js");
24
+ Object.defineProperty(exports, "resolveDataPath", { enumerable: true, get: function () { return resolveDataPath_browser_js_1.resolveDataPath; } });
25
+ var resolveAgainstProjectRoot_browser_js_1 = require("./path/resolveAgainstProjectRoot.browser.js");
26
+ Object.defineProperty(exports, "resolveAgainstProjectRoot", { enumerable: true, get: function () { return resolveAgainstProjectRoot_browser_js_1.resolveAgainstProjectRoot; } });
27
+ var pathExists_browser_js_1 = require("./path/pathExists.browser.js");
28
+ Object.defineProperty(exports, "pathExists", { enumerable: true, get: function () { return pathExists_browser_js_1.pathExists; } });
29
+ // system
30
+ var createTimeout_js_1 = require("./system/createTimeout.js");
31
+ Object.defineProperty(exports, "createTimeout", { enumerable: true, get: function () { return createTimeout_js_1.createTimeout; } });
32
+ var formatTime_js_1 = require("./system/formatTime.js");
33
+ Object.defineProperty(exports, "formatTime", { enumerable: true, get: function () { return formatTime_js_1.formatTime; } });
34
+ var logger_browser_js_1 = require("./system/logger.browser.js");
35
+ Object.defineProperty(exports, "createLogger", { enumerable: true, get: function () { return logger_browser_js_1.createLogger; } });
36
+ // validation
37
+ var isMobileDevice_js_1 = require("./validation/isMobileDevice.js");
38
+ Object.defineProperty(exports, "isMobileDevice", { enumerable: true, get: function () { return isMobileDevice_js_1.isMobileDevice; } });
39
+ var isValidColor_js_1 = require("./validation/isValidColor.js");
40
+ Object.defineProperty(exports, "isValidColor", { enumerable: true, get: function () { return isValidColor_js_1.isValidColor; } });
41
+ var isValidImageUrl_js_1 = require("./validation/isValidImageUrl.js");
42
+ Object.defineProperty(exports, "isValidImageUrl", { enumerable: true, get: function () { return isValidImageUrl_js_1.isValidImageUrl; } });
43
+ var isValidYouTubeId_js_1 = require("./validation/isValidYouTubeId.js");
44
+ Object.defineProperty(exports, "isValidYouTubeId", { enumerable: true, get: function () { return isValidYouTubeId_js_1.isValidYouTubeId; } });
45
+ var validateScale_js_1 = require("./validation/validateScale.js");
46
+ Object.defineProperty(exports, "validateScale", { enumerable: true, get: function () { return validateScale_js_1.validateScale; } });
47
+ // dom
48
+ var getResponsiveWidth_js_1 = require("./dom/getResponsiveWidth.js");
49
+ Object.defineProperty(exports, "getResponsiveWidth", { enumerable: true, get: function () { return getResponsiveWidth_js_1.getResponsiveWidth; } });
50
+ var copyToClipboard_js_1 = require("./dom/copyToClipboard.js");
51
+ Object.defineProperty(exports, "copyToClipboard", { enumerable: true, get: function () { return copyToClipboard_js_1.copyToClipboard; } });
52
+ var downloadTextFile_js_1 = require("./dom/downloadTextFile.js");
53
+ Object.defineProperty(exports, "downloadTextFile", { enumerable: true, get: function () { return downloadTextFile_js_1.downloadTextFile; } });
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.pathExists = pathExists;
4
+ async function pathExists(_pathLike) {
5
+ throw new Error("pathExists is only available in a Node.js environment.");
6
+ }
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.pathExists = pathExists;
4
- const promises_1 = require("node:fs/promises");
5
4
  const node_fs_1 = require("node:fs");
5
+ const promises_1 = require("node:fs/promises");
6
6
  async function pathExists(pathLike) {
7
7
  try {
8
8
  await (0, promises_1.access)(pathLike, node_fs_1.constants.F_OK);
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveAgainstProjectRoot = resolveAgainstProjectRoot;
4
+ function resolveAgainstProjectRoot(candidate) {
5
+ throw new Error(`resolveAgainstProjectRoot("${candidate}") is only available in Node.js where project roots can be resolved.`);
6
+ }
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveDataPath = resolveDataPath;
4
+ function resolveDataPath(_input) {
5
+ throw new Error("resolveDataPath is only available in a Node.js environment.");
6
+ }
@@ -5,8 +5,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.resolveDataPath = resolveDataPath;
7
7
  const node_path_1 = __importDefault(require("node:path"));
8
- const resolveAgainstProjectRoot_js_1 = require("./resolveAgainstProjectRoot.js");
9
8
  const normalizeSystemPath_js_1 = require("../string/normalizeSystemPath.js");
9
+ const resolveAgainstProjectRoot_js_1 = require("./resolveAgainstProjectRoot.js");
10
10
  function resolveDataPath(input) {
11
11
  const argv = process.argv.slice(2);
12
12
  const i = argv.indexOf("--fsDataPath");