MCPcopy Create free account
hub / github.com/Superflows-AI/superflows / getDocsLoader

Function getDocsLoader

lib/embed-docs/embedDocs.ts:123–223  ·  view source on GitHub ↗
(
  url: string,
  isDocusaurus: boolean,
)

Source from the content-addressed store, hash-verified

121}
122
123export function getDocsLoader(
124 url: string,
125 isDocusaurus: boolean,
126): PlaywrightWebBaseLoader {
127 return new PlaywrightWebBaseLoader(url, {
128 launchOptions: { headless: true },
129 gotoOptions: { waitUntil: "domcontentloaded" },
130 evaluate: isDocusaurus
131 ? async function (page: Page, browser: Browser) {
132 await page.waitForLoadState("domcontentloaded");
133 await new Promise((resolve) => setTimeout(resolve, 10000));
134 let out = "";
135 while (!out) {
136 await new Promise((resolve) => setTimeout(resolve, 1000));
137 console.log("Attempting to get HTML");
138 out = await page.evaluate(() => {
139 function removeFromHtml(node: HTMLBodyElement, tags: string[]) {
140 for (const tag of tags) {
141 let elements = node.getElementsByTagName(tag);
142 while (elements.length) {
143 if (!elements[0]) break;
144 elements[0].parentNode?.removeChild(elements[0]);
145 elements = node.getElementsByTagName(tag);
146 }
147 }
148 return node;
149 }
150
151 let clone = document.body.cloneNode(true) as HTMLBodyElement;
152 if (!clone) return "";
153 const mains = clone.getElementsByTagName("main");
154 const main = mains[mains.length - 1];
155 // @ts-ignore
156 if (main) clone = main;
157 // In Docusaurus, the title is <page name> | <site name>
158 const title = document.title.split("|")[0];
159
160 clone = removeFromHtml(clone, [
161 "script",
162 "aside",
163 "button",
164 "header",
165 "nav",
166 "footer",
167 "style",
168 "noscript",
169 ]);
170 // In Docusaurus, the table of contents can be picked up if we don't smite it
171 clone.getElementsByClassName("table-of-contents")[0]?.remove();
172
173 return `<title>${title}</title>${clone.innerHTML}`;
174 });
175 }
176 return out;
177 }
178 : async function (page: Page, browser: Browser) {
179 await page.waitForLoadState("domcontentloaded");
180 await new Promise((resolve) => setTimeout(resolve, 10000));

Callers 1

embedDocsFromUrlFunction · 0.85

Calls 1

removeFromHtmlFunction · 0.85

Tested by

no test coverage detected