@t8/docsgen 0.3.34 → 0.3.36

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.
package/dist/bin.js CHANGED
@@ -116,18 +116,23 @@ var import_args_json = __toESM(require_dist(), 1);
116
116
 
117
117
  // src/bin/fetchContent.ts
118
118
  import { readFile } from "node:fs/promises";
119
+ var cachedContent = /* @__PURE__ */ new Map();
119
120
  async function fetchContent(location) {
120
121
  if (!location) return "";
122
+ let content = cachedContent.get(location);
123
+ if (content !== void 0) return content;
121
124
  if (/^https?:\/\//.test(location)) {
122
125
  try {
123
- return await (await fetch(location, { cache: "no-cache" })).text();
126
+ content = await (await fetch(location, { cache: "no-cache" })).text();
124
127
  } catch {
125
128
  console.warn(`Failed to fetch content from '${location}'`);
126
- return "";
127
129
  }
130
+ } else {
131
+ let locationPath = location.replace(/^\//, "");
132
+ content = (await readFile(locationPath)).toString();
128
133
  }
129
- let locationPath = location.replace(/^\//, "");
130
- return (await readFile(locationPath)).toString();
134
+ cachedContent.set(location, content ??= "");
135
+ return content;
131
136
  }
132
137
 
133
138
  // src/bin/getLocation.ts
@@ -573,6 +578,7 @@ var exec = promisify(defaultExec);
573
578
  var __filename = fileURLToPath(import.meta.url);
574
579
  var __dirname = dirname(__filename);
575
580
  var packageURL = "";
581
+ var packageVersionRequest = null;
576
582
  async function getCSSRoot(ctx, type) {
577
583
  let { dir = "", assetsDir } = ctx;
578
584
  let cssRoot = {
@@ -588,7 +594,8 @@ async function getCSSRoot(ctx, type) {
588
594
  });
589
595
  } else {
590
596
  if (!packageURL) {
591
- let packageVersion = (await exec(`npm view ${packageName} version`)).stdout.trim().split(".").slice(0, 2).join(".");
597
+ packageVersionRequest ??= exec(`npm view ${packageName} version`);
598
+ let packageVersion = (await packageVersionRequest).stdout.trim().split(".").slice(0, 2).join(".");
592
599
  packageURL = `https://unpkg.com/${packageName}@${packageVersion}`;
593
600
  }
594
601
  cssRoot.index = `${packageURL}/dist/css`;
@@ -801,33 +808,9 @@ function getNpmLink({ npm }, className) {
801
808
  }
802
809
 
803
810
  // src/bin/content/getNav.ts
804
- var cachedNavContent = /* @__PURE__ */ new Map();
805
- async function getNavContent({ name, nav }) {
806
- if (!nav) return "";
807
- let navContent = cachedNavContent.get(nav);
808
- if (navContent !== void 0) return navContent;
809
- navContent = await fetchContent(nav);
810
- if (navContent) {
811
- let navDom = new JSDOM3(navContent).window.document.body;
812
- for (let link of navDom.querySelectorAll("a")) {
813
- if (link.dataset.name === name) {
814
- let parent = link.parentElement;
815
- link.remove();
816
- while (parent && parent.innerHTML.trim() === "") {
817
- let nextParent = parent.parentElement;
818
- parent.remove();
819
- parent = nextParent;
820
- }
821
- }
822
- }
823
- navContent = navDom.innerHTML;
824
- }
825
- cachedNavContent.set(nav, navContent);
826
- return navContent;
827
- }
828
811
  async function getNav(ctx, navItems) {
829
- let { name, root, contentDir, backstory } = ctx;
830
- let navContent = await getNavContent(ctx);
812
+ let { name, root, contentDir, backstory, nav } = ctx;
813
+ let navContent = await fetchContent(nav);
831
814
  let s = "";
832
815
  if (navContent) {
833
816
  let navDom = new JSDOM3(navContent).window.document.body;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@t8/docsgen",
3
- "version": "0.3.34",
3
+ "version": "0.3.36",
4
4
  "description": "",
5
5
  "main": "dist/bin.js",
6
6
  "type": "module",
@@ -12,6 +12,7 @@ const __filename = fileURLToPath(import.meta.url);
12
12
  const __dirname = dirname(__filename);
13
13
 
14
14
  let packageURL = "";
15
+ let packageVersionRequest: Promise<{ stdout: string }> | null = null;
15
16
 
16
17
  export async function getCSSRoot(ctx: Context, type: "index" | "content") {
17
18
  let { dir = "", assetsDir } = ctx;
@@ -31,9 +32,9 @@ export async function getCSSRoot(ctx: Context, type: "index" | "content") {
31
32
  });
32
33
  } else {
33
34
  if (!packageURL) {
34
- let packageVersion = (
35
- await exec(`npm view ${packageName} version`)
36
- ).stdout
35
+ packageVersionRequest ??= exec(`npm view ${packageName} version`);
36
+
37
+ let packageVersion = (await packageVersionRequest).stdout
37
38
  .trim()
38
39
  .split(".")
39
40
  .slice(0, 2)
@@ -5,46 +5,9 @@ import { fetchContent } from "../fetchContent.ts";
5
5
  import { getNpmLink } from "../getNpmLink.ts";
6
6
  import { getRepoLink } from "../getRepoLink.ts";
7
7
 
8
- let cachedNavContent = new Map<string, string>();
9
-
10
- async function getNavContent({ name, nav }: Context) {
11
- if (!nav) return "";
12
-
13
- let navContent = cachedNavContent.get(nav);
14
-
15
- if (navContent !== undefined) return navContent;
16
-
17
- navContent = await fetchContent(nav);
18
-
19
- if (navContent) {
20
- let navDom = new JSDOM(navContent).window.document.body;
21
-
22
- for (let link of navDom.querySelectorAll("a")) {
23
- if (link.dataset.name === name) {
24
- let parent = link.parentElement;
25
-
26
- link.remove();
27
-
28
- while (parent && parent.innerHTML.trim() === "") {
29
- let nextParent = parent.parentElement;
30
-
31
- parent.remove();
32
- parent = nextParent;
33
- }
34
- }
35
- }
36
-
37
- navContent = navDom.innerHTML;
38
- }
39
-
40
- cachedNavContent.set(nav, navContent);
41
-
42
- return navContent;
43
- }
44
-
45
8
  export async function getNav(ctx: Context, navItems: NavItem[]) {
46
- let { name, root, contentDir, backstory } = ctx;
47
- let navContent = await getNavContent(ctx);
9
+ let { name, root, contentDir, backstory, nav } = ctx;
10
+ let navContent = await fetchContent(nav);
48
11
  let s = "";
49
12
 
50
13
  if (navContent) {
@@ -1,18 +1,27 @@
1
1
  import { readFile } from "node:fs/promises";
2
2
 
3
+ let cachedContent = new Map<string, string>();
4
+
3
5
  export async function fetchContent(location: string | undefined) {
4
6
  if (!location) return "";
5
7
 
8
+ let content = cachedContent.get(location);
9
+
10
+ if (content !== undefined) return content;
11
+
6
12
  if (/^https?:\/\//.test(location)) {
7
13
  try {
8
- return await (await fetch(location, { cache: "no-cache" })).text();
14
+ content = await (await fetch(location, { cache: "no-cache" })).text();
9
15
  } catch {
10
16
  console.warn(`Failed to fetch content from '${location}'`);
11
- return "";
12
17
  }
18
+ } else {
19
+ let locationPath = location.replace(/^\//, "");
20
+
21
+ content = (await readFile(locationPath)).toString();
13
22
  }
14
23
 
15
- let locationPath = location.replace(/^\//, "");
24
+ cachedContent.set(location, (content ??= ""));
16
25
 
17
- return (await readFile(locationPath)).toString();
26
+ return content;
18
27
  }