vis-dev-utils 5.0.2 → 5.0.4

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.
@@ -6,8 +6,8 @@
6
6
  *
7
7
  * Development utilities for the Vis family projects.
8
8
  *
9
- * @version 5.0.2
10
- * @date 2025-07-19T14:03:21.252Z
9
+ * @version 5.0.4
10
+ * @date 2025-08-01T18:59:42.551Z
11
11
  *
12
12
  * @copyright (c) 2011-2017 Almende B.V, http://almende.com
13
13
  * @copyright (c) 2017-2019 visjs contributors, https://github.com/visjs
@@ -6,8 +6,8 @@
6
6
  *
7
7
  * Development utilities for the Vis family projects.
8
8
  *
9
- * @version 5.0.2
10
- * @date 2025-07-19T14:03:21.252Z
9
+ * @version 5.0.4
10
+ * @date 2025-08-01T18:59:42.551Z
11
11
  *
12
12
  * @copyright (c) 2011-2017 Almende B.V, http://almende.com
13
13
  * @copyright (c) 2017-2019 visjs contributors, https://github.com/visjs
package/bin/ci-utils.js CHANGED
@@ -6,8 +6,8 @@
6
6
  *
7
7
  * Development utilities for the Vis family projects.
8
8
  *
9
- * @version 5.0.2
10
- * @date 2025-07-19T14:03:21.252Z
9
+ * @version 5.0.4
10
+ * @date 2025-08-01T18:59:42.551Z
11
11
  *
12
12
  * @copyright (c) 2011-2017 Almende B.V, http://almende.com
13
13
  * @copyright (c) 2017-2019 visjs contributors, https://github.com/visjs
@@ -6,8 +6,8 @@
6
6
  *
7
7
  * Development utilities for the Vis family projects.
8
8
  *
9
- * @version 5.0.2
10
- * @date 2025-07-19T14:03:21.252Z
9
+ * @version 5.0.4
10
+ * @date 2025-08-01T18:59:42.551Z
11
11
  *
12
12
  * @copyright (c) 2011-2017 Almende B.V, http://almende.com
13
13
  * @copyright (c) 2017-2019 visjs contributors, https://github.com/visjs
@@ -887,7 +887,7 @@ function lintExample(path, page) {
887
887
  const stats = { examples: 0 };
888
888
  const skipped = [];
889
889
  await Promise.all(
890
- (await (await import('globby')).globby(join(pathsConfig.page.local, "**/*.html"))).map(async (pagePath) => {
890
+ (await (await import('globby')).globby(posix.join(pathsConfig.page.local, "**/*.html"))).map(async (pagePath) => {
891
891
  const html = await readFile(pagePath, "utf-8");
892
892
  const $page = cheerio.load(html);
893
893
  const pageDelay = getMeta(
@@ -1 +1 @@
1
- {"version":3,"file":"generate-examples-index.js","sources":["../src/generate-examples-index/content-builder/common.ts","../src/generate-examples-index/content-builder/format.ts","../src/generate-examples-index/content-builder/playground/codepen.template.html","../src/generate-examples-index/content-builder/playground/codepen.ts","../src/generate-examples-index/content-builder/playground/data.ts","../src/generate-examples-index/content-builder/playground/jsfiddle.template.html","../src/generate-examples-index/content-builder/playground/jsfiddle.ts","../src/generate-examples-index/content-builder/screenshots/screenshot-script.js.txt","../src/generate-examples-index/content-builder/screenshots/index.ts","../src/generate-examples-index/content-builder/builder.ts","../src/generate-examples-index/content-builder/html/index.template.html","../src/generate-examples-index/content-builder/html/index.template.css","../src/generate-examples-index/content-builder/html/index.ts","../src/generate-examples-index/content-builder/md/index.ts","../src/generate-examples-index/cli.ts","../src/generate-examples-index/paths.ts","../src/generate-examples-index/index.ts"],"sourcesContent":["import { Example, Examples, ExamplesRoot } from \"../types\";\n\nexport interface ContentPart {\n content: string;\n filename: string;\n title: string;\n}\n\nexport interface Renderer {\n render(\n examples: ExamplesRoot,\n output: string,\n title: string,\n collator: Intl.Collator,\n ): Promise<ContentPart[]>;\n screenshot: {\n width: number;\n height: number;\n };\n}\n\n/**\n * @param value\n */\nexport function isExample(\n value: Example | Examples | ExamplesRoot,\n): value is Example {\n return (\n typeof value === \"object\" &&\n value !== null &&\n typeof value.path === \"string\"\n );\n}\n\nexport interface StartStopMs {\n start: number;\n stop: number;\n}\n/**\n *\n */\nexport function measureStartStopMs(): () => StartStopMs {\n const start = Date.now();\n return (): StartStopMs => {\n const stop = Date.now();\n\n return { start, stop };\n };\n}\n\nexport interface Report {\n count: number;\n result: \"fulfilled\" | \"rejected\";\n start: number;\n stop: number;\n}\n/**\n * @param reports\n * @param fallback\n */\nexport function reduceReports(\n reports: readonly Report[],\n fallback: Report = {\n count: 0,\n result: \"fulfilled\",\n start: -1,\n stop: -1,\n },\n): Report {\n return (\n reports.reduce<Report | null>((acc, val): Report | null => {\n return {\n count: (acc?.count ?? 0) + (val?.count ?? 0),\n result: [acc?.result ?? \"fulfilled\", val.result].every(\n (result): boolean => result === \"fulfilled\",\n )\n ? \"fulfilled\"\n : \"rejected\",\n start: Math.min(acc?.start ?? Number.POSITIVE_INFINITY, val.start),\n stop: Math.max(acc?.stop ?? Number.NEGATIVE_INFINITY, val.stop),\n };\n }, null) ?? fallback\n );\n}\n\n/**\n * @param ms\n */\nexport function formatMs(ms: number): string {\n return `${(Math.round(ms / 100) / 10).toFixed(1)}s`;\n}\n/**\n * @param root0\n * @param root0.start\n * @param root0.stop\n */\nexport function formatStartStopMs({ start, stop }: StartStopMs): string {\n return `${(Math.round((stop - start) / 100) / 10).toFixed(1)}s`;\n}\n","import prettier from \"prettier\";\n\nexport const formatCSS = (css: string | null | undefined): Promise<string> =>\n prettier.format(css || \"\", { filepath: \"style.css\" });\nexport const formatHTML = (html: string | null | undefined): Promise<string> =>\n prettier.format(html || \"\", { filepath: \"index.html\" });\nexport const formatJS = (js: string | null | undefined): Promise<string> =>\n prettier.format(js || \"\", { filepath: \"script.js\" });\nexport const formatMD = (md: string | null | undefined): Promise<string> =>\n prettier.format(md || \"\", { filepath: \"README.md\" });\n","<html>\n <head>\n <meta charset=\"utf-8\" />\n <title>CodePen</title>\n </head>\n <body>\n <form\n id=\"form\"\n action=\"https://codepen.io/pen/define\"\n method=\"post\"\n target=\"_self\"\n >\n <input type=\"hidden\" name=\"data\" />\n <button id=\"open\" alt=\"JSFiddle\" title=\"JSFiddle\">Open CodePen</button>\n </form>\n\n <script type=\"text/javascript\">\n document.getElementById(\"open\").click();\n </script>\n </body>\n</html>\n","import * as cheerioheerio from \"cheerio\";\n\nimport template from \"./codepen.template.html\";\nimport { Example } from \"../../types\";\n\n/**\n * @param example\n */\nexport function generateCodePenPage(example: Example): string {\n const data = example.playground;\n const title = example.titles.join(\" | \");\n\n const page = cheerioheerio.load(template);\n page(\"title\").text(title);\n const form = page(\"#form\");\n\n form.find('input[name=\"data\"]').attr(\n \"value\",\n JSON.stringify({\n css: data.code.css,\n css_external: data.resources.css.join(\";\"),\n html: data.code.html,\n js: data.code.js,\n js_external: data.resources.js.join(\";\"),\n title: example.titles.join(\" | \"),\n }),\n );\n\n return page.html();\n}\n","import * as cheerio from \"cheerio\";\nimport { Text } from \"domhandler\";\nimport { dirname, relative, resolve } from \"path\";\n\nimport { Example, PlaygroundData } from \"../../types\";\nimport { formatCSS, formatHTML, formatJS } from \"../format\";\n\n/**\n * @param baseURL\n * @param example$\n * @param examplePath\n */\nexport async function generatePlaygroundData(\n baseURL: string,\n example$: Example[\"$\"],\n examplePath: Example[\"path\"],\n): Promise<PlaygroundData> {\n const firstBodyChild = example$(\"body\").get(0);\n if (firstBodyChild == null) {\n throw new Error(\"Example body has no children.\");\n }\n\n // JavaScript\n const eventListeners = Object.entries(firstBodyChild.attribs)\n .filter(([name]): boolean => /^on/.test(name))\n .map(([name, value]): [string, string] => [name.slice(2), `${value}`])\n .map(\n ([name, value]): string =>\n `window.addEventListener(\"${name}\", () => { ${value} });`,\n )\n .join(\"\\n\");\n const js = formatJS(\n example$(\"script\")\n .map((_i, elem) => elem.children[0] as Text)\n .get()\n .map((elem): string => elem.data)\n .join(\"\") +\n \"\\n\\n;\" +\n eventListeners,\n );\n\n // Cascading Style Sheets\n const css = formatCSS(\n example$(\"style\")\n .map((_i, elem) => elem.children[0] as Text)\n .get()\n .map((elem): string => elem.data)\n .join(\"\"),\n );\n\n // Hypertext Markup Language\n const $html = cheerio.load(example$(\"body\").html() || \"\");\n $html(\"script\").remove();\n\n const html = formatHTML($html(\"body\").html());\n\n // Resources\n const fixPath = (rawPath: string): string =>\n /^https?:\\/\\//.test(rawPath)\n ? // World wide web absolute.\n rawPath\n : /^\\//.test(rawPath)\n ? // Domain absolute.\n baseURL + rawPath.slice(1)\n : //Relative.\n baseURL +\n relative(process.cwd(), resolve(dirname(examplePath), rawPath));\n\n const resources = {\n js: example$(\"script\")\n .map((_i, elem): undefined | string =>\n cheerio.load(elem)(\"script\").attr(\"src\"),\n )\n .get()\n .filter((src): src is string => typeof src === \"string\")\n .map(fixPath),\n css: example$(\"link[rel='stylesheet']\")\n .map((_i, elem): undefined | string =>\n cheerio.load(elem)(\"script\").attr(\"href\"),\n )\n .get()\n .filter((href): href is string => typeof href === \"string\")\n .map(fixPath),\n };\n\n return {\n code: {\n css: await css,\n html: await html,\n js: await js,\n },\n resources,\n };\n}\n","<html>\n <head>\n <meta charset=\"utf-8\" />\n <title>JSFiddle</title>\n </head>\n <body>\n <form\n id=\"form\"\n action=\"https://jsfiddle.net/api/post/library/pure/\"\n method=\"post\"\n target=\"_self\"\n >\n <input type=\"hidden\" name=\"css\" />\n <input type=\"hidden\" name=\"html\" />\n <input type=\"hidden\" name=\"js\" />\n <input type=\"hidden\" name=\"resources\" />\n <input type=\"hidden\" name=\"title\" />\n <input type=\"hidden\" name=\"wrap\" />\n <button id=\"open\" alt=\"JSFiddle\" title=\"JSFiddle\">Open JSFiddle</button>\n </form>\n\n <script type=\"text/javascript\">\n document.getElementById(\"open\").click();\n </script>\n </body>\n</html>\n","import * as cheerio from \"cheerio\";\n\nimport template from \"./jsfiddle.template.html\";\nimport { Example } from \"../../types\";\n\n/**\n * @param example\n */\nexport function generateJSFiddlePage(example: Example): string {\n const data = example.playground;\n const title = example.titles.join(\" | \");\n const resources = [...data.resources.css, ...data.resources.js].join(\",\");\n\n const page = cheerio.load(template);\n page(\"title\").text(title);\n const form = page(\"#form\");\n\n // Playground data.\n form.find('input[name=\"css\"]').attr(\"value\", data.code.css);\n form.find('input[name=\"html\"]').attr(\"value\", data.code.html);\n form.find('input[name=\"js\"]').attr(\"value\", data.code.js);\n form.find('input[name=\"resources\"]').attr(\"value\", resources);\n form.find('input[name=\"title\"]').attr(\"value\", title);\n\n // Don't run JS before the DOM is ready.\n form.find('input[name=\"wrap\"]').attr(\"value\", \"b\");\n\n return page.html();\n}\n","/* global window: false */\n\n/**\n * Simulates confirmation usind window.confirm and window.alert otherwise the\n * screenshot generator would just hang forever.\n */\nwindow.realAlert = window.alert;\nwindow.alert = function () {};\nwindow.confirm = function () {\n return true;\n};\n\n/**\n * Wait for the page to report it's ready to take a screenshot.\n */\nwindow.readyToTakeAScreenshot = new Promise(function (resolve) {\n window.takeScreenshot = resolve;\n});\n","import * as cheerio from \"cheerio\";\nimport { Jimp } from \"jimp\";\nimport { Browser } from \"puppeteer\";\nimport commonScreenshotScript from \"./screenshot-script.js.txt\";\nimport fs from \"fs\";\nimport { basename, dirname, posix, resolve, sep } from \"path\";\nimport { promisify } from \"util\";\n\nimport { Example } from \"../../types\";\nimport { formatHTML } from \"../format\";\n\nconst unlink = promisify(fs.unlink);\nconst writeFile = promisify(fs.writeFile);\n\n/**\n * Check if the screenshot is valid. At the moment this simply considers\n * everything except for solid color images as valid. This works pretty well\n * though may yield some false positives.\n * @param screenshot - The binary data of the screenshot.\n * @returns True for valid and false for invalid.\n */\nasync function isScreenshotValid(screenshot: Buffer): Promise<boolean> {\n const image = await Jimp.read(screenshot);\n const firstPixel = image.getPixelColor(0, 0);\n\n for (let x = 0; x < image.width; ++x) {\n for (let y = 0; y < image.height; ++y) {\n if (firstPixel !== image.getPixelColor(x, y)) {\n return true;\n }\n }\n }\n\n return false;\n}\n\nexport interface GenerateScreenshotConfig {\n /**\n * Leave the contexts and tabs open for inspection, also don't delete the\n * temporary pages.\n */\n debug: boolean;\n /** The example for which the screenshot will be generated. */\n example: Example;\n /** Height of the captured screenshot. */\n height: number;\n /** A script to be executed as the first thing on the page. */\n screenshotScript: string;\n /** Width of the captured screenshot. */\n width: number;\n}\n\n/**\n * Capture an element on the example's page and save the screenshot to the\n * disk as a PNG file.\n * @param browser - Puppeteer's browser instance.\n * @param config - See the type's docs for detail.\n * @returns Whether or not the screenshot passed validation check.\n */\nexport async function generateScreenshot(\n browser: Browser,\n config: GenerateScreenshotConfig,\n): Promise<boolean> {\n const { debug, example, height, screenshotScript, width } = config;\n\n const cleanup: (() => void | Promise<void>)[] = [];\n\n try {\n // Prepare the page. It has to be written to the disk so that files with\n // relative URLs can be loaded.\n const tmpPath = resolve(\n dirname(example.paths.page.local),\n \".tmp.example.screenshot.\" + basename(example.paths.page.local),\n );\n const screenshotPage = cheerio.load(example.html);\n screenshotPage(\"head\").prepend(\n cheerio\n .load([])(\"<script>\")\n .attr(\"type\", \"text/javascript\")\n .text(`window.DEBUG = ${true};`),\n cheerio\n .load([])(\"<script>\")\n .attr(\"type\", \"text/javascript\")\n .text(commonScreenshotScript),\n cheerio\n .load([])(\"<script>\")\n .attr(\"type\", \"text/javascript\")\n .text(screenshotScript),\n cheerio\n .load([])(\"<style>\")\n .attr(\"type\", \"text/css\")\n .text(\n [\n `${example.selector} {`,\n \" border: none !important;\",\n \"\",\n ` min-width: ${width}px !important;`,\n ` min-height: ${height}px !important;`,\n ` width: ${width}px !important;`,\n ` height: ${height}px !important;`,\n ` max-width: ${width}px !important;`,\n ` max-height: ${height}px !important;`,\n \"}\",\n ].join(\"\\n\"),\n ),\n );\n await writeFile(tmpPath, await formatHTML(screenshotPage.html()));\n if (!debug) {\n cleanup.push((): Promise<void> => unlink(tmpPath));\n }\n\n const context = await browser.createBrowserContext();\n if (!debug) {\n cleanup.push((): Promise<void> => context.close());\n }\n\n const page = await context.newPage();\n if (!debug) {\n cleanup.push((): Promise<void> => page.close());\n }\n\n await page.setViewport({ width: width + 50, height: height + 50 });\n await page.goto(\"file://\" + tmpPath.split(sep).join(posix.sep));\n\n await page.waitForSelector(example.selector, {\n visible: true,\n timeout: example.timeout * 1000,\n });\n\n const { delay } = example;\n if (delay === \"call\") {\n await page.evaluate(\n \"function fn() { return window.readyToTakeAScreenshot; }\",\n );\n } else {\n await new Promise(\n (resolve): void => void setTimeout(resolve, delay * 1000),\n );\n }\n\n const $element = await page.$(example.selector);\n if ($element == null) {\n throw new Error(\n `Element \"${example.selector}\" not found in ${example.path}.`,\n );\n }\n\n await $element.evaluate((element: Element): void => {\n element.scrollIntoView();\n });\n\n const screenshot = await $element.screenshot({\n encoding: \"binary\",\n });\n\n if (screenshot == null) {\n throw new Error(`Failed to take screenshot of “${example.paths.page}”`);\n } else if (typeof screenshot === \"string\") {\n // AFAIK this should never happen, it's just a problem with the types\n // always returning Buffer | string even when encoding is set to binary\n // (i.e. buffer).\n throw new Error(\n `Failed to get the binary data of the screenshot of “${example.paths.page}”`,\n );\n }\n\n await writeFile(example.paths.screenshot.local, screenshot);\n\n // Return the validity of the generated screenshot.\n return isScreenshotValid(Buffer.from(screenshot));\n } catch (error) {\n console.error(error);\n return false;\n } finally {\n for (const callback of cleanup.splice(0).reverse()) {\n try {\n await callback();\n } catch (error) {\n console.error(error);\n }\n }\n }\n}\n","import fs from \"fs\";\nimport { join } from \"path\";\nimport { promisify } from \"util\";\nimport puppeteer from \"puppeteer\";\n\nimport { Example, Examples, ExamplesRoot } from \"../types\";\nimport {\n Renderer,\n Report,\n formatStartStopMs,\n isExample,\n measureStartStopMs,\n} from \"./common\";\nimport { formatHTML } from \"./format\";\nimport { generateJSFiddlePage, generateCodePenPage } from \"./playground\";\nimport { generateScreenshot } from \"./screenshots\";\n\nconst collator = new Intl.Collator(\"US\");\nconst writeFile = promisify(fs.writeFile);\n\nexport type IndexReport = Report;\nexport interface ExampleReport extends Report {\n example: Example;\n}\n\nexport interface Checks {\n fail: number;\n failPaths: string[];\n okay: number;\n okayPaths: string[];\n percentage: number;\n total: number;\n}\n\nexport interface ContentBuilderConfig {\n /** The tree structure with examples in it's leaves. */\n examples: ExamplesRoot;\n /** The directory where built files will be saved. */\n output: string;\n /** How many screenshots to generate at the same time. */\n parallel: number;\n /** The renderer used to generate index files. */\n renderer: Renderer;\n /** A script that will be executed on each page as first. */\n screenshotScript: string;\n /** A title that will be passed to the renderer. */\n title: string;\n}\n\nexport interface ContentBuilderRet {\n checks: Promise<Checks>;\n index: Promise<IndexReport[]>;\n playgrounds: Promise<ExampleReport[]>;\n screenshots: Promise<ExampleReport[]>;\n}\n\nexport class ContentBuilder {\n public constructor(private readonly _config: ContentBuilderConfig) {}\n\n /**\n * Build the files and write them to the disk.\n * @param emit - Which types of files to emit.\n * @param emit.index\n * @param emit.playgrounds\n * @param emit.screenshots\n * @returns A report with check results and the number of written files.\n */\n public build(\n emit: {\n index?: boolean;\n playgrounds?: boolean;\n screenshots?: boolean;\n } = {},\n ): ContentBuilderRet {\n const allExamples = this._processGroup(this._config.examples);\n\n const okay: string[] = [];\n const fail: string[] = [];\n\n console.info(\n `Going to generate ${[\n emit.index ? [\"index files\"] : [],\n emit.playgrounds ? [\"playground openers\"] : [],\n emit.screenshots ? [\"screenshots\"] : [],\n ]\n .flat()\n .join(\", \")} for ${allExamples.length} examples.`,\n );\n process.stdout.write(\"\\n\");\n\n const index: ContentBuilderRet[\"index\"] = emit.index\n ? // Generate indexes.\n (async (): ContentBuilderRet[\"index\"] => {\n const getStartStopMs = measureStartStopMs();\n\n const contentParts = await this._config.renderer.render(\n this._config.examples,\n this._config.output,\n this._config.title,\n collator,\n );\n\n const results = await Promise.allSettled(\n contentParts.map(\n async ({ content, filename }): Promise<void> =>\n writeFile(join(this._config.output, filename), content),\n ),\n );\n\n return [\n {\n ...getStartStopMs(),\n count: results.length,\n result: results.every(\n ({ status }): boolean => status === \"fulfilled\",\n )\n ? \"fulfilled\"\n : \"rejected\",\n },\n ];\n })()\n : // Skip indexes.\n Promise.resolve([]);\n\n const playgrounds: ContentBuilderRet[\"playgrounds\"] = emit.playgrounds\n ? // Generate playground pages.\n (async (): ContentBuilderRet[\"playgrounds\"] =>\n await Promise.all(\n allExamples.map(async (example): Promise<ExampleReport> => {\n const getStartStopMs = measureStartStopMs();\n\n const results = await Promise.allSettled(\n [\n {\n html: generateJSFiddlePage(example),\n path: example.paths.jsfiddle.local,\n },\n {\n html: generateCodePenPage(example),\n path: example.paths.codepen.local,\n },\n ].map(\n async ({ html, path }): Promise<void> =>\n writeFile(path, await formatHTML(html)),\n ),\n );\n\n return {\n ...getStartStopMs(),\n count: results.length,\n example: example,\n result: results.every(\n ({ status }): boolean => status === \"fulfilled\",\n )\n ? \"fulfilled\"\n : \"rejected\",\n };\n }),\n ))()\n : // Skip playground pages.\n Promise.resolve([]);\n\n const screenshots: ContentBuilderRet[\"screenshots\"] = emit.screenshots\n ? // Generate screenshots.\n (async (): ContentBuilderRet[\"screenshots\"] => {\n const cleanup: (() => void | Promise<void>)[] = [];\n\n try {\n const debug = /^1|y|yes|true$/i.test(process.env.DEBUG ?? \"\");\n const browser = await puppeteer.launch({\n headless: !debug,\n slowMo: debug ? 100 : undefined,\n });\n if (debug) {\n cleanup.push(async (): Promise<void> => browser.disconnect());\n } else {\n cleanup.push((): Promise<void> => browser.close());\n }\n\n // Generate screenshots.\n // There is quite long delay to ensure the chart is rendered properly\n // so it's much faster to run a lot of them at the same time.\n const todo = allExamples.slice();\n const total = todo.length;\n const reports: ExampleReport[] = [];\n await Promise.allSettled(\n new Array(this._config.parallel)\n .fill(null)\n .map(async (): Promise<void> => {\n let example: Example | undefined;\n while ((example = todo.pop())) {\n const getStartStopMs = measureStartStopMs();\n\n const valid = await generateScreenshot(browser, {\n debug,\n example,\n height: this._config.renderer.screenshot.height,\n screenshotScript: this._config.screenshotScript,\n width: this._config.renderer.screenshot.width,\n });\n\n const report: ExampleReport = {\n ...getStartStopMs(),\n count: 1,\n example,\n result: valid ? \"fulfilled\" : \"rejected\",\n };\n reports.push(report);\n\n if (valid) {\n okay.push(example.path);\n } else {\n fail.push(example.path);\n }\n\n const percentage = (\n Math.floor((reports.length / total) * 100) + \"%\"\n ).padStart(4, \" \");\n const validText = valid ? \"okay\" : \"fail\";\n const msText = formatStartStopMs(report);\n console.info(\n `${percentage} ${validText} ${msText} - ${example.path}`,\n );\n }\n }),\n );\n\n return reports;\n } finally {\n for (const callback of cleanup.splice(0).reverse()) {\n try {\n await callback();\n } catch (error) {\n console.error(error);\n }\n }\n }\n })()\n : // Skip screenshots.\n Promise.resolve([]);\n\n const checks = (async (): Promise<Checks> => {\n await index;\n await playgrounds;\n await screenshots;\n\n const total = okay.length + fail.length;\n return {\n fail: fail.length,\n failPaths: fail,\n okay: okay.length,\n okayPaths: okay,\n percentage: total === 0 ? 100 : (100 * okay.length) / total,\n total,\n };\n })();\n\n return { checks, index, playgrounds, screenshots };\n }\n\n private _processGroup(examples: Examples): Example[] {\n return Object.keys(examples)\n .sort(collator.compare)\n .flatMap((key): Example[] => {\n const example = examples[key];\n\n if (isExample(example)) {\n return [example];\n } else {\n return this._processGroup(example);\n }\n });\n }\n}\n","<html>\n <head>\n <meta charset=\"utf-8\" />\n <title>Examples</title>\n\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n\n <link rel=\"stylesheet\" type=\"text/css\" href=\"examples.css\" />\n </head>\n <body></body>\n</html>\n",".examples-root {\n margin: 50px auto 200px;\n min-width: calc(200px + 2em);\n width: calc(100vw - 200px);\n}\n\n.examples-root a {\n color: #2b7ce9;\n}\n.examples-root a:visited {\n color: #46417a;\n}\n\n.examples-root .example-link {\n margin: 1em;\n position: relative;\n width: 200px;\n\n display: inline-block;\n}\n\n.examples-root .example-link .example-image {\n display: block;\n height: 200px;\n margin-top: 1ex;\n position: relative;\n width: 200px;\n}\n.examples-root .example-link .example-image > img {\n position: absolute;\n top: 0px;\n left: 0px;\n width: 200px;\n height: 200px;\n\n background: #2b7ce9;\n border: 1px solid #2b7ce9;\n color: #ffffff;\n\n transition:\n transform 0.5s ease 0s,\n z-index 0.5s linear 0s;\n z-index: 1;\n}\n.examples-root .example-link:hover .example-image > img {\n transform: translate(0px, 95px) scale(2, 2);\n z-index: 100;\n}\n\n.examples-root .example-header > *:last-child {\n margin-left: 0.5em;\n}\n.examples-root .icon {\n height: 1.5em;\n margin-bottom: -0.25em;\n width: 1.5em;\n\n background: none;\n border: none;\n cursor: pointer;\n display: inline-block;\n}\n.examples-root .icon.jsfiddle {\n background-size: contain;\n background-image: url(\"data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3C!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3E%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' version='1.1' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath fill='%232b7ce9' d='M16.45,17.5C17.45,17.5 18.3,17.15 19,16.5C19.67,15.8 20,15 20,14C20,13.05 19.66,12.22 18.96,11.53C18.26,10.84 17.41,10.5 16.41,10.5C15.47,10.5 14.64,10.83 13.92,11.5L9.14,15.56C8.7,16 8.17,16.22 7.55,16.22C6.92,16.22 6.39,16 5.95,15.56C5.5,15.13 5.3,14.61 5.3,14C5.3,13.42 5.5,12.91 5.95,12.47C6.39,12.03 6.92,11.81 7.55,11.81C8.14,11.81 8.69,12.03 9.19,12.47L9.94,13.13L10.92,12.23L10.08,11.53C9.39,10.84 8.55,10.5 7.55,10.5C6.58,10.5 5.74,10.84 5.04,11.53C4.34,12.22 4,13.05 4,14C4,15 4.34,15.8 5.04,16.5C5.74,17.15 6.59,17.5 7.59,17.5C8.53,17.5 9.36,17.16 10.08,16.5L14.86,12.42C15.27,12 15.8,11.81 16.45,11.81C17.08,11.81 17.61,12.03 18.05,12.47C18.5,12.91 18.7,13.42 18.7,14C18.7,14.61 18.5,15.13 18.05,15.56C17.61,16 17.08,16.22 16.45,16.22C15.89,16.22 15.34,16 14.81,15.5L14.06,14.86L13.08,15.75L13.92,16.45C14.61,17.14 15.45,17.5 16.45,17.5M19.36,10.03C20.64,10.13 21.73,10.65 22.64,11.6C23.55,12.55 24,13.69 24,15C24,16.38 23.5,17.55 22.5,18.54C21.54,19.5 20.36,20 19,20H6C4.34,20 2.93,19.43 1.76,18.26C0.59,17.09 0,15.67 0,14C0,12.55 0.5,11.23 1.57,10.05C2.62,8.88 3.88,8.22 5.34,8.06C6,6.84 6.92,5.86 8.11,5.11C9.3,4.36 10.59,4 12,4C13.69,4 15.26,4.58 16.71,5.77C18.16,6.95 19.05,8.38 19.36,10.03Z' /%3E%3C/svg%3E\");\n}\n.examples-root .icon.codepen {\n background-size: contain;\n background-image: url(\"data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3C!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3E%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' version='1.1' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath fill='%232b7ce9' d='M15.09,12L12,14.08V14.09L8.91,12L12,9.92V9.92L15.09,12M12,2C11.84,2 11.68,2.06 11.53,2.15L2.5,8.11C2.27,8.22 2.09,8.43 2,8.67V14.92C2,15.33 2,15.33 2.15,15.53L11.53,21.86C11.67,21.96 11.84,22 12,22C12.16,22 12.33,21.95 12.47,21.85L21.85,15.5C22,15.33 22,15.33 22,14.92V8.67C21.91,8.42 21.73,8.22 21.5,8.1L12.47,2.15C12.32,2.05 12.16,2 12,2M16.58,13L19.59,15.04L12.83,19.6V15.53L16.58,13M19.69,8.9L16.58,11L12.83,8.47V4.38L19.69,8.9M20.33,10.47V13.53L18.07,12L20.33,10.47M7.42,13L11.17,15.54V19.6L4.41,15.04L7.42,13M4.31,8.9L11.17,4.39V8.5L7.42,11L4.31,8.9M3.67,10.5L5.93,12L3.67,13.54V10.5Z' /%3E%3C/svg%3E\");\n}\n","import * as cheerio from \"cheerio\";\nimport type { AnyNode } from \"domhandler\";\n\nimport indexTemplate from \"./index.template.html\";\nimport styleTemplate from \"./index.template.css\";\nimport { ContentPart, Renderer, isExample } from \"../common\";\nimport { Example, Examples, ExamplesRoot } from \"../../types\";\nimport { formatHTML } from \"../format\";\n\n/**\n * @param example\n */\nfunction generateJSFiddle(example: Example): cheerio.Cheerio<AnyNode> {\n return cheerio\n .load([])(\"<a>\")\n .addClass(\"icon jsfiddle\")\n .attr(\"href\", example.paths.jsfiddle.web)\n .attr(\"title\", \"JSFiddle\");\n}\n\n/**\n * @param example\n */\nfunction generateCodePen(example: Example): cheerio.Cheerio<AnyNode> {\n return cheerio\n .load([])(\"<a>\")\n .addClass(\"icon codepen\")\n .attr(\"href\", example.paths.codepen.web)\n .attr(\"title\", \"CodePen\");\n}\n\n/**\n * @param examples\n * @param title\n * @param level\n * @param collator\n */\nfunction processGroup(\n examples: Examples,\n title: string,\n level: number,\n collator: Intl.Collator,\n): cheerio.Cheerio<AnyNode> {\n const heading = cheerio.load([])(`<h${Math.max(1, Math.min(6, level))}>`);\n heading.text(title);\n\n const list = cheerio.load([])(\"<div>\");\n\n const section = cheerio.load([])(\"<div>\");\n section.append(heading, list);\n\n for (const key of Object.keys(examples).sort(collator.compare)) {\n const example = examples[key];\n\n if (isExample(example)) {\n const header = cheerio\n .load([])(\"<div>\")\n .addClass(\"example-header\")\n .append(\n // Playgrounds\n generateJSFiddle(example),\n generateCodePen(example),\n // Title\n cheerio\n .load([])(\"<a>\")\n .attr(\"href\", example.paths.page.web)\n .text(key),\n );\n\n const image = cheerio\n .load([])(\"<a>\")\n .addClass(\"example-image\")\n .attr(\"href\", example.paths.page.web)\n .append(\n cheerio\n .load([])(\"<img>\")\n .attr(\"src\", example.paths.screenshot.web)\n .attr(\"alt\", key),\n );\n\n const item = cheerio\n .load([])(\"<span>\")\n .addClass(\"example-link\")\n .append(header, image);\n\n list.append(item);\n } else {\n section.append(processGroup(example, key, level + 1, collator));\n }\n }\n\n return section;\n}\n\nexport const htmlRenderer: Renderer = {\n async render(\n examples: ExamplesRoot,\n _output: string,\n title: string,\n collator: Intl.Collator,\n ): Promise<ContentPart[]> {\n const filename = \"index.html\";\n\n const root = cheerio.load([])(\"<div>\");\n root.addClass(\"examples-root\");\n\n for (const key of Object.keys(examples).sort(collator.compare)) {\n root.append(processGroup(examples[key], key, 1, collator));\n }\n\n const page = cheerio.load(indexTemplate);\n page(\"title\").text(title);\n page(\"body\").append(root);\n const content = await formatHTML(page.html());\n\n return [\n { content, filename, title },\n {\n content: styleTemplate,\n filename: \"examples.css\",\n title: \"examples.css\",\n },\n ];\n },\n screenshot: {\n width: 400,\n height: 400,\n },\n};\n","import { ContentPart, Renderer, isExample } from \"../common\";\nimport { Examples, ExamplesRoot } from \"../../types\";\nimport { formatMD } from \"../format\";\nimport { relative } from \"path\";\n\n/**\n * @param lines\n */\nfunction linesToContent(lines: string[]): Promise<string> {\n return formatMD(lines.join(\"\\n\"));\n}\n\n/**\n * @param title\n * @param src\n * @param href\n */\nfunction image(title: string, src: string, href?: string): string {\n return href == null\n ? `![${title}](${src})`\n : link(href, `![${title}](${src})`);\n}\n\n/**\n * @param href\n * @param text\n */\nfunction link(href: string, text: string = href): string {\n return `[${text}](${href})`;\n}\n\n/**\n * @param level\n * @param text\n */\nfunction header(level: number, text: string): string {\n return `${\"#\".repeat(level)} ${text}`;\n}\n\n/**\n * @param examples\n * @param output\n * @param title\n * @param collator\n */\nasync function processGroup(\n examples: Examples,\n output: string,\n title: string,\n collator: Intl.Collator,\n): Promise<ContentPart[]> {\n const items: string[] = [];\n const sections: ContentPart[] = [];\n const filenamePart = title.replace(/[^a-zA-Z0-9]/g, \"-\").toLowerCase();\n\n for (const key of Object.keys(examples).sort(collator.compare)) {\n const example = examples[key];\n\n if (isExample(example)) {\n // An example in this group.\n items.push(\n header(2, key),\n \"\",\n image(\n key,\n \"./\" + relative(output, example.paths.screenshot.local),\n example.paths.page.web,\n ),\n \"\",\n [\n link(example.paths.page.web, \"Open\"),\n link(example.paths.jsfiddle.web, \"JSFiddle\"),\n link(example.paths.codepen.web, \"CodePen\"),\n ].join(\" | \"),\n \"\",\n );\n } else {\n // A subgroup of examples.\n sections.push(\n ...(await processGroup(example, output, key, collator)).map(\n (contentPart): ContentPart => ({\n ...contentPart,\n filename: filenamePart + \".\" + contentPart.filename,\n }),\n ),\n );\n }\n }\n\n return [\n {\n content: await linesToContent([header(1, title), \"\", ...items]),\n filename: filenamePart + \".md\",\n title,\n },\n ...sections,\n ];\n}\n\nexport const mdRenderer: Renderer = {\n async render(\n examples: ExamplesRoot,\n output: string,\n _title: string,\n collator: Intl.Collator,\n ): Promise<ContentPart[]> {\n const sections: ContentPart[] = [];\n\n for (const key of Object.keys(examples).sort(collator.compare)) {\n sections.push(\n ...(await processGroup(examples[key], output, key, collator)),\n );\n }\n\n return [\n {\n content: await linesToContent([\n header(1, \"Examples\"),\n \"\",\n ...sections.map(\n ({ filename, title }): string =>\n \"- \" + link(\"./\" + filename, title),\n ),\n ]),\n filename: \"README.md\",\n title: \"Examples\",\n },\n ...sections,\n ];\n },\n screenshot: {\n width: 740,\n height: 250,\n },\n};\n","import yargs from \"yargs\";\nimport { hideBin } from \"yargs/helpers\";\n\nconst y = yargs(hideBin(process.argv))\n .strict(true)\n .usage(\"generate-example-index [options]\")\n .hide(\"version\")\n .config()\n .help()\n\n .option(\"assets-local-directory\", {\n default: \"./examples/thumbnails\",\n describe: \"The directory where assets will be written to.\",\n type: \"string\",\n })\n .option(\"assets-web-directory\", {\n default: \"./thumbnails\",\n describe: \"The directory where assets will be loaded from on the web.\",\n type: \"string\",\n })\n .option(\"base-url\", {\n demand: true,\n describe:\n \"The base URL for relative imports. Web URLs starting with slash will be relative to this URL.\",\n type: \"string\",\n })\n .option(\"examples-local-directory\", {\n default: \"./examples/thumbnails\",\n describe: \"The directory where examples will be loaded from locally.\",\n type: \"string\",\n })\n .option(\"examples-web-directory\", {\n default: \"./thumbnails\",\n describe: \"The directory where examples will be loaded from on the web.\",\n type: \"string\",\n })\n .option(\"output-directory\", {\n default: \"./examples\",\n describe: \"The directory where generated files will be emitted.\",\n type: \"string\",\n })\n .option(\"pages-local-directory\", {\n default: \"./examples/pages\",\n describe: \"The directory where pages will be written to.\",\n type: \"string\",\n })\n .option(\"pages-web-directory\", {\n default: \"./pages\",\n describe: \"The directory where pages will be loaded from on the web.\",\n type: \"string\",\n })\n\n .option(\"index\", {\n default: false,\n describe: \"Generate index files.\",\n type: \"boolean\",\n })\n .option(\"lint\", {\n default: false,\n describe: \"Lint examples.\",\n type: \"boolean\",\n })\n .option(\"playgrounds\", {\n default: false,\n describe: \"Generate playground pages.\",\n type: \"boolean\",\n })\n .option(\"screenshots\", {\n default: false,\n describe: \"Render screenshot thumbnails.\",\n type: \"boolean\",\n })\n\n .option(\"container-id\", {\n default: \"vis-container\",\n describe: \"The id of the elements where Vis will put canvas.\",\n type: \"string\",\n })\n .option(\"format\", {\n default: \"html\",\n describe: \"Whether HTML or Markdown should be generated.\",\n type: \"string\",\n })\n .option(\"parallel\", {\n default: 6,\n describe:\n \"Generate n screenshots at the same time (there is quite high delay to make sure the graph is rendered before the screenshot is taken so the CPU utilization is generally quite low).\",\n type: \"number\",\n })\n .option(\"screenshot-script\", {\n describe:\n \"The path of JavaScript file that will be executed before taking a screenshot (and before any other JavaScript in the page).\",\n type: \"string\",\n })\n .option(\"title\", {\n default: \"Examples\",\n describe: \"The title of the examples index.\",\n type: \"string\",\n })\n .option(\"verify\", {\n default: 100,\n describe:\n \"Attempt to verify that the examples were generated correctly. The value is a percentage of checks that have to pass for the run to be considered success.\",\n type: \"number\",\n });\n\n/**\n *\n */\nexport function parseArguments(): ReturnType<(typeof y)[\"parseSync\"]> {\n return y.parserConfiguration({ \"camel-case-expansion\": false }).parseSync();\n}\n","import { Example, ExamplePath, ExamplePaths } from \"./types\";\nimport { createHash } from \"crypto\";\nimport { relative, resolve } from \"path\";\n\n/**\n * @param urls\n */\nexport function joinURLs(...urls: string[]): string {\n return urls\n .map((url): string =>\n // Strip the parts of leading and trailing slashes if they have them.\n url.replace(/^\\/?(.*?)\\/?$/, \"$1\"),\n )\n .join(\"/\");\n}\n\n/**\n * @param baseURL\n * @param url\n */\nexport function fixAbsoluteInputURL(baseURL: string, url: string): string {\n return url.startsWith(\"/\")\n ? // Relative to the base URL. Base URL starts and URL ends with a slash.\n baseURL + url.slice(1)\n : // Relative to some other point or absolute already.\n url;\n}\n\n/**\n * @param config\n * @param exampleAbsolutePath\n */\nexport function generatePaths(\n config: ExamplePaths,\n exampleAbsolutePath: Example[\"path\"],\n): ExamplePaths {\n const exampleRelativePath = relative(config.page.local, exampleAbsolutePath);\n\n // It's important that the hash is created from the relative path so that it\n // is the same on all computers.\n const hash = createHash(\"sha256\").update(exampleRelativePath).digest(\"hex\");\n\n return {\n codepen: generateLocalWebPair(\n config.codepen.local,\n config.codepen.web,\n hash,\n \"codepen\",\n \"html\",\n ),\n jsfiddle: generateLocalWebPair(\n config.jsfiddle.local,\n config.jsfiddle.web,\n hash,\n \"jsfiddle\",\n \"html\",\n ),\n page: {\n local: exampleAbsolutePath,\n web: joinURLs(config.page.web, exampleRelativePath),\n },\n screenshot: generateLocalWebPair(\n config.screenshot.local,\n config.screenshot.web,\n hash,\n \"screenshot\",\n \"png\",\n ),\n };\n}\n\n/**\n * @param localRoot\n * @param webRoot\n * @param hash\n * @param prefix\n * @param extension\n */\nfunction generateLocalWebPair(\n localRoot: string,\n webRoot: string,\n hash: string,\n prefix: string,\n extension: string,\n): ExamplePath {\n const filename = `${prefix}.${hash}.${extension}`;\n\n return {\n local: resolve(localRoot, filename),\n web: joinURLs(webRoot, filename),\n };\n}\n","import * as cheerio from \"cheerio\";\nimport fs from \"fs\";\nimport util from \"util\";\nimport yargs from \"yargs\";\nimport { join } from \"path\";\nimport { resolve } from \"path\";\n\nimport {\n ContentBuilder,\n generatePlaygroundData,\n htmlRenderer,\n mdRenderer,\n reduceReports,\n formatStartStopMs,\n} from \"./content-builder\";\nimport { Example, ExamplesRoot, ExamplePaths } from \"./types\";\nimport { parseArguments } from \"./cli\";\nimport { generatePaths, fixAbsoluteInputURL } from \"./paths\";\n\nconst argv = parseArguments();\n\n// Log the parsed configuration for debugging purposes.\nconsole.info(\"Configuration: \", JSON.stringify(argv, null, 2));\nprocess.stdout.write(\"\\n\");\n\n// Pageres uses quite a lot of listeners when invoked multiple times in\n// parallel. This ensures there are no warnings about it.\nprocess.setMaxListeners(40);\n\n// Resolve paths relative to PWD.\nconst screenshotScriptPath =\n typeof argv[\"screenshot-script\"] === \"string\"\n ? resolve(argv[\"screenshot-script\"])\n : undefined;\n\nconst mkdir = util.promisify(fs.mkdir);\nconst readFile = util.promisify(fs.readFile);\n\nfunction getMeta<T>(page: cheerio.CheerioAPI, name: string, fallback: T): T;\n/**\n * Extract and coerce a value from meta tag.\n * @param page - The page to be queried.\n * @param name - The name of the meta tag.\n * @param fallback - The value to be used if the meta tag is not present.\n * @returns The value “smartly” coerced or the fallback if conversion isn't\n * possible or the value is not present in the page.\n */\nfunction getMeta(\n page: cheerio.CheerioAPI,\n name: string,\n fallback: number | string,\n): number | string {\n const content = page(`meta[name=\"${name}\"]`).attr(\"content\");\n\n if (content == null) {\n // No meta of this name exists in the page, use the fallback.\n return fallback;\n } else if (!Number.isNaN(+content)) {\n // Number.\n return +content;\n } else if (typeof content === \"string\") {\n // String.\n return content;\n } else {\n // Something doesn't match, use the fallback.\n return fallback;\n }\n}\n\n/**\n * Test if the example conforms to the conventions.\n * @param path - The path to the example (used for identification in logs).\n * @param page - The HTML to be linted.\n * @returns True if everything's okay, false otherwise.\n */\nfunction lintExample(path: string, page: cheerio.CheerioAPI): boolean {\n let valid = true;\n const msgs = [`${path}:`];\n\n if (page(\"#title\").length !== 1) {\n msgs.push(\"Missing #title element in the body.\");\n valid = false;\n }\n\n if (page(\"#title > *\").length < 2) {\n msgs.push(\n \"There have to be at least two headings (group and example name).\",\n );\n valid = false;\n }\n\n const headTitle = page(\"head > title\").text().trim();\n const bodyTitle = page(\"#title > *\")\n .map((_i, elem): string => cheerio.load([])(elem).text())\n .get()\n .join(\" | \")\n .trim();\n if (headTitle !== bodyTitle) {\n msgs.push(\n \"The title in the head doesn't match the title in the body.\",\n ` head: ${headTitle}`,\n ` body: ${bodyTitle}`,\n );\n valid = false;\n }\n\n if (msgs.length > 1) {\n console.warn(\"\\n\" + msgs.join(\"\\n \"));\n }\n\n return valid;\n}\n\n(async (): Promise<void> => {\n let code = 0;\n\n if (!argv.index && !argv.screenshots && !argv.lint) {\n yargs.parse(\"--help\");\n return;\n }\n\n // Ensure that all paths exist.\n await Promise.all(\n [\n argv[\"assets-local-directory\"],\n argv[\"examples-local-directory\"],\n argv[\"output-directory\"],\n argv[\"pages-local-directory\"],\n ].map(async (path): Promise<void> => {\n await mkdir(path, { recursive: true });\n }),\n );\n\n const baseURL = argv[\"base-url\"];\n if (!baseURL.endsWith(\"/\")) {\n throw new Error(\"Base URL (`base-url`) has to end with a slash (`/`).\");\n }\n\n // Paths.\n const pathsConfig: ExamplePaths = {\n codepen: {\n local: argv[\"pages-local-directory\"],\n web: fixAbsoluteInputURL(baseURL, argv[\"pages-web-directory\"]),\n },\n jsfiddle: {\n local: argv[\"pages-local-directory\"],\n web: fixAbsoluteInputURL(baseURL, argv[\"pages-web-directory\"]),\n },\n page: {\n local: argv[\"examples-local-directory\"],\n web: fixAbsoluteInputURL(baseURL, argv[\"examples-web-directory\"]),\n },\n screenshot: {\n local: argv[\"assets-local-directory\"],\n web: fixAbsoluteInputURL(baseURL, argv[\"assets-web-directory\"]),\n },\n };\n\n const examples: ExamplesRoot = {};\n const selector = \"#\" + argv[\"container-id\"];\n const stats = { examples: 0 };\n const skipped: string[] = [];\n\n await Promise.all(\n (\n await (\n await import(\"globby\")\n ).globby(join(pathsConfig.page.local, \"**/*.html\"))\n ).map(async (pagePath): Promise<any> => {\n const html = await readFile(pagePath, \"utf-8\");\n const $page = cheerio.load(html);\n const pageDelay = getMeta<number | \"call\">(\n $page,\n \"example-screenshot-delay\",\n 6,\n );\n const pageTimeout = getMeta<number>(\n $page,\n \"example-screenshot-timeout\",\n 60,\n );\n const pageSelector = getMeta<string>(\n $page,\n \"example-screenshot-selector\",\n selector,\n );\n\n // Is this an examples?\n if ($page(pageSelector).length === 0) {\n skipped.push(pagePath);\n return;\n }\n\n // Lint if requested.\n if (argv.lint) {\n lintExample(pagePath, $page);\n }\n\n // Body titles.\n let titles = $page(\"#title > *\")\n .get()\n .map((elem): string => $page(elem).text().trim());\n\n // Head title fallback.\n if (titles.length < 2) {\n titles = $page(\"head > title\")\n .text()\n .split(\"|\")\n .map((title): string => title.trim());\n }\n\n // File path fallback.\n if (titles.length < 2) {\n titles = pagePath.split(\"/\");\n }\n\n // Just ignore it.\n if (titles.length < 2) {\n console.error(\"Title resolution failed. Skipping.\");\n return;\n }\n\n const example: Example = {\n $: $page,\n delay: pageDelay,\n html,\n path: pagePath,\n paths: generatePaths(pathsConfig, pagePath),\n playground: await generatePlaygroundData(baseURL, $page, pagePath),\n selector: pageSelector,\n timeout: pageTimeout,\n titles,\n };\n\n // Put this example into the structure while creating any missing groups in the process.\n titles.reduce((acc, title, i, arr): any => {\n while (acc[title] != null && acc[title].path != null) {\n console.error(\"The following group already exists: \", titles);\n title += \"!\";\n }\n\n if (i === arr.length - 1) {\n if (acc[title] != null) {\n console.error(\n \"The following example has the same name as an already existing group: \",\n titles,\n );\n return null;\n } else {\n acc[title] = example;\n\n ++stats.examples;\n }\n } else {\n return (acc[title] = acc[title] || {});\n }\n }, examples as any);\n }),\n );\n\n if (skipped.length) {\n process.stdout.write(\"\\n\");\n console.info(\n [\n \"The following files don't look like examples (there is nothing to take a screenshot of):\",\n ...skipped.sort(),\n ].join(\"\\n \"),\n );\n }\n\n if (stats.examples === 0) {\n console.info(\"No usable example files were found.\");\n } else if (argv.index || argv.playgrounds || argv.screenshots) {\n process.stdout.write(\"\\n\");\n\n const screenshotScript =\n screenshotScriptPath != null\n ? (await readFile(screenshotScriptPath, \"utf-8\")) || \"\"\n : \"\";\n\n const builtData = new ContentBuilder({\n examples,\n output: resolve(argv[\"output-directory\"]),\n parallel: argv.parallel,\n renderer: argv.format === \"md\" ? mdRenderer : htmlRenderer,\n screenshotScript,\n title: argv.title,\n }).build({\n index: argv.index,\n playgrounds: argv.playgrounds,\n screenshots: argv.screenshots,\n });\n\n // Create and write the page.\n if (argv.index) {\n const cummulativeReport = reduceReports(await builtData.index);\n console.info(\n `Index with ${stats.examples} examples written (${\n cummulativeReport.count\n } files in ${formatStartStopMs(cummulativeReport)}).`,\n );\n }\n\n // Create and write the playgrounds.\n if (argv.index) {\n const cummulativeReport = reduceReports(await builtData.playgrounds);\n console.info(\n `Playground opener files for ${stats.examples} examples written (${\n cummulativeReport.count\n } files in ${formatStartStopMs(cummulativeReport)}).`,\n );\n }\n\n // Create and write the screenshots.\n if (argv.screenshots) {\n const cummulativeReport = reduceReports(await builtData.screenshots);\n console.info(\n `Screenshot files for ${stats.examples} written (${\n cummulativeReport.count\n } files in ${formatStartStopMs(cummulativeReport)}).`,\n );\n }\n\n // Verify the result.\n const checks = await builtData.checks;\n process.stdout.write(\"\\n\");\n if (checks.fail === 0) {\n console.info(\n `Verification: ${checks.okay} passed (${Math.round(\n checks.percentage,\n )} %) passed.`,\n );\n } else {\n if (checks.percentage >= argv.verify) {\n console.info(\n `Verification: ${checks.okay} passed (${Math.round(\n checks.percentage,\n )} %), ${checks.fail} failed.\\n` +\n \"This is within the threshold set by --verify.\",\n );\n } else {\n console.error(\n `Verification: Only ${checks.okay} passed (${Math.round(\n checks.percentage,\n )} %), ${checks.fail} failed.\\n` +\n \"This is not within the threshold set by --verify. Exiting with an error.\",\n );\n code = 3;\n }\n\n checks.failPaths.forEach((path): void => {\n console.error(path);\n });\n }\n }\n\n process.exitCode = code;\n})().catch((error): void => {\n process.exitCode = 1;\n console.error(error);\n});\n"],"names":["cheerioheerio","template","writeFile","commonScreenshotScript","resolve","index_template_default","processGroup","indexTemplate","styleTemplate"],"mappings":"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"}
1
+ {"version":3,"file":"generate-examples-index.js","sources":["../src/generate-examples-index/content-builder/common.ts","../src/generate-examples-index/content-builder/format.ts","../src/generate-examples-index/content-builder/playground/codepen.template.html","../src/generate-examples-index/content-builder/playground/codepen.ts","../src/generate-examples-index/content-builder/playground/data.ts","../src/generate-examples-index/content-builder/playground/jsfiddle.template.html","../src/generate-examples-index/content-builder/playground/jsfiddle.ts","../src/generate-examples-index/content-builder/screenshots/screenshot-script.js.txt","../src/generate-examples-index/content-builder/screenshots/index.ts","../src/generate-examples-index/content-builder/builder.ts","../src/generate-examples-index/content-builder/html/index.template.html","../src/generate-examples-index/content-builder/html/index.template.css","../src/generate-examples-index/content-builder/html/index.ts","../src/generate-examples-index/content-builder/md/index.ts","../src/generate-examples-index/cli.ts","../src/generate-examples-index/paths.ts","../src/generate-examples-index/index.ts"],"sourcesContent":["import { Example, Examples, ExamplesRoot } from \"../types\";\n\nexport interface ContentPart {\n content: string;\n filename: string;\n title: string;\n}\n\nexport interface Renderer {\n render(\n examples: ExamplesRoot,\n output: string,\n title: string,\n collator: Intl.Collator,\n ): Promise<ContentPart[]>;\n screenshot: {\n width: number;\n height: number;\n };\n}\n\n/**\n * @param value\n */\nexport function isExample(\n value: Example | Examples | ExamplesRoot,\n): value is Example {\n return (\n typeof value === \"object\" &&\n value !== null &&\n typeof value.path === \"string\"\n );\n}\n\nexport interface StartStopMs {\n start: number;\n stop: number;\n}\n/**\n *\n */\nexport function measureStartStopMs(): () => StartStopMs {\n const start = Date.now();\n return (): StartStopMs => {\n const stop = Date.now();\n\n return { start, stop };\n };\n}\n\nexport interface Report {\n count: number;\n result: \"fulfilled\" | \"rejected\";\n start: number;\n stop: number;\n}\n/**\n * @param reports\n * @param fallback\n */\nexport function reduceReports(\n reports: readonly Report[],\n fallback: Report = {\n count: 0,\n result: \"fulfilled\",\n start: -1,\n stop: -1,\n },\n): Report {\n return (\n reports.reduce<Report | null>((acc, val): Report | null => {\n return {\n count: (acc?.count ?? 0) + (val?.count ?? 0),\n result: [acc?.result ?? \"fulfilled\", val.result].every(\n (result): boolean => result === \"fulfilled\",\n )\n ? \"fulfilled\"\n : \"rejected\",\n start: Math.min(acc?.start ?? Number.POSITIVE_INFINITY, val.start),\n stop: Math.max(acc?.stop ?? Number.NEGATIVE_INFINITY, val.stop),\n };\n }, null) ?? fallback\n );\n}\n\n/**\n * @param ms\n */\nexport function formatMs(ms: number): string {\n return `${(Math.round(ms / 100) / 10).toFixed(1)}s`;\n}\n/**\n * @param root0\n * @param root0.start\n * @param root0.stop\n */\nexport function formatStartStopMs({ start, stop }: StartStopMs): string {\n return `${(Math.round((stop - start) / 100) / 10).toFixed(1)}s`;\n}\n","import prettier from \"prettier\";\n\nexport const formatCSS = (css: string | null | undefined): Promise<string> =>\n prettier.format(css || \"\", { filepath: \"style.css\" });\nexport const formatHTML = (html: string | null | undefined): Promise<string> =>\n prettier.format(html || \"\", { filepath: \"index.html\" });\nexport const formatJS = (js: string | null | undefined): Promise<string> =>\n prettier.format(js || \"\", { filepath: \"script.js\" });\nexport const formatMD = (md: string | null | undefined): Promise<string> =>\n prettier.format(md || \"\", { filepath: \"README.md\" });\n","<html>\n <head>\n <meta charset=\"utf-8\" />\n <title>CodePen</title>\n </head>\n <body>\n <form\n id=\"form\"\n action=\"https://codepen.io/pen/define\"\n method=\"post\"\n target=\"_self\"\n >\n <input type=\"hidden\" name=\"data\" />\n <button id=\"open\" alt=\"JSFiddle\" title=\"JSFiddle\">Open CodePen</button>\n </form>\n\n <script type=\"text/javascript\">\n document.getElementById(\"open\").click();\n </script>\n </body>\n</html>\n","import * as cheerioheerio from \"cheerio\";\n\nimport template from \"./codepen.template.html\";\nimport { Example } from \"../../types\";\n\n/**\n * @param example\n */\nexport function generateCodePenPage(example: Example): string {\n const data = example.playground;\n const title = example.titles.join(\" | \");\n\n const page = cheerioheerio.load(template);\n page(\"title\").text(title);\n const form = page(\"#form\");\n\n form.find('input[name=\"data\"]').attr(\n \"value\",\n JSON.stringify({\n css: data.code.css,\n css_external: data.resources.css.join(\";\"),\n html: data.code.html,\n js: data.code.js,\n js_external: data.resources.js.join(\";\"),\n title: example.titles.join(\" | \"),\n }),\n );\n\n return page.html();\n}\n","import * as cheerio from \"cheerio\";\nimport { Text } from \"domhandler\";\nimport { dirname, relative, resolve } from \"path\";\n\nimport { Example, PlaygroundData } from \"../../types\";\nimport { formatCSS, formatHTML, formatJS } from \"../format\";\n\n/**\n * @param baseURL\n * @param example$\n * @param examplePath\n */\nexport async function generatePlaygroundData(\n baseURL: string,\n example$: Example[\"$\"],\n examplePath: Example[\"path\"],\n): Promise<PlaygroundData> {\n const firstBodyChild = example$(\"body\").get(0);\n if (firstBodyChild == null) {\n throw new Error(\"Example body has no children.\");\n }\n\n // JavaScript\n const eventListeners = Object.entries(firstBodyChild.attribs)\n .filter(([name]): boolean => /^on/.test(name))\n .map(([name, value]): [string, string] => [name.slice(2), `${value}`])\n .map(\n ([name, value]): string =>\n `window.addEventListener(\"${name}\", () => { ${value} });`,\n )\n .join(\"\\n\");\n const js = formatJS(\n example$(\"script\")\n .map((_i, elem) => elem.children[0] as Text)\n .get()\n .map((elem): string => elem.data)\n .join(\"\") +\n \"\\n\\n;\" +\n eventListeners,\n );\n\n // Cascading Style Sheets\n const css = formatCSS(\n example$(\"style\")\n .map((_i, elem) => elem.children[0] as Text)\n .get()\n .map((elem): string => elem.data)\n .join(\"\"),\n );\n\n // Hypertext Markup Language\n const $html = cheerio.load(example$(\"body\").html() || \"\");\n $html(\"script\").remove();\n\n const html = formatHTML($html(\"body\").html());\n\n // Resources\n const fixPath = (rawPath: string): string =>\n /^https?:\\/\\//.test(rawPath)\n ? // World wide web absolute.\n rawPath\n : /^\\//.test(rawPath)\n ? // Domain absolute.\n baseURL + rawPath.slice(1)\n : //Relative.\n baseURL +\n relative(process.cwd(), resolve(dirname(examplePath), rawPath));\n\n const resources = {\n js: example$(\"script\")\n .map((_i, elem): undefined | string =>\n cheerio.load(elem)(\"script\").attr(\"src\"),\n )\n .get()\n .filter((src): src is string => typeof src === \"string\")\n .map(fixPath),\n css: example$(\"link[rel='stylesheet']\")\n .map((_i, elem): undefined | string =>\n cheerio.load(elem)(\"script\").attr(\"href\"),\n )\n .get()\n .filter((href): href is string => typeof href === \"string\")\n .map(fixPath),\n };\n\n return {\n code: {\n css: await css,\n html: await html,\n js: await js,\n },\n resources,\n };\n}\n","<html>\n <head>\n <meta charset=\"utf-8\" />\n <title>JSFiddle</title>\n </head>\n <body>\n <form\n id=\"form\"\n action=\"https://jsfiddle.net/api/post/library/pure/\"\n method=\"post\"\n target=\"_self\"\n >\n <input type=\"hidden\" name=\"css\" />\n <input type=\"hidden\" name=\"html\" />\n <input type=\"hidden\" name=\"js\" />\n <input type=\"hidden\" name=\"resources\" />\n <input type=\"hidden\" name=\"title\" />\n <input type=\"hidden\" name=\"wrap\" />\n <button id=\"open\" alt=\"JSFiddle\" title=\"JSFiddle\">Open JSFiddle</button>\n </form>\n\n <script type=\"text/javascript\">\n document.getElementById(\"open\").click();\n </script>\n </body>\n</html>\n","import * as cheerio from \"cheerio\";\n\nimport template from \"./jsfiddle.template.html\";\nimport { Example } from \"../../types\";\n\n/**\n * @param example\n */\nexport function generateJSFiddlePage(example: Example): string {\n const data = example.playground;\n const title = example.titles.join(\" | \");\n const resources = [...data.resources.css, ...data.resources.js].join(\",\");\n\n const page = cheerio.load(template);\n page(\"title\").text(title);\n const form = page(\"#form\");\n\n // Playground data.\n form.find('input[name=\"css\"]').attr(\"value\", data.code.css);\n form.find('input[name=\"html\"]').attr(\"value\", data.code.html);\n form.find('input[name=\"js\"]').attr(\"value\", data.code.js);\n form.find('input[name=\"resources\"]').attr(\"value\", resources);\n form.find('input[name=\"title\"]').attr(\"value\", title);\n\n // Don't run JS before the DOM is ready.\n form.find('input[name=\"wrap\"]').attr(\"value\", \"b\");\n\n return page.html();\n}\n","/* global window: false */\n\n/**\n * Simulates confirmation usind window.confirm and window.alert otherwise the\n * screenshot generator would just hang forever.\n */\nwindow.realAlert = window.alert;\nwindow.alert = function () {};\nwindow.confirm = function () {\n return true;\n};\n\n/**\n * Wait for the page to report it's ready to take a screenshot.\n */\nwindow.readyToTakeAScreenshot = new Promise(function (resolve) {\n window.takeScreenshot = resolve;\n});\n","import * as cheerio from \"cheerio\";\nimport { Jimp } from \"jimp\";\nimport { Browser } from \"puppeteer\";\nimport commonScreenshotScript from \"./screenshot-script.js.txt\";\nimport fs from \"fs\";\nimport { basename, dirname, posix, resolve, sep } from \"path\";\nimport { promisify } from \"util\";\n\nimport { Example } from \"../../types\";\nimport { formatHTML } from \"../format\";\n\nconst unlink = promisify(fs.unlink);\nconst writeFile = promisify(fs.writeFile);\n\n/**\n * Check if the screenshot is valid. At the moment this simply considers\n * everything except for solid color images as valid. This works pretty well\n * though may yield some false positives.\n * @param screenshot - The binary data of the screenshot.\n * @returns True for valid and false for invalid.\n */\nasync function isScreenshotValid(screenshot: Buffer): Promise<boolean> {\n const image = await Jimp.read(screenshot);\n const firstPixel = image.getPixelColor(0, 0);\n\n for (let x = 0; x < image.width; ++x) {\n for (let y = 0; y < image.height; ++y) {\n if (firstPixel !== image.getPixelColor(x, y)) {\n return true;\n }\n }\n }\n\n return false;\n}\n\nexport interface GenerateScreenshotConfig {\n /**\n * Leave the contexts and tabs open for inspection, also don't delete the\n * temporary pages.\n */\n debug: boolean;\n /** The example for which the screenshot will be generated. */\n example: Example;\n /** Height of the captured screenshot. */\n height: number;\n /** A script to be executed as the first thing on the page. */\n screenshotScript: string;\n /** Width of the captured screenshot. */\n width: number;\n}\n\n/**\n * Capture an element on the example's page and save the screenshot to the\n * disk as a PNG file.\n * @param browser - Puppeteer's browser instance.\n * @param config - See the type's docs for detail.\n * @returns Whether or not the screenshot passed validation check.\n */\nexport async function generateScreenshot(\n browser: Browser,\n config: GenerateScreenshotConfig,\n): Promise<boolean> {\n const { debug, example, height, screenshotScript, width } = config;\n\n const cleanup: (() => void | Promise<void>)[] = [];\n\n try {\n // Prepare the page. It has to be written to the disk so that files with\n // relative URLs can be loaded.\n const tmpPath = resolve(\n dirname(example.paths.page.local),\n \".tmp.example.screenshot.\" + basename(example.paths.page.local),\n );\n const screenshotPage = cheerio.load(example.html);\n screenshotPage(\"head\").prepend(\n cheerio\n .load([])(\"<script>\")\n .attr(\"type\", \"text/javascript\")\n .text(`window.DEBUG = ${true};`),\n cheerio\n .load([])(\"<script>\")\n .attr(\"type\", \"text/javascript\")\n .text(commonScreenshotScript),\n cheerio\n .load([])(\"<script>\")\n .attr(\"type\", \"text/javascript\")\n .text(screenshotScript),\n cheerio\n .load([])(\"<style>\")\n .attr(\"type\", \"text/css\")\n .text(\n [\n `${example.selector} {`,\n \" border: none !important;\",\n \"\",\n ` min-width: ${width}px !important;`,\n ` min-height: ${height}px !important;`,\n ` width: ${width}px !important;`,\n ` height: ${height}px !important;`,\n ` max-width: ${width}px !important;`,\n ` max-height: ${height}px !important;`,\n \"}\",\n ].join(\"\\n\"),\n ),\n );\n await writeFile(tmpPath, await formatHTML(screenshotPage.html()));\n if (!debug) {\n cleanup.push((): Promise<void> => unlink(tmpPath));\n }\n\n const context = await browser.createBrowserContext();\n if (!debug) {\n cleanup.push((): Promise<void> => context.close());\n }\n\n const page = await context.newPage();\n if (!debug) {\n cleanup.push((): Promise<void> => page.close());\n }\n\n await page.setViewport({ width: width + 50, height: height + 50 });\n await page.goto(\"file://\" + tmpPath.split(sep).join(posix.sep));\n\n await page.waitForSelector(example.selector, {\n visible: true,\n timeout: example.timeout * 1000,\n });\n\n const { delay } = example;\n if (delay === \"call\") {\n await page.evaluate(\n \"function fn() { return window.readyToTakeAScreenshot; }\",\n );\n } else {\n await new Promise(\n (resolve): void => void setTimeout(resolve, delay * 1000),\n );\n }\n\n const $element = await page.$(example.selector);\n if ($element == null) {\n throw new Error(\n `Element \"${example.selector}\" not found in ${example.path}.`,\n );\n }\n\n await $element.evaluate((element: Element): void => {\n element.scrollIntoView();\n });\n\n const screenshot = await $element.screenshot({\n encoding: \"binary\",\n });\n\n if (screenshot == null) {\n throw new Error(`Failed to take screenshot of “${example.paths.page}”`);\n } else if (typeof screenshot === \"string\") {\n // AFAIK this should never happen, it's just a problem with the types\n // always returning Buffer | string even when encoding is set to binary\n // (i.e. buffer).\n throw new Error(\n `Failed to get the binary data of the screenshot of “${example.paths.page}”`,\n );\n }\n\n await writeFile(example.paths.screenshot.local, screenshot);\n\n // Return the validity of the generated screenshot.\n return isScreenshotValid(Buffer.from(screenshot));\n } catch (error) {\n console.error(error);\n return false;\n } finally {\n for (const callback of cleanup.splice(0).reverse()) {\n try {\n await callback();\n } catch (error) {\n console.error(error);\n }\n }\n }\n}\n","import fs from \"fs\";\nimport { join } from \"path\";\nimport { promisify } from \"util\";\nimport puppeteer from \"puppeteer\";\n\nimport { Example, Examples, ExamplesRoot } from \"../types\";\nimport {\n Renderer,\n Report,\n formatStartStopMs,\n isExample,\n measureStartStopMs,\n} from \"./common\";\nimport { formatHTML } from \"./format\";\nimport { generateJSFiddlePage, generateCodePenPage } from \"./playground\";\nimport { generateScreenshot } from \"./screenshots\";\n\nconst collator = new Intl.Collator(\"US\");\nconst writeFile = promisify(fs.writeFile);\n\nexport type IndexReport = Report;\nexport interface ExampleReport extends Report {\n example: Example;\n}\n\nexport interface Checks {\n fail: number;\n failPaths: string[];\n okay: number;\n okayPaths: string[];\n percentage: number;\n total: number;\n}\n\nexport interface ContentBuilderConfig {\n /** The tree structure with examples in it's leaves. */\n examples: ExamplesRoot;\n /** The directory where built files will be saved. */\n output: string;\n /** How many screenshots to generate at the same time. */\n parallel: number;\n /** The renderer used to generate index files. */\n renderer: Renderer;\n /** A script that will be executed on each page as first. */\n screenshotScript: string;\n /** A title that will be passed to the renderer. */\n title: string;\n}\n\nexport interface ContentBuilderRet {\n checks: Promise<Checks>;\n index: Promise<IndexReport[]>;\n playgrounds: Promise<ExampleReport[]>;\n screenshots: Promise<ExampleReport[]>;\n}\n\nexport class ContentBuilder {\n public constructor(private readonly _config: ContentBuilderConfig) {}\n\n /**\n * Build the files and write them to the disk.\n * @param emit - Which types of files to emit.\n * @param emit.index\n * @param emit.playgrounds\n * @param emit.screenshots\n * @returns A report with check results and the number of written files.\n */\n public build(\n emit: {\n index?: boolean;\n playgrounds?: boolean;\n screenshots?: boolean;\n } = {},\n ): ContentBuilderRet {\n const allExamples = this._processGroup(this._config.examples);\n\n const okay: string[] = [];\n const fail: string[] = [];\n\n console.info(\n `Going to generate ${[\n emit.index ? [\"index files\"] : [],\n emit.playgrounds ? [\"playground openers\"] : [],\n emit.screenshots ? [\"screenshots\"] : [],\n ]\n .flat()\n .join(\", \")} for ${allExamples.length} examples.`,\n );\n process.stdout.write(\"\\n\");\n\n const index: ContentBuilderRet[\"index\"] = emit.index\n ? // Generate indexes.\n (async (): ContentBuilderRet[\"index\"] => {\n const getStartStopMs = measureStartStopMs();\n\n const contentParts = await this._config.renderer.render(\n this._config.examples,\n this._config.output,\n this._config.title,\n collator,\n );\n\n const results = await Promise.allSettled(\n contentParts.map(\n async ({ content, filename }): Promise<void> =>\n writeFile(join(this._config.output, filename), content),\n ),\n );\n\n return [\n {\n ...getStartStopMs(),\n count: results.length,\n result: results.every(\n ({ status }): boolean => status === \"fulfilled\",\n )\n ? \"fulfilled\"\n : \"rejected\",\n },\n ];\n })()\n : // Skip indexes.\n Promise.resolve([]);\n\n const playgrounds: ContentBuilderRet[\"playgrounds\"] = emit.playgrounds\n ? // Generate playground pages.\n (async (): ContentBuilderRet[\"playgrounds\"] =>\n await Promise.all(\n allExamples.map(async (example): Promise<ExampleReport> => {\n const getStartStopMs = measureStartStopMs();\n\n const results = await Promise.allSettled(\n [\n {\n html: generateJSFiddlePage(example),\n path: example.paths.jsfiddle.local,\n },\n {\n html: generateCodePenPage(example),\n path: example.paths.codepen.local,\n },\n ].map(\n async ({ html, path }): Promise<void> =>\n writeFile(path, await formatHTML(html)),\n ),\n );\n\n return {\n ...getStartStopMs(),\n count: results.length,\n example: example,\n result: results.every(\n ({ status }): boolean => status === \"fulfilled\",\n )\n ? \"fulfilled\"\n : \"rejected\",\n };\n }),\n ))()\n : // Skip playground pages.\n Promise.resolve([]);\n\n const screenshots: ContentBuilderRet[\"screenshots\"] = emit.screenshots\n ? // Generate screenshots.\n (async (): ContentBuilderRet[\"screenshots\"] => {\n const cleanup: (() => void | Promise<void>)[] = [];\n\n try {\n const debug = /^1|y|yes|true$/i.test(process.env.DEBUG ?? \"\");\n const browser = await puppeteer.launch({\n headless: !debug,\n slowMo: debug ? 100 : undefined,\n });\n if (debug) {\n cleanup.push(async (): Promise<void> => browser.disconnect());\n } else {\n cleanup.push((): Promise<void> => browser.close());\n }\n\n // Generate screenshots.\n // There is quite long delay to ensure the chart is rendered properly\n // so it's much faster to run a lot of them at the same time.\n const todo = allExamples.slice();\n const total = todo.length;\n const reports: ExampleReport[] = [];\n await Promise.allSettled(\n new Array(this._config.parallel)\n .fill(null)\n .map(async (): Promise<void> => {\n let example: Example | undefined;\n while ((example = todo.pop())) {\n const getStartStopMs = measureStartStopMs();\n\n const valid = await generateScreenshot(browser, {\n debug,\n example,\n height: this._config.renderer.screenshot.height,\n screenshotScript: this._config.screenshotScript,\n width: this._config.renderer.screenshot.width,\n });\n\n const report: ExampleReport = {\n ...getStartStopMs(),\n count: 1,\n example,\n result: valid ? \"fulfilled\" : \"rejected\",\n };\n reports.push(report);\n\n if (valid) {\n okay.push(example.path);\n } else {\n fail.push(example.path);\n }\n\n const percentage = (\n Math.floor((reports.length / total) * 100) + \"%\"\n ).padStart(4, \" \");\n const validText = valid ? \"okay\" : \"fail\";\n const msText = formatStartStopMs(report);\n console.info(\n `${percentage} ${validText} ${msText} - ${example.path}`,\n );\n }\n }),\n );\n\n return reports;\n } finally {\n for (const callback of cleanup.splice(0).reverse()) {\n try {\n await callback();\n } catch (error) {\n console.error(error);\n }\n }\n }\n })()\n : // Skip screenshots.\n Promise.resolve([]);\n\n const checks = (async (): Promise<Checks> => {\n await index;\n await playgrounds;\n await screenshots;\n\n const total = okay.length + fail.length;\n return {\n fail: fail.length,\n failPaths: fail,\n okay: okay.length,\n okayPaths: okay,\n percentage: total === 0 ? 100 : (100 * okay.length) / total,\n total,\n };\n })();\n\n return { checks, index, playgrounds, screenshots };\n }\n\n private _processGroup(examples: Examples): Example[] {\n return Object.keys(examples)\n .sort(collator.compare)\n .flatMap((key): Example[] => {\n const example = examples[key];\n\n if (isExample(example)) {\n return [example];\n } else {\n return this._processGroup(example);\n }\n });\n }\n}\n","<html>\n <head>\n <meta charset=\"utf-8\" />\n <title>Examples</title>\n\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n\n <link rel=\"stylesheet\" type=\"text/css\" href=\"examples.css\" />\n </head>\n <body></body>\n</html>\n",".examples-root {\n margin: 50px auto 200px;\n min-width: calc(200px + 2em);\n width: calc(100vw - 200px);\n}\n\n.examples-root a {\n color: #2b7ce9;\n}\n.examples-root a:visited {\n color: #46417a;\n}\n\n.examples-root .example-link {\n margin: 1em;\n position: relative;\n width: 200px;\n\n display: inline-block;\n}\n\n.examples-root .example-link .example-image {\n display: block;\n height: 200px;\n margin-top: 1ex;\n position: relative;\n width: 200px;\n}\n.examples-root .example-link .example-image > img {\n position: absolute;\n top: 0px;\n left: 0px;\n width: 200px;\n height: 200px;\n\n background: #2b7ce9;\n border: 1px solid #2b7ce9;\n color: #ffffff;\n\n transition:\n transform 0.5s ease 0s,\n z-index 0.5s linear 0s;\n z-index: 1;\n}\n.examples-root .example-link:hover .example-image > img {\n transform: translate(0px, 95px) scale(2, 2);\n z-index: 100;\n}\n\n.examples-root .example-header > *:last-child {\n margin-left: 0.5em;\n}\n.examples-root .icon {\n height: 1.5em;\n margin-bottom: -0.25em;\n width: 1.5em;\n\n background: none;\n border: none;\n cursor: pointer;\n display: inline-block;\n}\n.examples-root .icon.jsfiddle {\n background-size: contain;\n background-image: url(\"data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3C!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3E%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' version='1.1' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath fill='%232b7ce9' d='M16.45,17.5C17.45,17.5 18.3,17.15 19,16.5C19.67,15.8 20,15 20,14C20,13.05 19.66,12.22 18.96,11.53C18.26,10.84 17.41,10.5 16.41,10.5C15.47,10.5 14.64,10.83 13.92,11.5L9.14,15.56C8.7,16 8.17,16.22 7.55,16.22C6.92,16.22 6.39,16 5.95,15.56C5.5,15.13 5.3,14.61 5.3,14C5.3,13.42 5.5,12.91 5.95,12.47C6.39,12.03 6.92,11.81 7.55,11.81C8.14,11.81 8.69,12.03 9.19,12.47L9.94,13.13L10.92,12.23L10.08,11.53C9.39,10.84 8.55,10.5 7.55,10.5C6.58,10.5 5.74,10.84 5.04,11.53C4.34,12.22 4,13.05 4,14C4,15 4.34,15.8 5.04,16.5C5.74,17.15 6.59,17.5 7.59,17.5C8.53,17.5 9.36,17.16 10.08,16.5L14.86,12.42C15.27,12 15.8,11.81 16.45,11.81C17.08,11.81 17.61,12.03 18.05,12.47C18.5,12.91 18.7,13.42 18.7,14C18.7,14.61 18.5,15.13 18.05,15.56C17.61,16 17.08,16.22 16.45,16.22C15.89,16.22 15.34,16 14.81,15.5L14.06,14.86L13.08,15.75L13.92,16.45C14.61,17.14 15.45,17.5 16.45,17.5M19.36,10.03C20.64,10.13 21.73,10.65 22.64,11.6C23.55,12.55 24,13.69 24,15C24,16.38 23.5,17.55 22.5,18.54C21.54,19.5 20.36,20 19,20H6C4.34,20 2.93,19.43 1.76,18.26C0.59,17.09 0,15.67 0,14C0,12.55 0.5,11.23 1.57,10.05C2.62,8.88 3.88,8.22 5.34,8.06C6,6.84 6.92,5.86 8.11,5.11C9.3,4.36 10.59,4 12,4C13.69,4 15.26,4.58 16.71,5.77C18.16,6.95 19.05,8.38 19.36,10.03Z' /%3E%3C/svg%3E\");\n}\n.examples-root .icon.codepen {\n background-size: contain;\n background-image: url(\"data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3C!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3E%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' version='1.1' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath fill='%232b7ce9' d='M15.09,12L12,14.08V14.09L8.91,12L12,9.92V9.92L15.09,12M12,2C11.84,2 11.68,2.06 11.53,2.15L2.5,8.11C2.27,8.22 2.09,8.43 2,8.67V14.92C2,15.33 2,15.33 2.15,15.53L11.53,21.86C11.67,21.96 11.84,22 12,22C12.16,22 12.33,21.95 12.47,21.85L21.85,15.5C22,15.33 22,15.33 22,14.92V8.67C21.91,8.42 21.73,8.22 21.5,8.1L12.47,2.15C12.32,2.05 12.16,2 12,2M16.58,13L19.59,15.04L12.83,19.6V15.53L16.58,13M19.69,8.9L16.58,11L12.83,8.47V4.38L19.69,8.9M20.33,10.47V13.53L18.07,12L20.33,10.47M7.42,13L11.17,15.54V19.6L4.41,15.04L7.42,13M4.31,8.9L11.17,4.39V8.5L7.42,11L4.31,8.9M3.67,10.5L5.93,12L3.67,13.54V10.5Z' /%3E%3C/svg%3E\");\n}\n","import * as cheerio from \"cheerio\";\nimport type { AnyNode } from \"domhandler\";\n\nimport indexTemplate from \"./index.template.html\";\nimport styleTemplate from \"./index.template.css\";\nimport { ContentPart, Renderer, isExample } from \"../common\";\nimport { Example, Examples, ExamplesRoot } from \"../../types\";\nimport { formatHTML } from \"../format\";\n\n/**\n * @param example\n */\nfunction generateJSFiddle(example: Example): cheerio.Cheerio<AnyNode> {\n return cheerio\n .load([])(\"<a>\")\n .addClass(\"icon jsfiddle\")\n .attr(\"href\", example.paths.jsfiddle.web)\n .attr(\"title\", \"JSFiddle\");\n}\n\n/**\n * @param example\n */\nfunction generateCodePen(example: Example): cheerio.Cheerio<AnyNode> {\n return cheerio\n .load([])(\"<a>\")\n .addClass(\"icon codepen\")\n .attr(\"href\", example.paths.codepen.web)\n .attr(\"title\", \"CodePen\");\n}\n\n/**\n * @param examples\n * @param title\n * @param level\n * @param collator\n */\nfunction processGroup(\n examples: Examples,\n title: string,\n level: number,\n collator: Intl.Collator,\n): cheerio.Cheerio<AnyNode> {\n const heading = cheerio.load([])(`<h${Math.max(1, Math.min(6, level))}>`);\n heading.text(title);\n\n const list = cheerio.load([])(\"<div>\");\n\n const section = cheerio.load([])(\"<div>\");\n section.append(heading, list);\n\n for (const key of Object.keys(examples).sort(collator.compare)) {\n const example = examples[key];\n\n if (isExample(example)) {\n const header = cheerio\n .load([])(\"<div>\")\n .addClass(\"example-header\")\n .append(\n // Playgrounds\n generateJSFiddle(example),\n generateCodePen(example),\n // Title\n cheerio\n .load([])(\"<a>\")\n .attr(\"href\", example.paths.page.web)\n .text(key),\n );\n\n const image = cheerio\n .load([])(\"<a>\")\n .addClass(\"example-image\")\n .attr(\"href\", example.paths.page.web)\n .append(\n cheerio\n .load([])(\"<img>\")\n .attr(\"src\", example.paths.screenshot.web)\n .attr(\"alt\", key),\n );\n\n const item = cheerio\n .load([])(\"<span>\")\n .addClass(\"example-link\")\n .append(header, image);\n\n list.append(item);\n } else {\n section.append(processGroup(example, key, level + 1, collator));\n }\n }\n\n return section;\n}\n\nexport const htmlRenderer: Renderer = {\n async render(\n examples: ExamplesRoot,\n _output: string,\n title: string,\n collator: Intl.Collator,\n ): Promise<ContentPart[]> {\n const filename = \"index.html\";\n\n const root = cheerio.load([])(\"<div>\");\n root.addClass(\"examples-root\");\n\n for (const key of Object.keys(examples).sort(collator.compare)) {\n root.append(processGroup(examples[key], key, 1, collator));\n }\n\n const page = cheerio.load(indexTemplate);\n page(\"title\").text(title);\n page(\"body\").append(root);\n const content = await formatHTML(page.html());\n\n return [\n { content, filename, title },\n {\n content: styleTemplate,\n filename: \"examples.css\",\n title: \"examples.css\",\n },\n ];\n },\n screenshot: {\n width: 400,\n height: 400,\n },\n};\n","import { ContentPart, Renderer, isExample } from \"../common\";\nimport { Examples, ExamplesRoot } from \"../../types\";\nimport { formatMD } from \"../format\";\nimport { relative } from \"path\";\n\n/**\n * @param lines\n */\nfunction linesToContent(lines: string[]): Promise<string> {\n return formatMD(lines.join(\"\\n\"));\n}\n\n/**\n * @param title\n * @param src\n * @param href\n */\nfunction image(title: string, src: string, href?: string): string {\n return href == null\n ? `![${title}](${src})`\n : link(href, `![${title}](${src})`);\n}\n\n/**\n * @param href\n * @param text\n */\nfunction link(href: string, text: string = href): string {\n return `[${text}](${href})`;\n}\n\n/**\n * @param level\n * @param text\n */\nfunction header(level: number, text: string): string {\n return `${\"#\".repeat(level)} ${text}`;\n}\n\n/**\n * @param examples\n * @param output\n * @param title\n * @param collator\n */\nasync function processGroup(\n examples: Examples,\n output: string,\n title: string,\n collator: Intl.Collator,\n): Promise<ContentPart[]> {\n const items: string[] = [];\n const sections: ContentPart[] = [];\n const filenamePart = title.replace(/[^a-zA-Z0-9]/g, \"-\").toLowerCase();\n\n for (const key of Object.keys(examples).sort(collator.compare)) {\n const example = examples[key];\n\n if (isExample(example)) {\n // An example in this group.\n items.push(\n header(2, key),\n \"\",\n image(\n key,\n \"./\" + relative(output, example.paths.screenshot.local),\n example.paths.page.web,\n ),\n \"\",\n [\n link(example.paths.page.web, \"Open\"),\n link(example.paths.jsfiddle.web, \"JSFiddle\"),\n link(example.paths.codepen.web, \"CodePen\"),\n ].join(\" | \"),\n \"\",\n );\n } else {\n // A subgroup of examples.\n sections.push(\n ...(await processGroup(example, output, key, collator)).map(\n (contentPart): ContentPart => ({\n ...contentPart,\n filename: filenamePart + \".\" + contentPart.filename,\n }),\n ),\n );\n }\n }\n\n return [\n {\n content: await linesToContent([header(1, title), \"\", ...items]),\n filename: filenamePart + \".md\",\n title,\n },\n ...sections,\n ];\n}\n\nexport const mdRenderer: Renderer = {\n async render(\n examples: ExamplesRoot,\n output: string,\n _title: string,\n collator: Intl.Collator,\n ): Promise<ContentPart[]> {\n const sections: ContentPart[] = [];\n\n for (const key of Object.keys(examples).sort(collator.compare)) {\n sections.push(\n ...(await processGroup(examples[key], output, key, collator)),\n );\n }\n\n return [\n {\n content: await linesToContent([\n header(1, \"Examples\"),\n \"\",\n ...sections.map(\n ({ filename, title }): string =>\n \"- \" + link(\"./\" + filename, title),\n ),\n ]),\n filename: \"README.md\",\n title: \"Examples\",\n },\n ...sections,\n ];\n },\n screenshot: {\n width: 740,\n height: 250,\n },\n};\n","import yargs from \"yargs\";\nimport { hideBin } from \"yargs/helpers\";\n\nconst y = yargs(hideBin(process.argv))\n .strict(true)\n .usage(\"generate-example-index [options]\")\n .hide(\"version\")\n .config()\n .help()\n\n .option(\"assets-local-directory\", {\n default: \"./examples/thumbnails\",\n describe: \"The directory where assets will be written to.\",\n type: \"string\",\n })\n .option(\"assets-web-directory\", {\n default: \"./thumbnails\",\n describe: \"The directory where assets will be loaded from on the web.\",\n type: \"string\",\n })\n .option(\"base-url\", {\n demand: true,\n describe:\n \"The base URL for relative imports. Web URLs starting with slash will be relative to this URL.\",\n type: \"string\",\n })\n .option(\"examples-local-directory\", {\n default: \"./examples/thumbnails\",\n describe: \"The directory where examples will be loaded from locally.\",\n type: \"string\",\n })\n .option(\"examples-web-directory\", {\n default: \"./thumbnails\",\n describe: \"The directory where examples will be loaded from on the web.\",\n type: \"string\",\n })\n .option(\"output-directory\", {\n default: \"./examples\",\n describe: \"The directory where generated files will be emitted.\",\n type: \"string\",\n })\n .option(\"pages-local-directory\", {\n default: \"./examples/pages\",\n describe: \"The directory where pages will be written to.\",\n type: \"string\",\n })\n .option(\"pages-web-directory\", {\n default: \"./pages\",\n describe: \"The directory where pages will be loaded from on the web.\",\n type: \"string\",\n })\n\n .option(\"index\", {\n default: false,\n describe: \"Generate index files.\",\n type: \"boolean\",\n })\n .option(\"lint\", {\n default: false,\n describe: \"Lint examples.\",\n type: \"boolean\",\n })\n .option(\"playgrounds\", {\n default: false,\n describe: \"Generate playground pages.\",\n type: \"boolean\",\n })\n .option(\"screenshots\", {\n default: false,\n describe: \"Render screenshot thumbnails.\",\n type: \"boolean\",\n })\n\n .option(\"container-id\", {\n default: \"vis-container\",\n describe: \"The id of the elements where Vis will put canvas.\",\n type: \"string\",\n })\n .option(\"format\", {\n default: \"html\",\n describe: \"Whether HTML or Markdown should be generated.\",\n type: \"string\",\n })\n .option(\"parallel\", {\n default: 6,\n describe:\n \"Generate n screenshots at the same time (there is quite high delay to make sure the graph is rendered before the screenshot is taken so the CPU utilization is generally quite low).\",\n type: \"number\",\n })\n .option(\"screenshot-script\", {\n describe:\n \"The path of JavaScript file that will be executed before taking a screenshot (and before any other JavaScript in the page).\",\n type: \"string\",\n })\n .option(\"title\", {\n default: \"Examples\",\n describe: \"The title of the examples index.\",\n type: \"string\",\n })\n .option(\"verify\", {\n default: 100,\n describe:\n \"Attempt to verify that the examples were generated correctly. The value is a percentage of checks that have to pass for the run to be considered success.\",\n type: \"number\",\n });\n\n/**\n *\n */\nexport function parseArguments(): ReturnType<(typeof y)[\"parseSync\"]> {\n return y.parserConfiguration({ \"camel-case-expansion\": false }).parseSync();\n}\n","import { Example, ExamplePath, ExamplePaths } from \"./types\";\nimport { createHash } from \"crypto\";\nimport { relative, resolve } from \"path\";\n\n/**\n * @param urls\n */\nexport function joinURLs(...urls: string[]): string {\n return urls\n .map((url): string =>\n // Strip the parts of leading and trailing slashes if they have them.\n url.replace(/^\\/?(.*?)\\/?$/, \"$1\"),\n )\n .join(\"/\");\n}\n\n/**\n * @param baseURL\n * @param url\n */\nexport function fixAbsoluteInputURL(baseURL: string, url: string): string {\n return url.startsWith(\"/\")\n ? // Relative to the base URL. Base URL starts and URL ends with a slash.\n baseURL + url.slice(1)\n : // Relative to some other point or absolute already.\n url;\n}\n\n/**\n * @param config\n * @param exampleAbsolutePath\n */\nexport function generatePaths(\n config: ExamplePaths,\n exampleAbsolutePath: Example[\"path\"],\n): ExamplePaths {\n const exampleRelativePath = relative(config.page.local, exampleAbsolutePath);\n\n // It's important that the hash is created from the relative path so that it\n // is the same on all computers.\n const hash = createHash(\"sha256\").update(exampleRelativePath).digest(\"hex\");\n\n return {\n codepen: generateLocalWebPair(\n config.codepen.local,\n config.codepen.web,\n hash,\n \"codepen\",\n \"html\",\n ),\n jsfiddle: generateLocalWebPair(\n config.jsfiddle.local,\n config.jsfiddle.web,\n hash,\n \"jsfiddle\",\n \"html\",\n ),\n page: {\n local: exampleAbsolutePath,\n web: joinURLs(config.page.web, exampleRelativePath),\n },\n screenshot: generateLocalWebPair(\n config.screenshot.local,\n config.screenshot.web,\n hash,\n \"screenshot\",\n \"png\",\n ),\n };\n}\n\n/**\n * @param localRoot\n * @param webRoot\n * @param hash\n * @param prefix\n * @param extension\n */\nfunction generateLocalWebPair(\n localRoot: string,\n webRoot: string,\n hash: string,\n prefix: string,\n extension: string,\n): ExamplePath {\n const filename = `${prefix}.${hash}.${extension}`;\n\n return {\n local: resolve(localRoot, filename),\n web: joinURLs(webRoot, filename),\n };\n}\n","import * as cheerio from \"cheerio\";\nimport fs from \"fs\";\nimport util from \"util\";\nimport yargs from \"yargs\";\nimport { posix } from \"path\";\nimport { resolve } from \"path\";\n\nimport {\n ContentBuilder,\n generatePlaygroundData,\n htmlRenderer,\n mdRenderer,\n reduceReports,\n formatStartStopMs,\n} from \"./content-builder\";\nimport { Example, ExamplesRoot, ExamplePaths } from \"./types\";\nimport { parseArguments } from \"./cli\";\nimport { generatePaths, fixAbsoluteInputURL } from \"./paths\";\n\nconst argv = parseArguments();\n\n// Log the parsed configuration for debugging purposes.\nconsole.info(\"Configuration: \", JSON.stringify(argv, null, 2));\nprocess.stdout.write(\"\\n\");\n\n// Pageres uses quite a lot of listeners when invoked multiple times in\n// parallel. This ensures there are no warnings about it.\nprocess.setMaxListeners(40);\n\n// Resolve paths relative to PWD.\nconst screenshotScriptPath =\n typeof argv[\"screenshot-script\"] === \"string\"\n ? resolve(argv[\"screenshot-script\"])\n : undefined;\n\nconst mkdir = util.promisify(fs.mkdir);\nconst readFile = util.promisify(fs.readFile);\n\nfunction getMeta<T>(page: cheerio.CheerioAPI, name: string, fallback: T): T;\n/**\n * Extract and coerce a value from meta tag.\n * @param page - The page to be queried.\n * @param name - The name of the meta tag.\n * @param fallback - The value to be used if the meta tag is not present.\n * @returns The value “smartly” coerced or the fallback if conversion isn't\n * possible or the value is not present in the page.\n */\nfunction getMeta(\n page: cheerio.CheerioAPI,\n name: string,\n fallback: number | string,\n): number | string {\n const content = page(`meta[name=\"${name}\"]`).attr(\"content\");\n\n if (content == null) {\n // No meta of this name exists in the page, use the fallback.\n return fallback;\n } else if (!Number.isNaN(+content)) {\n // Number.\n return +content;\n } else if (typeof content === \"string\") {\n // String.\n return content;\n } else {\n // Something doesn't match, use the fallback.\n return fallback;\n }\n}\n\n/**\n * Test if the example conforms to the conventions.\n * @param path - The path to the example (used for identification in logs).\n * @param page - The HTML to be linted.\n * @returns True if everything's okay, false otherwise.\n */\nfunction lintExample(path: string, page: cheerio.CheerioAPI): boolean {\n let valid = true;\n const msgs = [`${path}:`];\n\n if (page(\"#title\").length !== 1) {\n msgs.push(\"Missing #title element in the body.\");\n valid = false;\n }\n\n if (page(\"#title > *\").length < 2) {\n msgs.push(\n \"There have to be at least two headings (group and example name).\",\n );\n valid = false;\n }\n\n const headTitle = page(\"head > title\").text().trim();\n const bodyTitle = page(\"#title > *\")\n .map((_i, elem): string => cheerio.load([])(elem).text())\n .get()\n .join(\" | \")\n .trim();\n if (headTitle !== bodyTitle) {\n msgs.push(\n \"The title in the head doesn't match the title in the body.\",\n ` head: ${headTitle}`,\n ` body: ${bodyTitle}`,\n );\n valid = false;\n }\n\n if (msgs.length > 1) {\n console.warn(\"\\n\" + msgs.join(\"\\n \"));\n }\n\n return valid;\n}\n\n(async (): Promise<void> => {\n let code = 0;\n\n if (!argv.index && !argv.screenshots && !argv.lint) {\n yargs.parse(\"--help\");\n return;\n }\n\n // Ensure that all paths exist.\n await Promise.all(\n [\n argv[\"assets-local-directory\"],\n argv[\"examples-local-directory\"],\n argv[\"output-directory\"],\n argv[\"pages-local-directory\"],\n ].map(async (path): Promise<void> => {\n await mkdir(path, { recursive: true });\n }),\n );\n\n const baseURL = argv[\"base-url\"];\n if (!baseURL.endsWith(\"/\")) {\n throw new Error(\"Base URL (`base-url`) has to end with a slash (`/`).\");\n }\n\n // Paths.\n const pathsConfig: ExamplePaths = {\n codepen: {\n local: argv[\"pages-local-directory\"],\n web: fixAbsoluteInputURL(baseURL, argv[\"pages-web-directory\"]),\n },\n jsfiddle: {\n local: argv[\"pages-local-directory\"],\n web: fixAbsoluteInputURL(baseURL, argv[\"pages-web-directory\"]),\n },\n page: {\n local: argv[\"examples-local-directory\"],\n web: fixAbsoluteInputURL(baseURL, argv[\"examples-web-directory\"]),\n },\n screenshot: {\n local: argv[\"assets-local-directory\"],\n web: fixAbsoluteInputURL(baseURL, argv[\"assets-web-directory\"]),\n },\n };\n\n const examples: ExamplesRoot = {};\n const selector = \"#\" + argv[\"container-id\"];\n const stats = { examples: 0 };\n const skipped: string[] = [];\n\n await Promise.all(\n (\n await (\n await import(\"globby\")\n ).globby(posix.join(pathsConfig.page.local, \"**/*.html\"))\n ).map(async (pagePath): Promise<any> => {\n const html = await readFile(pagePath, \"utf-8\");\n const $page = cheerio.load(html);\n const pageDelay = getMeta<number | \"call\">(\n $page,\n \"example-screenshot-delay\",\n 6,\n );\n const pageTimeout = getMeta<number>(\n $page,\n \"example-screenshot-timeout\",\n 60,\n );\n const pageSelector = getMeta<string>(\n $page,\n \"example-screenshot-selector\",\n selector,\n );\n\n // Is this an examples?\n if ($page(pageSelector).length === 0) {\n skipped.push(pagePath);\n return;\n }\n\n // Lint if requested.\n if (argv.lint) {\n lintExample(pagePath, $page);\n }\n\n // Body titles.\n let titles = $page(\"#title > *\")\n .get()\n .map((elem): string => $page(elem).text().trim());\n\n // Head title fallback.\n if (titles.length < 2) {\n titles = $page(\"head > title\")\n .text()\n .split(\"|\")\n .map((title): string => title.trim());\n }\n\n // File path fallback.\n if (titles.length < 2) {\n titles = pagePath.split(\"/\");\n }\n\n // Just ignore it.\n if (titles.length < 2) {\n console.error(\"Title resolution failed. Skipping.\");\n return;\n }\n\n const example: Example = {\n $: $page,\n delay: pageDelay,\n html,\n path: pagePath,\n paths: generatePaths(pathsConfig, pagePath),\n playground: await generatePlaygroundData(baseURL, $page, pagePath),\n selector: pageSelector,\n timeout: pageTimeout,\n titles,\n };\n\n // Put this example into the structure while creating any missing groups in the process.\n titles.reduce((acc, title, i, arr): any => {\n while (acc[title] != null && acc[title].path != null) {\n console.error(\"The following group already exists: \", titles);\n title += \"!\";\n }\n\n if (i === arr.length - 1) {\n if (acc[title] != null) {\n console.error(\n \"The following example has the same name as an already existing group: \",\n titles,\n );\n return null;\n } else {\n acc[title] = example;\n\n ++stats.examples;\n }\n } else {\n return (acc[title] = acc[title] || {});\n }\n }, examples as any);\n }),\n );\n\n if (skipped.length) {\n process.stdout.write(\"\\n\");\n console.info(\n [\n \"The following files don't look like examples (there is nothing to take a screenshot of):\",\n ...skipped.sort(),\n ].join(\"\\n \"),\n );\n }\n\n if (stats.examples === 0) {\n console.info(\"No usable example files were found.\");\n } else if (argv.index || argv.playgrounds || argv.screenshots) {\n process.stdout.write(\"\\n\");\n\n const screenshotScript =\n screenshotScriptPath != null\n ? (await readFile(screenshotScriptPath, \"utf-8\")) || \"\"\n : \"\";\n\n const builtData = new ContentBuilder({\n examples,\n output: resolve(argv[\"output-directory\"]),\n parallel: argv.parallel,\n renderer: argv.format === \"md\" ? mdRenderer : htmlRenderer,\n screenshotScript,\n title: argv.title,\n }).build({\n index: argv.index,\n playgrounds: argv.playgrounds,\n screenshots: argv.screenshots,\n });\n\n // Create and write the page.\n if (argv.index) {\n const cummulativeReport = reduceReports(await builtData.index);\n console.info(\n `Index with ${stats.examples} examples written (${\n cummulativeReport.count\n } files in ${formatStartStopMs(cummulativeReport)}).`,\n );\n }\n\n // Create and write the playgrounds.\n if (argv.index) {\n const cummulativeReport = reduceReports(await builtData.playgrounds);\n console.info(\n `Playground opener files for ${stats.examples} examples written (${\n cummulativeReport.count\n } files in ${formatStartStopMs(cummulativeReport)}).`,\n );\n }\n\n // Create and write the screenshots.\n if (argv.screenshots) {\n const cummulativeReport = reduceReports(await builtData.screenshots);\n console.info(\n `Screenshot files for ${stats.examples} written (${\n cummulativeReport.count\n } files in ${formatStartStopMs(cummulativeReport)}).`,\n );\n }\n\n // Verify the result.\n const checks = await builtData.checks;\n process.stdout.write(\"\\n\");\n if (checks.fail === 0) {\n console.info(\n `Verification: ${checks.okay} passed (${Math.round(\n checks.percentage,\n )} %) passed.`,\n );\n } else {\n if (checks.percentage >= argv.verify) {\n console.info(\n `Verification: ${checks.okay} passed (${Math.round(\n checks.percentage,\n )} %), ${checks.fail} failed.\\n` +\n \"This is within the threshold set by --verify.\",\n );\n } else {\n console.error(\n `Verification: Only ${checks.okay} passed (${Math.round(\n checks.percentage,\n )} %), ${checks.fail} failed.\\n` +\n \"This is not within the threshold set by --verify. Exiting with an error.\",\n );\n code = 3;\n }\n\n checks.failPaths.forEach((path): void => {\n console.error(path);\n });\n }\n }\n\n process.exitCode = code;\n})().catch((error): void => {\n process.exitCode = 1;\n console.error(error);\n});\n"],"names":["cheerioheerio","template","writeFile","commonScreenshotScript","resolve","index_template_default","processGroup","indexTemplate","styleTemplate"],"mappings":"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"}
@@ -6,8 +6,8 @@
6
6
  *
7
7
  * Development utilities for the Vis family projects.
8
8
  *
9
- * @version 5.0.2
10
- * @date 2025-07-19T14:03:21.252Z
9
+ * @version 5.0.4
10
+ * @date 2025-08-01T18:59:42.551Z
11
11
  *
12
12
  * @copyright (c) 2011-2017 Almende B.V, http://almende.com
13
13
  * @copyright (c) 2017-2019 visjs contributors, https://github.com/visjs
@@ -4,8 +4,8 @@
4
4
  *
5
5
  * Development utilities for the Vis family projects.
6
6
  *
7
- * @version 5.0.2
8
- * @date 2025-07-19T14:03:21.252Z
7
+ * @version 5.0.4
8
+ * @date 2025-08-01T18:59:42.551Z
9
9
  *
10
10
  * @copyright (c) 2011-2017 Almende B.V, http://almende.com
11
11
  * @copyright (c) 2017-2019 visjs contributors, https://github.com/visjs
@@ -317,7 +317,7 @@ const generateRollupPluginArray = (libraryFilename, assets, copyTargetsBundle, c
317
317
  babelrc: false,
318
318
  configFile: false,
319
319
  exclude: BABEL_IGNORE_RE,
320
- extensions: [".js", ".ts"],
320
+ extensions: [".js", ".ts", ".mjs", ".cjs"],
321
321
  presets: [["vis-dev-utils/babel-preset", { ts: true }]]
322
322
  })
323
323
  ] : [],
@@ -1 +1 @@
1
- {"version":3,"file":"vis-dev-utils.cjs","sources":["../src/module/constants.ts","../src/module/header.ts","../src/module/generate-rollup-configuration/index.ts","../src/module/inspect-npm-pack.ts"],"sourcesContent":["export const BABEL_IGNORE_RE = /[\\\\/]node_modules[\\\\/](?!.*[\\\\/]esnext[\\\\/])/;\n","import { readFile } from \"fs/promises\";\n\n/**\n * Take a string and return a doc block comment.\n * @param string - The raw text to be included in the comment.\n * @throws If the string already contains a comment.\n * @returns A block doc comment string that can be for example prepended to a\n * bundled JavaScript file.\n */\nexport function textToComment(string: string): string {\n if (string.includes(\"*/\")) {\n throw new Error(\n \"Don't include comments in the input string. It will be converted automatically.\",\n );\n }\n\n return (\n \"/**\\n\" +\n string\n // Remove empty lines from the start.\n .replace(/^[\\n\\r]*/, \"\")\n // Remove empty lines from the end.\n .replace(/[\\n\\r\\s]*$/, \"\")\n // Process each line on it's own from now on.\n .split(\"\\n\")\n // Prefix each line with an asterisk.\n .map((line) => \" * \" + line)\n // Remove trailing white space.\n .map((line) => line.replace(/[^\\S\\r\\n]*$/, \"\"))\n // Join back into a string.\n .join(\"\\n\") +\n \"\\n */\\n\"\n );\n}\n\nconst buildHeader = ({\n customText,\n date,\n description,\n homepage,\n name,\n version,\n}: HeaderOptions): string =>\n textToComment(`\n${name}\n${homepage}\n\n${description}\n\n@version ${version}\n@date ${date}\n\n@copyright (c) 2011-2017 Almende B.V, http://almende.com\n@copyright (c) 2017-2019 visjs contributors, https://github.com/visjs\n\n@license\nvis.js is dual licensed under both\n\n 1. The Apache 2.0 License\n http://www.apache.org/licenses/LICENSE-2.0\n\n and\n\n 2. The MIT License\n http://opensource.org/licenses/MIT\n\nvis.js may be distributed under either license.\n\n${customText}\n`);\n\n/**\n * Options for {@link generateHeader}.\n */\nexport interface HeaderOptions {\n /** Any text to be appended to the standard header. */\n customText: string;\n /** The build date. */\n date: string;\n /** A description of the project. */\n description: string;\n /** An URL to the homepage of the project. */\n homepage: string;\n /** The name of the project. */\n name: string;\n /** The version of the build. */\n version: string;\n}\n\nconst defaultDate = new Date().toISOString();\n\n/**\n * Generate a dynamic header banner.\n * @param options - Optional information to be included. Otherwise no custom\n * text will be appended, the date will be the time when this module was\n * imported (most likely the start of the build process) and the rest will be\n * read from package.json.\n * @throws If the string already contains a comment.\n * @returns Ready to use banner text.\n */\nexport async function generateHeader(\n options?: Partial<HeaderOptions>,\n): Promise<string> {\n const packageJSON = JSON.parse(\n await readFile(\n (await import(\"find-up\")).findUpSync(\"package.json\")!,\n \"utf8\",\n ),\n );\n\n const defaultDescription = packageJSON.description;\n const defaultHomepage = packageJSON.homepage;\n const defaultName = packageJSON.name;\n const defaultVersion = packageJSON.version;\n\n const {\n customText = \"\",\n date = defaultDate,\n description = defaultDescription,\n homepage = defaultHomepage,\n name = defaultName,\n version = defaultVersion,\n } = options || {};\n\n return buildHeader({\n customText,\n date,\n description,\n homepage,\n name,\n version,\n });\n}\n","import fs from \"node:fs/promises\";\nimport { fileURLToPath, URL } from \"node:url\";\nimport { type RollupOptions, type Plugin } from \"rollup\";\nimport analyzerPlugin from \"rollup-plugin-analyzer\";\nimport babelPlugin from \"@rollup/plugin-babel\";\nimport commonjsPlugin from \"@rollup/plugin-commonjs\";\nimport copyPlugin, { Target as CopyTarget } from \"rollup-plugin-copy\";\nimport jsonPlugin from \"@rollup/plugin-json\";\nimport nodeResolvePlugin from \"@rollup/plugin-node-resolve\";\nimport postcssAssetsPlugin from \"postcss-assets\";\nimport postcssPlugin from \"rollup-plugin-postcss\";\nimport stripCodePlugin from \"rollup-plugin-strip-code\";\nimport terserPlugin from \"@rollup/plugin-terser\";\nimport typescriptPlugin from \"@rollup/plugin-typescript\";\nimport { generateHeader } from \"../header\";\nimport { join, resolve, sep } from \"path\";\nimport { string as stringPlugin } from \"rollup-plugin-string\";\nimport {\n config as chaiConfig,\n expect as validateExpect,\n use as chaiUse,\n} from \"chai\";\n\nimport { BABEL_IGNORE_RE } from \"../constants\";\nimport { type HeaderOptions } from \"../header\";\nimport { type OptionalOptions } from \"../util\";\nimport { dirname } from \"node:path\";\n\nconst rawGlobby = import(\"globby\");\n\nchaiConfig.truncateThreshold = Number.MAX_SAFE_INTEGER;\n\nconst VIS_DEBUG = [\"1\", \"true\", \"y\", \"yes\"].includes(\n process.env[\"VIS_DEBUG\"] || \"false\",\n);\nconst VIS_TEST = [\"1\", \"true\", \"y\", \"yes\"].includes(\n process.env[\"VIS_TEST\"] || \"false\",\n);\n\n/**\n * Simple glob with workaround for non-posix paths.\n * @param pattern - Single glob pattern.\n * @returns Globbed paths.\n */\nasync function glob(\n pattern: string,\n): ReturnType<(typeof import(\"globby\"))[\"globby\"]> {\n return (await rawGlobby).globby(\n sep === \"\\\\\" ? pattern.replace(/\\\\/g, \"/\") : pattern,\n );\n}\n\nexport interface GRCOptions {\n /**\n * Where to look for files when inlining assets into CSS.\n */\n assets: string;\n /**\n * Additional files to be copied.\n */\n copyTargets: {\n /**\n * These will be copied relative to the root of each bundle (esnext,\n * standalone…).\n */\n bundle: CopyTarget[];\n /**\n * These will be copied relative to the root of each variant of each bundle\n * (esnext/esm, esnext/umd, standalone/esm…).\n */\n variant: CopyTarget[];\n };\n /**\n * The base dir with entry points for various builds. The extensions\n * determines whether TypeScript processing will be used.\n */\n entryPoints: string;\n /**\n * These are the dependencies that would cause interoperability issues if they\n * were bundled. A notable example here is vis-data.\n */\n externalForPeerBuild: string[];\n /**\n * Passed straight to Rollup.\n */\n globals: Record<string, string>;\n /**\n * Options for {@link generateHeader}.\n */\n header: Partial<HeaderOptions>;\n /**\n * This will be used as a file name with appropriate extensions appended\n * (like .js, .min.js or .css).\n */\n libraryFilename: string;\n /**\n * Simply required package.json.\n */\n packageJSON: Partial<{\n browser: string;\n dependencies: Record<string, string>;\n devDependencies: Record<string, string>;\n exports: Record<string, Record<string, string | undefined> | undefined>;\n files: string[];\n jsnext: string;\n main: string;\n module: string;\n peerDependencies: Record<string, string>;\n types: string;\n }>;\n /**\n * The path to tsconfig.json to be used in this build.\n */\n tsconfig: string;\n}\n\n/**\n * These are the dependencies that follow standalone/peer/ESNext export\n * structure.\n */\nconst dependenciesWithVisExportStructure = [\n \"vis-data\",\n \"vis-graph3d\",\n \"vis-network\",\n \"vis-timeline\",\n \"vis-util\",\n \"vis-uuid\",\n];\n\n/**\n * This ensures that dependencies on Vis projects point to ESNext builds.\n * @param deps - The original dependencies as listed in package.json.\n * @returns An array of dependencies for Rollup.\n */\nfunction processDependencies(\n deps: string[] | Record<string, string>,\n): string[] {\n const depNames = Array.isArray(deps) ? deps : Object.keys(deps);\n\n return depNames.flatMap((key): string[] =>\n dependenciesWithVisExportStructure.includes(key)\n ? [key + \"/esnext\"]\n : [key],\n );\n}\n\n/**\n * This ensures that all Vis projects are imported using ESNext builds.\n * Importing standalone versions will not only cause problems in production but\n * will log warnings during build process and won't work at all.\n * @param globals - The original globals.\n * @returns Globals forcing the use of ESNext builds for Vis projects.\n */\nfunction processGlobals(\n globals: Record<string, string>,\n): Record<string, string> {\n return Object.entries(globals).reduce<Record<string, string>>(\n (acc, [key, value]): Record<string, string> => {\n acc[\n dependenciesWithVisExportStructure.includes(key) ? key + \"/esnext\" : key\n ] = value;\n\n return acc;\n },\n Object.create(null),\n );\n}\n\n/**\n * @param path\n */\nfunction isTS(path: string): boolean {\n return path.endsWith(\".ts\");\n}\n\n/*\n * Make sure that Chai doesn't throw and therefore stop execution on failed\n * validations during debugging.\n */\nconst validate: (\n callback: (expect: Chai.ExpectStatic) => Promise<void> | void,\n) => Promise<void> = VIS_DEBUG\n ? async (\n callback: (expect: Chai.ExpectStatic) => Promise<void> | void,\n ): Promise<void> => {\n try {\n await callback(validateExpect);\n } catch (error) {\n console.error(error);\n }\n }\n : async (\n callback: (expect: Chai.ExpectStatic) => Promise<void> | void,\n ): Promise<void> => {\n await callback(validateExpect);\n };\n\n/**\n * Transform ESNext import paths to match the build version being constructed.\n * @param buildVariant - ESNext or peer build. This is not available for\n * standalone as only peer and ESNext have imports.\n * @param moduleFormat - What kind of module system to use.\n * @returns Path overrides for Rollup.\n */\nfunction getPaths(\n buildVariant: \"esnext\" | \"peer\",\n moduleFormat: \"esm\" | \"umd\",\n): Record<string, string> {\n /**\n * @param lib\n */\n function getPath(\n lib:\n | \"charts\"\n | \"data\"\n | \"graph3d\"\n | \"network\"\n | \"timeline\"\n | \"util\"\n | \"uuid\",\n ): Record<string, string> {\n return {\n [`vis-${lib}/esnext`]: `vis-${lib}/${buildVariant}/${moduleFormat}/vis-${lib}.js`,\n };\n }\n\n return {\n ...getPath(\"charts\"),\n ...getPath(\"data\"),\n ...getPath(\"graph3d\"),\n ...getPath(\"network\"),\n ...getPath(\"timeline\"),\n ...getPath(\"util\"),\n ...getPath(\"uuid\"),\n };\n}\n\n/**\n * Change target's dest so that it's relative to given dir(s).\n * @param dirs - The directories there targets should be relative to.\n * @returns A function that can be directly supplied to Array.map().\n */\nfunction scopeCopyTarget(\n ...dirs: readonly string[]\n): (target: CopyTarget) => CopyTarget {\n return function (target): CopyTarget {\n const dest = (\n Array.isArray(target.dest) ? target.dest : [target.dest]\n ) as readonly string[];\n\n const bundleDest = dest.flatMap((path): string[] =>\n dirs.map((dir): string => join(dir, path)),\n );\n\n return {\n ...target,\n dest: bundleDest,\n };\n };\n}\n\nconst injectCSS = true;\nconst minimize = true;\nconst transpile = true;\nconst generateRollupPluginArray = (\n libraryFilename: string,\n assets: string,\n copyTargetsBundle: readonly CopyTarget[],\n copyTargetsVariant: readonly CopyTarget[],\n tsconfig: string,\n mode: \"production\" | \"development\" | \"test\",\n bundleType: \"esnext\" | \"standalone\" | \"peer\",\n {\n injectCSS = false,\n minimize = false,\n strip = mode === \"production\",\n transpile = false,\n typescript = false,\n } = {},\n): Plugin[] => {\n const fullLibraryFilename = `${libraryFilename}${minimize ? \".min\" : \"\"}`;\n\n const bundleDir = bundleType;\n const bundleVariantDirs = [\"esm\", \"umd\"].map((variant): string =>\n join(bundleDir, variant),\n );\n\n return [\n ...(strip\n ? [\n // This should be first because it removes code from source files.\n // It's much easier to follow if the removal happens before any\n // transformations.\n stripCodePlugin({\n start_comment: \"develblock:start\",\n end_comment: \"develblock:end\",\n }),\n ]\n : [\n // Remove the comments marking devel blocks as they can cause problems\n // later on because transpilation shuffles things around which may\n // lead to all kinds of issues including syntax errors.\n stripCodePlugin({\n pattern: /[\\t ]*\\/\\* ?develblock:(start|end) ?\\*\\//g,\n }),\n ]),\n analyzerPlugin(VIS_DEBUG ? undefined : { limit: 10, summaryOnly: true }),\n copyPlugin({\n verbose: VIS_DEBUG,\n targets: [\n // JavaScript\n {\n src: resolve(\n dirname(fileURLToPath(new URL(import.meta.url))),\n \"assets/bundle-root.js\",\n ),\n dest: bundleDir,\n rename: \"index.js\",\n },\n {\n src: resolve(\n dirname(fileURLToPath(new URL(import.meta.url))),\n \"assets/bundle-index.js\",\n ),\n dest: bundleVariantDirs,\n rename: \"index.js\",\n transform: (content: Buffer): string =>\n content.toString().replace(\"{{filename}}\", libraryFilename),\n },\n\n // TypeScript\n {\n src: resolve(\n dirname(fileURLToPath(new URL(import.meta.url))),\n \"assets/bundle-root.d.ts\",\n ),\n dest: bundleDir,\n rename: \"index.d.ts\",\n },\n {\n src: resolve(\n dirname(fileURLToPath(new URL(import.meta.url))),\n \"assets/bundle-index.d.ts\",\n ),\n dest: bundleVariantDirs,\n rename: \"index.d.ts\",\n transform: (content: Buffer): string =>\n content.toString().replace(\"{{filename}}\", libraryFilename),\n },\n {\n src: resolve(\n dirname(fileURLToPath(new URL(import.meta.url))),\n \"assets/bundle-file.d.ts\",\n ),\n dest: bundleVariantDirs,\n rename: `${fullLibraryFilename}.d.ts`,\n transform: (content: Buffer): string =>\n content.toString().replace(\"{{bundle-type}}\", bundleType),\n },\n\n // Custom\n ...copyTargetsBundle.map(scopeCopyTarget(bundleDir)),\n ...copyTargetsVariant.map(scopeCopyTarget(...bundleVariantDirs)),\n ],\n }),\n nodeResolvePlugin({\n browser: true,\n extensions: [\".js\", \".json\", \".ts\"],\n mainFields: [\"jsnext\", \"module\", \"main\"],\n preferBuiltins: false,\n }),\n ...(typescript\n ? [\n typescriptPlugin({\n tsconfig,\n }),\n ]\n : []),\n commonjsPlugin(),\n postcssPlugin({\n extract: !injectCSS && `styles/${fullLibraryFilename}.css`,\n inject: injectCSS,\n minimize,\n // Prevent the sourcemaps from being injected into JS files.\n sourceMap: !injectCSS,\n plugins: [\n postcssAssetsPlugin({\n loadPaths: [assets],\n }),\n ],\n }),\n jsonPlugin(),\n stringPlugin({\n include: \"**/*.txt\",\n }),\n ...(transpile\n ? [\n babelPlugin({\n babelHelpers: \"runtime\",\n babelrc: false,\n configFile: false,\n exclude: BABEL_IGNORE_RE,\n extensions: [\".js\", \".ts\"],\n presets: [[\"vis-dev-utils/babel-preset\", { ts: true }]],\n }),\n ]\n : []),\n ...(minimize\n ? [\n terserPlugin({\n format: {\n comments: \"some\",\n },\n }),\n ]\n : []),\n ];\n};\n\n/**\n * Prepare ready to use Rollup configuration file.\n * @remarks\n * IMPORTANT: Use `babel.config.js` in the root of the project, `.babelrc` files\n * are ignored.\n *\n * You can surround any piece of code with `stripInProduction: { debug code }`\n * to strip it from the generated bundles unless VIS_DEBUG=true environmental\n * variable is set. This is useful for example to render bounding boxes during\n * debugging but automatically switch it off without any performance or bundle\n * size penalty in production. Debugger statements are also automatically\n * stripped.\n *\n * Plugins:\n * - `\\@rollup/plugin-babel` (skipped in ESNext)\n * - `\\@rollup/plugin-commonjs`\n * - `\\@rollup/plugin-json`\n * - `\\@rollup/plugin-node-resolve`\n * - `\\@rollup/plugin-strip` (skipped with VIS_DEBUG=true env var)\n * - `\\@rollup/plugin-terser` (only in minified)\n * - `postcss-assets`\n * - `rollup-plugin-copy`\n * - `rollup-plugin-postcss`\n * - `rollup-plugin-typescript2` (skipped if the entry is .js)\n * @param options - See {@link GRCOptions}.\n * @param mode - Whether the code should be processed for production,\n * development or testing.\n * @returns Ready to use configuration object that can be just exported from\n * `rollup.config.js` or mutated in any way if necessary.\n */\nexport async function generateRollupConfiguration(\n options: OptionalOptions<GRCOptions>,\n mode: \"production\" | \"development\" | \"test\" = VIS_TEST\n ? \"test\"\n : VIS_DEBUG\n ? \"development\"\n : \"production\",\n): Promise<RollupOptions[]> {\n const {\n assets = \".\",\n copyTargets: {\n bundle: copyTargetsBundle = [],\n variant: copyTargetsVariant = [],\n } = {} as GRCOptions[\"copyTargets\"],\n externalForPeerBuild = [],\n globals = {},\n header = { name: \"Unknown Library\" },\n libraryFilename = \"unknown-library\",\n packageJSON: {\n dependencies = {},\n devDependencies = {},\n peerDependencies = {},\n ...packageJSONRest\n } = {} as GRCOptions[\"packageJSON\"],\n entryPoints: entryPoint = \"./src\",\n tsconfig = \"tsconfig.json\",\n }: GRCOptions = (options || {}) as GRCOptions;\n\n validate((expect): void => {\n // Note: Every array is a superset of empty array.\n if (Object.keys(peerDependencies).length > 0) {\n expect(\n Object.keys(dependencies),\n \"The dependencies and peer dependencies have to be disjoint sets\",\n )\n .to.be.an(\"array\")\n .that.does.not.include.any.members(Object.keys(peerDependencies));\n }\n });\n validate((expect): void => {\n expect(\n Object.keys(devDependencies),\n \"For convenience all peer dependencies also have to be dev dependencies\",\n )\n .to.be.an(\"array\")\n .that.includes.all.members(Object.keys(peerDependencies));\n });\n validate((expect): void => {\n expect(\n Object.keys(peerDependencies),\n \"Peer build externals have to be a subset of peer dependencies\",\n )\n .to.be.an(\"array\")\n .that.includes.all.members(externalForPeerBuild);\n });\n validate((expect): void => {\n expect(\n [...Object.keys(dependencies), ...Object.keys(peerDependencies)].sort(),\n \"Globals have to be provided for all runtime and peer dependencies but nothing else\",\n )\n .to.be.an(\"array\")\n .that.deep.equals(Object.keys(globals).sort());\n });\n\n validate(async (expect): Promise<void> => {\n expect(resolve(assets), \"Assets have to be a directory\").to.be.a(\"string\");\n const stats = await fs.stat(resolve(assets));\n expect(stats.isDirectory(), \"Assets have to be a directory\").to.be.true;\n });\n validate(async (expect): Promise<void> => {\n expect(entryPoint, \"The entry point has to be directory\").to.be.a(\"string\");\n const stats = await fs.stat(entryPoint);\n expect(stats.isDirectory(), \"The entry point has to be directory\").to.be\n .true;\n });\n const [esnextEntry, peerEntry, standaloneEntry] = await Promise.all(\n [\"ESNext\", \"peer\", \"standalone\"].map(async (name): Promise<string> => {\n const filenameGlob = `entry-${name.toLowerCase()}.{js,ts}`;\n const files = await glob(resolve(entryPoint, filenameGlob));\n\n validate(async (expect): Promise<void> => {\n expect(\n files,\n `There has to be a single entry file (${filenameGlob}) for the ${name} build`,\n )\n .to.have.lengthOf(1)\n .and.to.have.ownProperty(\"0\");\n const stats = await fs.stat(resolve(files[0]));\n expect(\n stats.isFile(),\n `The entry file (${filenameGlob}) for the ${name} build has to be a file`,\n ).to.be.true;\n });\n\n return files[0];\n }),\n );\n validate(async (expect): Promise<void> => {\n expect(\n resolve(\"./declarations\"),\n \"There has to be a directory with TypeScript declarations\",\n ).to.be.a(\"string\");\n const stats = await fs.stat(resolve(\"./declarations\"));\n expect(\n stats.isDirectory(),\n \"There has to be a directory with TypeScript declarations\",\n ).to.be.true;\n });\n\n validate((expect): void => {\n expect(\n packageJSONRest,\n \"The directories with built files have to be included in the package\",\n )\n .to.have.ownProperty(\"files\")\n .that.is.an(\"array\")\n .and.includes.all.members([\n \"declarations\",\n \"esnext\",\n \"peer\",\n \"standalone\",\n ]);\n });\n\n const expectedExports = Object.fromEntries([\n [\n \".\",\n {\n import: `./peer/esm/${libraryFilename}.mjs`,\n require: `./peer/umd/${libraryFilename}.cjs`,\n types: \"./declarations/index.d.ts\",\n },\n ],\n [\"./package.json\", \"./package.json\"],\n [\n \"./declarations/index.d.ts\",\n {\n types: \"./declarations/index.d.ts\",\n },\n ],\n ...[\"standalone\", \"peer\", \"esnext\"].flatMap(\n (variant): [string, Record<string, string>][] => [\n [\n `./${variant}`,\n {\n import: `./${variant}/esm/${libraryFilename}.mjs`,\n require: `./${variant}/umd/${libraryFilename}.cjs`,\n types: \"./declarations/index.d.ts\",\n },\n ],\n [\n `./${variant}/esm/${libraryFilename}.js`,\n {\n import: `./${variant}/esm/${libraryFilename}.mjs`,\n types: \"./declarations/index.d.ts\",\n },\n ],\n [\n `./${variant}/esm/${libraryFilename}.mjs`,\n {\n import: `./${variant}/esm/${libraryFilename}.mjs`,\n types: \"./declarations/index.d.ts\",\n },\n ],\n [\n `./${variant}/esm/${libraryFilename}.min.js`,\n {\n import: `./${variant}/esm/${libraryFilename}.min.mjs`,\n types: \"./declarations/index.d.ts\",\n },\n ],\n [\n `./${variant}/esm/${libraryFilename}.min.mjs`,\n {\n import: `./${variant}/esm/${libraryFilename}.min.mjs`,\n types: \"./declarations/index.d.ts\",\n },\n ],\n [\n `./${variant}/umd/${libraryFilename}.js`,\n {\n require: `./${variant}/umd/${libraryFilename}.cjs`,\n types: \"./declarations/index.d.ts\",\n },\n ],\n [\n `./${variant}/umd/${libraryFilename}.cjs`,\n {\n require: `./${variant}/umd/${libraryFilename}.cjs`,\n types: \"./declarations/index.d.ts\",\n },\n ],\n [\n `./${variant}/umd/${libraryFilename}.min.js`,\n {\n require: `./${variant}/umd/${libraryFilename}.min.cjs`,\n types: \"./declarations/index.d.ts\",\n },\n ],\n [\n `./${variant}/umd/${libraryFilename}.min.cjs`,\n {\n require: `./${variant}/umd/${libraryFilename}.min.cjs`,\n types: \"./declarations/index.d.ts\",\n },\n ],\n ],\n ),\n ]);\n\n validate((expect): void => {\n expect(\n packageJSONRest,\n \"Package JSON's type property has to point to the declarations\",\n )\n .to.have.ownProperty(\"types\")\n .that.is.a(\"string\")\n .and.equals(\"./declarations/index.d.ts\")\n .and.is.oneOf(Object.keys(expectedExports));\n });\n validate((expect): void => {\n expect(\n packageJSONRest,\n \"Package JSON's browser property has to point to the minifed UMD build\",\n )\n .to.have.ownProperty(\"browser\")\n .that.is.a(\"string\")\n .and.equals(`./peer/umd/${libraryFilename}.min.cjs`)\n .and.is.oneOf(Object.keys(expectedExports));\n });\n validate((expect): void => {\n expect(\n packageJSONRest,\n \"Package JSON's main property has to point to the UMD build\",\n )\n .to.have.ownProperty(\"main\")\n .that.is.a(\"string\")\n .and.equals(`./peer/umd/${libraryFilename}.cjs`)\n .and.is.oneOf(Object.keys(expectedExports));\n });\n validate((expect): void => {\n expect(\n packageJSONRest,\n \"Package JSON's modul property has to point to the ESM build\",\n )\n .to.have.ownProperty(\"module\")\n .that.is.a(\"string\")\n .and.equals(`./peer/esm/${libraryFilename}.mjs`)\n .and.is.oneOf(Object.keys(expectedExports));\n });\n validate((expect): void => {\n expect(\n packageJSONRest,\n \"Package JSON's jsnext has to point to the ESNext build\",\n )\n .to.have.ownProperty(\"jsnext\")\n .that.is.a(\"string\")\n .and.equals(`./esnext/esm/${libraryFilename}.mjs`)\n .and.is.oneOf(Object.keys(expectedExports));\n });\n\n validate((expect): void => {\n expect(\n Object.fromEntries(\n Object.entries(packageJSONRest.exports ?? {}).filter(([key]): boolean =>\n Object.keys(expectedExports).includes(key),\n ),\n ),\n \"Package JSON's exports have to contain common entries\",\n ).to.deep.equal(expectedExports);\n });\n\n validate(async (expect): Promise<void> => {\n const [{ status }] = await Promise.allSettled([\n fs.access(resolve(\"./.babelrc\")),\n ]);\n expect(\n status,\n \"Babelrc is ignored. Use babel.config.js config file instead.\",\n ).to.equal(\"rejected\");\n });\n validate(async (expect): Promise<void> => {\n const [{ status }] = await Promise.allSettled([\n fs.access(resolve(\"./babel.config.js\")),\n ]);\n expect(status, \"There has to be a babel.config.js config file.\").to.equal(\n \"fulfilled\",\n );\n });\n\n const banner = await generateHeader(header);\n const external = {\n // No dependencies are bundled.\n esnext: processDependencies([\n ...Object.keys(dependencies),\n ...Object.keys(peerDependencies),\n\n // This will show a warning if any of them is used. The idea behind\n // it is that if someone accidentaly imports a dev dependency they\n // won't accidentaly add it to globals and Rollup will warn them\n // about their error.\n ...Object.keys(devDependencies),\n ]),\n // Only dependencies that cause compatibility issues are not bundled.\n peer: processDependencies(externalForPeerBuild),\n // No runtime dependencies, everything's bundled.\n standalone: [],\n };\n\n const commonOutput = {\n banner,\n dir: \".\",\n globals: processGlobals(globals),\n sourcemap: VIS_TEST ? \"inline\" : true,\n } as const;\n const commonOutputESM = {\n ...commonOutput,\n format: \"esm\",\n } as const;\n const commonOutputUMD = {\n ...commonOutput,\n exports: \"named\",\n extend: true,\n format: \"umd\",\n name: \"vis\",\n strict: false, // Regenerator runtime causes issues with CSP in strict mode.\n } as const;\n\n // Note: Binding more than 4 at a time is not typesafe in TS.\n const getPlugins = generateRollupPluginArray\n .bind(null, libraryFilename)\n .bind(null, assets)\n .bind(null, copyTargetsBundle)\n .bind(null, copyTargetsVariant)\n .bind(null, tsconfig)\n .bind(null, mode);\n\n return [\n {\n external: external.standalone,\n input: standaloneEntry,\n output: [\n {\n ...commonOutputESM,\n entryFileNames: `standalone/esm/${libraryFilename}.js`,\n },\n {\n ...commonOutputESM,\n entryFileNames: `standalone/esm/${libraryFilename}.mjs`,\n },\n {\n ...commonOutputUMD,\n entryFileNames: `standalone/umd/${libraryFilename}.js`,\n },\n {\n ...commonOutputUMD,\n entryFileNames: `standalone/umd/${libraryFilename}.cjs`,\n },\n ],\n plugins: getPlugins(\"standalone\", {\n injectCSS,\n transpile,\n typescript: isTS(standaloneEntry),\n }),\n },\n {\n external: external.standalone,\n input: standaloneEntry,\n output: [\n {\n ...commonOutputESM,\n entryFileNames: `standalone/esm/${libraryFilename}.min.js`,\n },\n {\n ...commonOutputESM,\n entryFileNames: `standalone/esm/${libraryFilename}.min.mjs`,\n },\n {\n ...commonOutputUMD,\n entryFileNames: `standalone/umd/${libraryFilename}.min.js`,\n },\n {\n ...commonOutputUMD,\n entryFileNames: `standalone/umd/${libraryFilename}.min.cjs`,\n },\n ],\n plugins: getPlugins(\"standalone\", {\n injectCSS,\n minimize,\n transpile,\n typescript: isTS(standaloneEntry),\n }),\n },\n\n {\n external: external.peer,\n input: peerEntry,\n output: [\n {\n ...commonOutputESM,\n entryFileNames: `peer/esm/${libraryFilename}.js`,\n paths: getPaths(\"peer\", \"esm\"),\n },\n {\n ...commonOutputESM,\n entryFileNames: `peer/esm/${libraryFilename}.mjs`,\n paths: getPaths(\"peer\", \"esm\"),\n },\n {\n ...commonOutputUMD,\n entryFileNames: `peer/umd/${libraryFilename}.js`,\n paths: getPaths(\"peer\", \"umd\"),\n },\n {\n ...commonOutputUMD,\n entryFileNames: `peer/umd/${libraryFilename}.cjs`,\n paths: getPaths(\"peer\", \"umd\"),\n },\n ],\n plugins: getPlugins(\"peer\", {\n transpile,\n typescript: isTS(peerEntry),\n }),\n },\n {\n external: external.peer,\n input: peerEntry,\n output: [\n {\n ...commonOutputESM,\n entryFileNames: `peer/esm/${libraryFilename}.min.js`,\n paths: getPaths(\"peer\", \"esm\"),\n },\n {\n ...commonOutputESM,\n entryFileNames: `peer/esm/${libraryFilename}.min.mjs`,\n paths: getPaths(\"peer\", \"esm\"),\n },\n {\n ...commonOutputUMD,\n entryFileNames: `peer/umd/${libraryFilename}.min.js`,\n paths: getPaths(\"peer\", \"umd\"),\n },\n {\n ...commonOutputUMD,\n entryFileNames: `peer/umd/${libraryFilename}.min.cjs`,\n paths: getPaths(\"peer\", \"umd\"),\n },\n ],\n plugins: getPlugins(\"peer\", {\n minimize,\n transpile,\n typescript: isTS(peerEntry),\n }),\n },\n\n {\n external: external.esnext,\n input: esnextEntry,\n output: [\n {\n ...commonOutputESM,\n entryFileNames: `esnext/esm/${libraryFilename}.js`,\n paths: getPaths(\"esnext\", \"esm\"),\n },\n {\n ...commonOutputESM,\n entryFileNames: `esnext/esm/${libraryFilename}.mjs`,\n paths: getPaths(\"esnext\", \"esm\"),\n },\n {\n ...commonOutputESM,\n entryFileNames: `esnext/umd/${libraryFilename}.js`,\n paths: getPaths(\"esnext\", \"umd\"),\n },\n {\n ...commonOutputESM,\n entryFileNames: `esnext/umd/${libraryFilename}.cjs`,\n paths: getPaths(\"esnext\", \"umd\"),\n },\n ],\n plugins: getPlugins(\"esnext\", {\n typescript: isTS(esnextEntry),\n }),\n },\n {\n external: external.esnext,\n input: esnextEntry,\n output: [\n {\n ...commonOutputESM,\n entryFileNames: `esnext/esm/${libraryFilename}.min.js`,\n paths: getPaths(\"esnext\", \"esm\"),\n },\n {\n ...commonOutputESM,\n entryFileNames: `esnext/esm/${libraryFilename}.min.mjs`,\n paths: getPaths(\"esnext\", \"esm\"),\n },\n {\n ...commonOutputUMD,\n entryFileNames: `esnext/umd/${libraryFilename}.min.js`,\n paths: getPaths(\"esnext\", \"umd\"),\n },\n {\n ...commonOutputUMD,\n entryFileNames: `esnext/umd/${libraryFilename}.min.cjs`,\n paths: getPaths(\"esnext\", \"umd\"),\n },\n ],\n plugins: getPlugins(\"esnext\", {\n minimize,\n typescript: isTS(esnextEntry),\n }),\n },\n ];\n}\n","import { execSync } from \"child_process\";\nimport { readFileSync } from \"fs\";\nimport { fileSync, setGracefulCleanup } from \"tmp-promise\";\n\nsetGracefulCleanup();\n\ninterface PackageInfo {\n id: string;\n name: string;\n version: string;\n size: number;\n unpackedSize: number;\n shasum: string;\n integrity: string;\n filename: string;\n files: FileInfo[];\n entryCount: number;\n bundled: string[];\n}\n\ninterface FileInfo {\n path: string;\n size: number;\n mode: number;\n}\n\nconst PACK_CMD = [\n \"npm\",\n \"pack\",\n // Don't create any package, we just need to see what would be packed.\n \"--dry-run\",\n // Prevents things like Husky from outputting to stdout, we don't need them\n // here anyway.\n \"--ignore-scripts\",\n // JSON is easier to parse and more stable between npm versions.\n \"--json\",\n];\n\n/**\n * @param textOrLines\n * @param message\n */\nfunction logStderr(textOrLines: unknown, message: string): never {\n console.group('\"npm pack\" output');\n console.error(textOrLines);\n console.groupEnd();\n\n throw new Error(message);\n}\n\n/**\n *\n */\nfunction runNpmPack(): PackageInfo[] {\n const tmpFile = fileSync().name;\n\n // There are issues with incomplete output when the stderr is read directly\n // into Node. Saving it into tmp file using shell redirection and reading it\n // from there doesn't exhibit those issues.\n execSync(`${PACK_CMD.join(\" \")} > ${tmpFile}`, {\n encoding: \"utf-8\",\n env: {\n ...process.env,\n LC_ALL: \"C\",\n NODE_ENV: \"production\",\n },\n });\n\n const stdout = readFileSync(tmpFile, \"utf-8\")\n // TODO: Why doesn't --ignore-scripts turn Husky off? It works in CLI.\n .replace(/^([^[]*)\\[\\n/, \"[\");\n\n try {\n return JSON.parse(stdout);\n } catch (error) {\n logStderr({ error, stdout }, 'Failed to parse \"npm pack\" JSON output.');\n }\n}\n\n/**\n * @param lines\n * @param packageInfo\n */\nfunction extractFiles(\n packageInfo: PackageInfo,\n): Record<string, Record<string, unknown>> {\n const files = packageInfo.files.map(\n ({ path, size }): [string, Record<string, unknown>] => [\n path,\n { empty: size === 0 },\n ],\n );\n\n if (files.length === 0) {\n logStderr(packageInfo, 'No files found in \"npm pack\" output.');\n }\n\n return Object.fromEntries(files);\n}\n\n/**\n * @param lines\n * @param packageInfo\n */\nfunction extractName(packageInfo: PackageInfo): string {\n const name = packageInfo.name;\n\n if (name == null) {\n logStderr(\n packageInfo,\n 'Can\\'t find the name of the package in \"npm pack\" output.',\n );\n }\n\n return name.replace(/^npm notice name: */, \"\");\n}\n\n/**\n *\n */\nexport function inspectNpmPack(): {\n name: string;\n files: Record<string, Record<string, unknown>>;\n} {\n const [packageInfo, ...unexpectedExtras] = runNpmPack();\n\n if (packageInfo == null) {\n logStderr(\n [packageInfo, ...unexpectedExtras],\n 'There was no output from \"npm pack\".',\n );\n }\n\n if (unexpectedExtras.length !== 0) {\n logStderr(\n [packageInfo, ...unexpectedExtras],\n 'Can\\'t process the output of \"npm pack\" if there are multiple packages.',\n );\n }\n\n const files = extractFiles(packageInfo);\n const name = extractName(packageInfo);\n\n return {\n name,\n files,\n };\n}\n"],"names":["readFile","chaiConfig","sep","validateExpect","join","injectCSS","minimize","transpile","resolve","dirname","fileURLToPath","URL","stringPlugin","setGracefulCleanup","fileSync","execSync","readFileSync"],"mappings":"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"}
1
+ {"version":3,"file":"vis-dev-utils.cjs","sources":["../src/module/constants.ts","../src/module/header.ts","../src/module/generate-rollup-configuration/index.ts","../src/module/inspect-npm-pack.ts"],"sourcesContent":["export const BABEL_IGNORE_RE = /[\\\\/]node_modules[\\\\/](?!.*[\\\\/]esnext[\\\\/])/;\n","import { readFile } from \"fs/promises\";\n\n/**\n * Take a string and return a doc block comment.\n * @param string - The raw text to be included in the comment.\n * @throws If the string already contains a comment.\n * @returns A block doc comment string that can be for example prepended to a\n * bundled JavaScript file.\n */\nexport function textToComment(string: string): string {\n if (string.includes(\"*/\")) {\n throw new Error(\n \"Don't include comments in the input string. It will be converted automatically.\",\n );\n }\n\n return (\n \"/**\\n\" +\n string\n // Remove empty lines from the start.\n .replace(/^[\\n\\r]*/, \"\")\n // Remove empty lines from the end.\n .replace(/[\\n\\r\\s]*$/, \"\")\n // Process each line on it's own from now on.\n .split(\"\\n\")\n // Prefix each line with an asterisk.\n .map((line) => \" * \" + line)\n // Remove trailing white space.\n .map((line) => line.replace(/[^\\S\\r\\n]*$/, \"\"))\n // Join back into a string.\n .join(\"\\n\") +\n \"\\n */\\n\"\n );\n}\n\nconst buildHeader = ({\n customText,\n date,\n description,\n homepage,\n name,\n version,\n}: HeaderOptions): string =>\n textToComment(`\n${name}\n${homepage}\n\n${description}\n\n@version ${version}\n@date ${date}\n\n@copyright (c) 2011-2017 Almende B.V, http://almende.com\n@copyright (c) 2017-2019 visjs contributors, https://github.com/visjs\n\n@license\nvis.js is dual licensed under both\n\n 1. The Apache 2.0 License\n http://www.apache.org/licenses/LICENSE-2.0\n\n and\n\n 2. The MIT License\n http://opensource.org/licenses/MIT\n\nvis.js may be distributed under either license.\n\n${customText}\n`);\n\n/**\n * Options for {@link generateHeader}.\n */\nexport interface HeaderOptions {\n /** Any text to be appended to the standard header. */\n customText: string;\n /** The build date. */\n date: string;\n /** A description of the project. */\n description: string;\n /** An URL to the homepage of the project. */\n homepage: string;\n /** The name of the project. */\n name: string;\n /** The version of the build. */\n version: string;\n}\n\nconst defaultDate = new Date().toISOString();\n\n/**\n * Generate a dynamic header banner.\n * @param options - Optional information to be included. Otherwise no custom\n * text will be appended, the date will be the time when this module was\n * imported (most likely the start of the build process) and the rest will be\n * read from package.json.\n * @throws If the string already contains a comment.\n * @returns Ready to use banner text.\n */\nexport async function generateHeader(\n options?: Partial<HeaderOptions>,\n): Promise<string> {\n const packageJSON = JSON.parse(\n await readFile(\n (await import(\"find-up\")).findUpSync(\"package.json\")!,\n \"utf8\",\n ),\n );\n\n const defaultDescription = packageJSON.description;\n const defaultHomepage = packageJSON.homepage;\n const defaultName = packageJSON.name;\n const defaultVersion = packageJSON.version;\n\n const {\n customText = \"\",\n date = defaultDate,\n description = defaultDescription,\n homepage = defaultHomepage,\n name = defaultName,\n version = defaultVersion,\n } = options || {};\n\n return buildHeader({\n customText,\n date,\n description,\n homepage,\n name,\n version,\n });\n}\n","import fs from \"node:fs/promises\";\nimport { fileURLToPath, URL } from \"node:url\";\nimport { type RollupOptions, type Plugin } from \"rollup\";\nimport analyzerPlugin from \"rollup-plugin-analyzer\";\nimport babelPlugin from \"@rollup/plugin-babel\";\nimport commonjsPlugin from \"@rollup/plugin-commonjs\";\nimport copyPlugin, { Target as CopyTarget } from \"rollup-plugin-copy\";\nimport jsonPlugin from \"@rollup/plugin-json\";\nimport nodeResolvePlugin from \"@rollup/plugin-node-resolve\";\nimport postcssAssetsPlugin from \"postcss-assets\";\nimport postcssPlugin from \"rollup-plugin-postcss\";\nimport stripCodePlugin from \"rollup-plugin-strip-code\";\nimport terserPlugin from \"@rollup/plugin-terser\";\nimport typescriptPlugin from \"@rollup/plugin-typescript\";\nimport { generateHeader } from \"../header\";\nimport { join, resolve, sep } from \"path\";\nimport { string as stringPlugin } from \"rollup-plugin-string\";\nimport {\n config as chaiConfig,\n expect as validateExpect,\n use as chaiUse,\n} from \"chai\";\n\nimport { BABEL_IGNORE_RE } from \"../constants\";\nimport { type HeaderOptions } from \"../header\";\nimport { type OptionalOptions } from \"../util\";\nimport { dirname } from \"node:path\";\n\nconst rawGlobby = import(\"globby\");\n\nchaiConfig.truncateThreshold = Number.MAX_SAFE_INTEGER;\n\nconst VIS_DEBUG = [\"1\", \"true\", \"y\", \"yes\"].includes(\n process.env[\"VIS_DEBUG\"] || \"false\",\n);\nconst VIS_TEST = [\"1\", \"true\", \"y\", \"yes\"].includes(\n process.env[\"VIS_TEST\"] || \"false\",\n);\n\n/**\n * Simple glob with workaround for non-posix paths.\n * @param pattern - Single glob pattern.\n * @returns Globbed paths.\n */\nasync function glob(\n pattern: string,\n): ReturnType<(typeof import(\"globby\"))[\"globby\"]> {\n return (await rawGlobby).globby(\n sep === \"\\\\\" ? pattern.replace(/\\\\/g, \"/\") : pattern,\n );\n}\n\nexport interface GRCOptions {\n /**\n * Where to look for files when inlining assets into CSS.\n */\n assets: string;\n /**\n * Additional files to be copied.\n */\n copyTargets: {\n /**\n * These will be copied relative to the root of each bundle (esnext,\n * standalone…).\n */\n bundle: CopyTarget[];\n /**\n * These will be copied relative to the root of each variant of each bundle\n * (esnext/esm, esnext/umd, standalone/esm…).\n */\n variant: CopyTarget[];\n };\n /**\n * The base dir with entry points for various builds. The extensions\n * determines whether TypeScript processing will be used.\n */\n entryPoints: string;\n /**\n * These are the dependencies that would cause interoperability issues if they\n * were bundled. A notable example here is vis-data.\n */\n externalForPeerBuild: string[];\n /**\n * Passed straight to Rollup.\n */\n globals: Record<string, string>;\n /**\n * Options for {@link generateHeader}.\n */\n header: Partial<HeaderOptions>;\n /**\n * This will be used as a file name with appropriate extensions appended\n * (like .js, .min.js or .css).\n */\n libraryFilename: string;\n /**\n * Simply required package.json.\n */\n packageJSON: Partial<{\n browser: string;\n dependencies: Record<string, string>;\n devDependencies: Record<string, string>;\n exports: Record<string, Record<string, string | undefined> | undefined>;\n files: string[];\n jsnext: string;\n main: string;\n module: string;\n peerDependencies: Record<string, string>;\n types: string;\n }>;\n /**\n * The path to tsconfig.json to be used in this build.\n */\n tsconfig: string;\n}\n\n/**\n * These are the dependencies that follow standalone/peer/ESNext export\n * structure.\n */\nconst dependenciesWithVisExportStructure = [\n \"vis-data\",\n \"vis-graph3d\",\n \"vis-network\",\n \"vis-timeline\",\n \"vis-util\",\n \"vis-uuid\",\n];\n\n/**\n * This ensures that dependencies on Vis projects point to ESNext builds.\n * @param deps - The original dependencies as listed in package.json.\n * @returns An array of dependencies for Rollup.\n */\nfunction processDependencies(\n deps: string[] | Record<string, string>,\n): string[] {\n const depNames = Array.isArray(deps) ? deps : Object.keys(deps);\n\n return depNames.flatMap((key): string[] =>\n dependenciesWithVisExportStructure.includes(key)\n ? [key + \"/esnext\"]\n : [key],\n );\n}\n\n/**\n * This ensures that all Vis projects are imported using ESNext builds.\n * Importing standalone versions will not only cause problems in production but\n * will log warnings during build process and won't work at all.\n * @param globals - The original globals.\n * @returns Globals forcing the use of ESNext builds for Vis projects.\n */\nfunction processGlobals(\n globals: Record<string, string>,\n): Record<string, string> {\n return Object.entries(globals).reduce<Record<string, string>>(\n (acc, [key, value]): Record<string, string> => {\n acc[\n dependenciesWithVisExportStructure.includes(key) ? key + \"/esnext\" : key\n ] = value;\n\n return acc;\n },\n Object.create(null),\n );\n}\n\n/**\n * @param path\n */\nfunction isTS(path: string): boolean {\n return path.endsWith(\".ts\");\n}\n\n/*\n * Make sure that Chai doesn't throw and therefore stop execution on failed\n * validations during debugging.\n */\nconst validate: (\n callback: (expect: Chai.ExpectStatic) => Promise<void> | void,\n) => Promise<void> = VIS_DEBUG\n ? async (\n callback: (expect: Chai.ExpectStatic) => Promise<void> | void,\n ): Promise<void> => {\n try {\n await callback(validateExpect);\n } catch (error) {\n console.error(error);\n }\n }\n : async (\n callback: (expect: Chai.ExpectStatic) => Promise<void> | void,\n ): Promise<void> => {\n await callback(validateExpect);\n };\n\n/**\n * Transform ESNext import paths to match the build version being constructed.\n * @param buildVariant - ESNext or peer build. This is not available for\n * standalone as only peer and ESNext have imports.\n * @param moduleFormat - What kind of module system to use.\n * @returns Path overrides for Rollup.\n */\nfunction getPaths(\n buildVariant: \"esnext\" | \"peer\",\n moduleFormat: \"esm\" | \"umd\",\n): Record<string, string> {\n /**\n * @param lib\n */\n function getPath(\n lib:\n | \"charts\"\n | \"data\"\n | \"graph3d\"\n | \"network\"\n | \"timeline\"\n | \"util\"\n | \"uuid\",\n ): Record<string, string> {\n return {\n [`vis-${lib}/esnext`]: `vis-${lib}/${buildVariant}/${moduleFormat}/vis-${lib}.js`,\n };\n }\n\n return {\n ...getPath(\"charts\"),\n ...getPath(\"data\"),\n ...getPath(\"graph3d\"),\n ...getPath(\"network\"),\n ...getPath(\"timeline\"),\n ...getPath(\"util\"),\n ...getPath(\"uuid\"),\n };\n}\n\n/**\n * Change target's dest so that it's relative to given dir(s).\n * @param dirs - The directories there targets should be relative to.\n * @returns A function that can be directly supplied to Array.map().\n */\nfunction scopeCopyTarget(\n ...dirs: readonly string[]\n): (target: CopyTarget) => CopyTarget {\n return function (target): CopyTarget {\n const dest = (\n Array.isArray(target.dest) ? target.dest : [target.dest]\n ) as readonly string[];\n\n const bundleDest = dest.flatMap((path): string[] =>\n dirs.map((dir): string => join(dir, path)),\n );\n\n return {\n ...target,\n dest: bundleDest,\n };\n };\n}\n\nconst injectCSS = true;\nconst minimize = true;\nconst transpile = true;\nconst generateRollupPluginArray = (\n libraryFilename: string,\n assets: string,\n copyTargetsBundle: readonly CopyTarget[],\n copyTargetsVariant: readonly CopyTarget[],\n tsconfig: string,\n mode: \"production\" | \"development\" | \"test\",\n bundleType: \"esnext\" | \"standalone\" | \"peer\",\n {\n injectCSS = false,\n minimize = false,\n strip = mode === \"production\",\n transpile = false,\n typescript = false,\n } = {},\n): Plugin[] => {\n const fullLibraryFilename = `${libraryFilename}${minimize ? \".min\" : \"\"}`;\n\n const bundleDir = bundleType;\n const bundleVariantDirs = [\"esm\", \"umd\"].map((variant): string =>\n join(bundleDir, variant),\n );\n\n return [\n ...(strip\n ? [\n // This should be first because it removes code from source files.\n // It's much easier to follow if the removal happens before any\n // transformations.\n stripCodePlugin({\n start_comment: \"develblock:start\",\n end_comment: \"develblock:end\",\n }),\n ]\n : [\n // Remove the comments marking devel blocks as they can cause problems\n // later on because transpilation shuffles things around which may\n // lead to all kinds of issues including syntax errors.\n stripCodePlugin({\n pattern: /[\\t ]*\\/\\* ?develblock:(start|end) ?\\*\\//g,\n }),\n ]),\n analyzerPlugin(VIS_DEBUG ? undefined : { limit: 10, summaryOnly: true }),\n copyPlugin({\n verbose: VIS_DEBUG,\n targets: [\n // JavaScript\n {\n src: resolve(\n dirname(fileURLToPath(new URL(import.meta.url))),\n \"assets/bundle-root.js\",\n ),\n dest: bundleDir,\n rename: \"index.js\",\n },\n {\n src: resolve(\n dirname(fileURLToPath(new URL(import.meta.url))),\n \"assets/bundle-index.js\",\n ),\n dest: bundleVariantDirs,\n rename: \"index.js\",\n transform: (content: Buffer): string =>\n content.toString().replace(\"{{filename}}\", libraryFilename),\n },\n\n // TypeScript\n {\n src: resolve(\n dirname(fileURLToPath(new URL(import.meta.url))),\n \"assets/bundle-root.d.ts\",\n ),\n dest: bundleDir,\n rename: \"index.d.ts\",\n },\n {\n src: resolve(\n dirname(fileURLToPath(new URL(import.meta.url))),\n \"assets/bundle-index.d.ts\",\n ),\n dest: bundleVariantDirs,\n rename: \"index.d.ts\",\n transform: (content: Buffer): string =>\n content.toString().replace(\"{{filename}}\", libraryFilename),\n },\n {\n src: resolve(\n dirname(fileURLToPath(new URL(import.meta.url))),\n \"assets/bundle-file.d.ts\",\n ),\n dest: bundleVariantDirs,\n rename: `${fullLibraryFilename}.d.ts`,\n transform: (content: Buffer): string =>\n content.toString().replace(\"{{bundle-type}}\", bundleType),\n },\n\n // Custom\n ...copyTargetsBundle.map(scopeCopyTarget(bundleDir)),\n ...copyTargetsVariant.map(scopeCopyTarget(...bundleVariantDirs)),\n ],\n }),\n nodeResolvePlugin({\n browser: true,\n extensions: [\".js\", \".json\", \".ts\"],\n mainFields: [\"jsnext\", \"module\", \"main\"],\n preferBuiltins: false,\n }),\n ...(typescript\n ? [\n typescriptPlugin({\n tsconfig,\n }),\n ]\n : []),\n commonjsPlugin(),\n postcssPlugin({\n extract: !injectCSS && `styles/${fullLibraryFilename}.css`,\n inject: injectCSS,\n minimize,\n // Prevent the sourcemaps from being injected into JS files.\n sourceMap: !injectCSS,\n plugins: [\n postcssAssetsPlugin({\n loadPaths: [assets],\n }),\n ],\n }),\n jsonPlugin(),\n stringPlugin({\n include: \"**/*.txt\",\n }),\n ...(transpile\n ? [\n babelPlugin({\n babelHelpers: \"runtime\",\n babelrc: false,\n configFile: false,\n exclude: BABEL_IGNORE_RE,\n extensions: [\".js\", \".ts\", \".mjs\", \".cjs\"],\n presets: [[\"vis-dev-utils/babel-preset\", { ts: true }]],\n }),\n ]\n : []),\n ...(minimize\n ? [\n terserPlugin({\n format: {\n comments: \"some\",\n },\n }),\n ]\n : []),\n ];\n};\n\n/**\n * Prepare ready to use Rollup configuration file.\n * @remarks\n * IMPORTANT: Use `babel.config.js` in the root of the project, `.babelrc` files\n * are ignored.\n *\n * You can surround any piece of code with `stripInProduction: { debug code }`\n * to strip it from the generated bundles unless VIS_DEBUG=true environmental\n * variable is set. This is useful for example to render bounding boxes during\n * debugging but automatically switch it off without any performance or bundle\n * size penalty in production. Debugger statements are also automatically\n * stripped.\n *\n * Plugins:\n * - `\\@rollup/plugin-babel` (skipped in ESNext)\n * - `\\@rollup/plugin-commonjs`\n * - `\\@rollup/plugin-json`\n * - `\\@rollup/plugin-node-resolve`\n * - `\\@rollup/plugin-strip` (skipped with VIS_DEBUG=true env var)\n * - `\\@rollup/plugin-terser` (only in minified)\n * - `postcss-assets`\n * - `rollup-plugin-copy`\n * - `rollup-plugin-postcss`\n * - `rollup-plugin-typescript2` (skipped if the entry is .js)\n * @param options - See {@link GRCOptions}.\n * @param mode - Whether the code should be processed for production,\n * development or testing.\n * @returns Ready to use configuration object that can be just exported from\n * `rollup.config.js` or mutated in any way if necessary.\n */\nexport async function generateRollupConfiguration(\n options: OptionalOptions<GRCOptions>,\n mode: \"production\" | \"development\" | \"test\" = VIS_TEST\n ? \"test\"\n : VIS_DEBUG\n ? \"development\"\n : \"production\",\n): Promise<RollupOptions[]> {\n const {\n assets = \".\",\n copyTargets: {\n bundle: copyTargetsBundle = [],\n variant: copyTargetsVariant = [],\n } = {} as GRCOptions[\"copyTargets\"],\n externalForPeerBuild = [],\n globals = {},\n header = { name: \"Unknown Library\" },\n libraryFilename = \"unknown-library\",\n packageJSON: {\n dependencies = {},\n devDependencies = {},\n peerDependencies = {},\n ...packageJSONRest\n } = {} as GRCOptions[\"packageJSON\"],\n entryPoints: entryPoint = \"./src\",\n tsconfig = \"tsconfig.json\",\n }: GRCOptions = (options || {}) as GRCOptions;\n\n validate((expect): void => {\n // Note: Every array is a superset of empty array.\n if (Object.keys(peerDependencies).length > 0) {\n expect(\n Object.keys(dependencies),\n \"The dependencies and peer dependencies have to be disjoint sets\",\n )\n .to.be.an(\"array\")\n .that.does.not.include.any.members(Object.keys(peerDependencies));\n }\n });\n validate((expect): void => {\n expect(\n Object.keys(devDependencies),\n \"For convenience all peer dependencies also have to be dev dependencies\",\n )\n .to.be.an(\"array\")\n .that.includes.all.members(Object.keys(peerDependencies));\n });\n validate((expect): void => {\n expect(\n Object.keys(peerDependencies),\n \"Peer build externals have to be a subset of peer dependencies\",\n )\n .to.be.an(\"array\")\n .that.includes.all.members(externalForPeerBuild);\n });\n validate((expect): void => {\n expect(\n [...Object.keys(dependencies), ...Object.keys(peerDependencies)].sort(),\n \"Globals have to be provided for all runtime and peer dependencies but nothing else\",\n )\n .to.be.an(\"array\")\n .that.deep.equals(Object.keys(globals).sort());\n });\n\n validate(async (expect): Promise<void> => {\n expect(resolve(assets), \"Assets have to be a directory\").to.be.a(\"string\");\n const stats = await fs.stat(resolve(assets));\n expect(stats.isDirectory(), \"Assets have to be a directory\").to.be.true;\n });\n validate(async (expect): Promise<void> => {\n expect(entryPoint, \"The entry point has to be directory\").to.be.a(\"string\");\n const stats = await fs.stat(entryPoint);\n expect(stats.isDirectory(), \"The entry point has to be directory\").to.be\n .true;\n });\n const [esnextEntry, peerEntry, standaloneEntry] = await Promise.all(\n [\"ESNext\", \"peer\", \"standalone\"].map(async (name): Promise<string> => {\n const filenameGlob = `entry-${name.toLowerCase()}.{js,ts}`;\n const files = await glob(resolve(entryPoint, filenameGlob));\n\n validate(async (expect): Promise<void> => {\n expect(\n files,\n `There has to be a single entry file (${filenameGlob}) for the ${name} build`,\n )\n .to.have.lengthOf(1)\n .and.to.have.ownProperty(\"0\");\n const stats = await fs.stat(resolve(files[0]));\n expect(\n stats.isFile(),\n `The entry file (${filenameGlob}) for the ${name} build has to be a file`,\n ).to.be.true;\n });\n\n return files[0];\n }),\n );\n validate(async (expect): Promise<void> => {\n expect(\n resolve(\"./declarations\"),\n \"There has to be a directory with TypeScript declarations\",\n ).to.be.a(\"string\");\n const stats = await fs.stat(resolve(\"./declarations\"));\n expect(\n stats.isDirectory(),\n \"There has to be a directory with TypeScript declarations\",\n ).to.be.true;\n });\n\n validate((expect): void => {\n expect(\n packageJSONRest,\n \"The directories with built files have to be included in the package\",\n )\n .to.have.ownProperty(\"files\")\n .that.is.an(\"array\")\n .and.includes.all.members([\n \"declarations\",\n \"esnext\",\n \"peer\",\n \"standalone\",\n ]);\n });\n\n const expectedExports = Object.fromEntries([\n [\n \".\",\n {\n import: `./peer/esm/${libraryFilename}.mjs`,\n require: `./peer/umd/${libraryFilename}.cjs`,\n types: \"./declarations/index.d.ts\",\n },\n ],\n [\"./package.json\", \"./package.json\"],\n [\n \"./declarations/index.d.ts\",\n {\n types: \"./declarations/index.d.ts\",\n },\n ],\n ...[\"standalone\", \"peer\", \"esnext\"].flatMap(\n (variant): [string, Record<string, string>][] => [\n [\n `./${variant}`,\n {\n import: `./${variant}/esm/${libraryFilename}.mjs`,\n require: `./${variant}/umd/${libraryFilename}.cjs`,\n types: \"./declarations/index.d.ts\",\n },\n ],\n [\n `./${variant}/esm/${libraryFilename}.js`,\n {\n import: `./${variant}/esm/${libraryFilename}.mjs`,\n types: \"./declarations/index.d.ts\",\n },\n ],\n [\n `./${variant}/esm/${libraryFilename}.mjs`,\n {\n import: `./${variant}/esm/${libraryFilename}.mjs`,\n types: \"./declarations/index.d.ts\",\n },\n ],\n [\n `./${variant}/esm/${libraryFilename}.min.js`,\n {\n import: `./${variant}/esm/${libraryFilename}.min.mjs`,\n types: \"./declarations/index.d.ts\",\n },\n ],\n [\n `./${variant}/esm/${libraryFilename}.min.mjs`,\n {\n import: `./${variant}/esm/${libraryFilename}.min.mjs`,\n types: \"./declarations/index.d.ts\",\n },\n ],\n [\n `./${variant}/umd/${libraryFilename}.js`,\n {\n require: `./${variant}/umd/${libraryFilename}.cjs`,\n types: \"./declarations/index.d.ts\",\n },\n ],\n [\n `./${variant}/umd/${libraryFilename}.cjs`,\n {\n require: `./${variant}/umd/${libraryFilename}.cjs`,\n types: \"./declarations/index.d.ts\",\n },\n ],\n [\n `./${variant}/umd/${libraryFilename}.min.js`,\n {\n require: `./${variant}/umd/${libraryFilename}.min.cjs`,\n types: \"./declarations/index.d.ts\",\n },\n ],\n [\n `./${variant}/umd/${libraryFilename}.min.cjs`,\n {\n require: `./${variant}/umd/${libraryFilename}.min.cjs`,\n types: \"./declarations/index.d.ts\",\n },\n ],\n ],\n ),\n ]);\n\n validate((expect): void => {\n expect(\n packageJSONRest,\n \"Package JSON's type property has to point to the declarations\",\n )\n .to.have.ownProperty(\"types\")\n .that.is.a(\"string\")\n .and.equals(\"./declarations/index.d.ts\")\n .and.is.oneOf(Object.keys(expectedExports));\n });\n validate((expect): void => {\n expect(\n packageJSONRest,\n \"Package JSON's browser property has to point to the minifed UMD build\",\n )\n .to.have.ownProperty(\"browser\")\n .that.is.a(\"string\")\n .and.equals(`./peer/umd/${libraryFilename}.min.cjs`)\n .and.is.oneOf(Object.keys(expectedExports));\n });\n validate((expect): void => {\n expect(\n packageJSONRest,\n \"Package JSON's main property has to point to the UMD build\",\n )\n .to.have.ownProperty(\"main\")\n .that.is.a(\"string\")\n .and.equals(`./peer/umd/${libraryFilename}.cjs`)\n .and.is.oneOf(Object.keys(expectedExports));\n });\n validate((expect): void => {\n expect(\n packageJSONRest,\n \"Package JSON's modul property has to point to the ESM build\",\n )\n .to.have.ownProperty(\"module\")\n .that.is.a(\"string\")\n .and.equals(`./peer/esm/${libraryFilename}.mjs`)\n .and.is.oneOf(Object.keys(expectedExports));\n });\n validate((expect): void => {\n expect(\n packageJSONRest,\n \"Package JSON's jsnext has to point to the ESNext build\",\n )\n .to.have.ownProperty(\"jsnext\")\n .that.is.a(\"string\")\n .and.equals(`./esnext/esm/${libraryFilename}.mjs`)\n .and.is.oneOf(Object.keys(expectedExports));\n });\n\n validate((expect): void => {\n expect(\n Object.fromEntries(\n Object.entries(packageJSONRest.exports ?? {}).filter(([key]): boolean =>\n Object.keys(expectedExports).includes(key),\n ),\n ),\n \"Package JSON's exports have to contain common entries\",\n ).to.deep.equal(expectedExports);\n });\n\n validate(async (expect): Promise<void> => {\n const [{ status }] = await Promise.allSettled([\n fs.access(resolve(\"./.babelrc\")),\n ]);\n expect(\n status,\n \"Babelrc is ignored. Use babel.config.js config file instead.\",\n ).to.equal(\"rejected\");\n });\n validate(async (expect): Promise<void> => {\n const [{ status }] = await Promise.allSettled([\n fs.access(resolve(\"./babel.config.js\")),\n ]);\n expect(status, \"There has to be a babel.config.js config file.\").to.equal(\n \"fulfilled\",\n );\n });\n\n const banner = await generateHeader(header);\n const external = {\n // No dependencies are bundled.\n esnext: processDependencies([\n ...Object.keys(dependencies),\n ...Object.keys(peerDependencies),\n\n // This will show a warning if any of them is used. The idea behind\n // it is that if someone accidentaly imports a dev dependency they\n // won't accidentaly add it to globals and Rollup will warn them\n // about their error.\n ...Object.keys(devDependencies),\n ]),\n // Only dependencies that cause compatibility issues are not bundled.\n peer: processDependencies(externalForPeerBuild),\n // No runtime dependencies, everything's bundled.\n standalone: [],\n };\n\n const commonOutput = {\n banner,\n dir: \".\",\n globals: processGlobals(globals),\n sourcemap: VIS_TEST ? \"inline\" : true,\n } as const;\n const commonOutputESM = {\n ...commonOutput,\n format: \"esm\",\n } as const;\n const commonOutputUMD = {\n ...commonOutput,\n exports: \"named\",\n extend: true,\n format: \"umd\",\n name: \"vis\",\n strict: false, // Regenerator runtime causes issues with CSP in strict mode.\n } as const;\n\n // Note: Binding more than 4 at a time is not typesafe in TS.\n const getPlugins = generateRollupPluginArray\n .bind(null, libraryFilename)\n .bind(null, assets)\n .bind(null, copyTargetsBundle)\n .bind(null, copyTargetsVariant)\n .bind(null, tsconfig)\n .bind(null, mode);\n\n return [\n {\n external: external.standalone,\n input: standaloneEntry,\n output: [\n {\n ...commonOutputESM,\n entryFileNames: `standalone/esm/${libraryFilename}.js`,\n },\n {\n ...commonOutputESM,\n entryFileNames: `standalone/esm/${libraryFilename}.mjs`,\n },\n {\n ...commonOutputUMD,\n entryFileNames: `standalone/umd/${libraryFilename}.js`,\n },\n {\n ...commonOutputUMD,\n entryFileNames: `standalone/umd/${libraryFilename}.cjs`,\n },\n ],\n plugins: getPlugins(\"standalone\", {\n injectCSS,\n transpile,\n typescript: isTS(standaloneEntry),\n }),\n },\n {\n external: external.standalone,\n input: standaloneEntry,\n output: [\n {\n ...commonOutputESM,\n entryFileNames: `standalone/esm/${libraryFilename}.min.js`,\n },\n {\n ...commonOutputESM,\n entryFileNames: `standalone/esm/${libraryFilename}.min.mjs`,\n },\n {\n ...commonOutputUMD,\n entryFileNames: `standalone/umd/${libraryFilename}.min.js`,\n },\n {\n ...commonOutputUMD,\n entryFileNames: `standalone/umd/${libraryFilename}.min.cjs`,\n },\n ],\n plugins: getPlugins(\"standalone\", {\n injectCSS,\n minimize,\n transpile,\n typescript: isTS(standaloneEntry),\n }),\n },\n\n {\n external: external.peer,\n input: peerEntry,\n output: [\n {\n ...commonOutputESM,\n entryFileNames: `peer/esm/${libraryFilename}.js`,\n paths: getPaths(\"peer\", \"esm\"),\n },\n {\n ...commonOutputESM,\n entryFileNames: `peer/esm/${libraryFilename}.mjs`,\n paths: getPaths(\"peer\", \"esm\"),\n },\n {\n ...commonOutputUMD,\n entryFileNames: `peer/umd/${libraryFilename}.js`,\n paths: getPaths(\"peer\", \"umd\"),\n },\n {\n ...commonOutputUMD,\n entryFileNames: `peer/umd/${libraryFilename}.cjs`,\n paths: getPaths(\"peer\", \"umd\"),\n },\n ],\n plugins: getPlugins(\"peer\", {\n transpile,\n typescript: isTS(peerEntry),\n }),\n },\n {\n external: external.peer,\n input: peerEntry,\n output: [\n {\n ...commonOutputESM,\n entryFileNames: `peer/esm/${libraryFilename}.min.js`,\n paths: getPaths(\"peer\", \"esm\"),\n },\n {\n ...commonOutputESM,\n entryFileNames: `peer/esm/${libraryFilename}.min.mjs`,\n paths: getPaths(\"peer\", \"esm\"),\n },\n {\n ...commonOutputUMD,\n entryFileNames: `peer/umd/${libraryFilename}.min.js`,\n paths: getPaths(\"peer\", \"umd\"),\n },\n {\n ...commonOutputUMD,\n entryFileNames: `peer/umd/${libraryFilename}.min.cjs`,\n paths: getPaths(\"peer\", \"umd\"),\n },\n ],\n plugins: getPlugins(\"peer\", {\n minimize,\n transpile,\n typescript: isTS(peerEntry),\n }),\n },\n\n {\n external: external.esnext,\n input: esnextEntry,\n output: [\n {\n ...commonOutputESM,\n entryFileNames: `esnext/esm/${libraryFilename}.js`,\n paths: getPaths(\"esnext\", \"esm\"),\n },\n {\n ...commonOutputESM,\n entryFileNames: `esnext/esm/${libraryFilename}.mjs`,\n paths: getPaths(\"esnext\", \"esm\"),\n },\n {\n ...commonOutputESM,\n entryFileNames: `esnext/umd/${libraryFilename}.js`,\n paths: getPaths(\"esnext\", \"umd\"),\n },\n {\n ...commonOutputESM,\n entryFileNames: `esnext/umd/${libraryFilename}.cjs`,\n paths: getPaths(\"esnext\", \"umd\"),\n },\n ],\n plugins: getPlugins(\"esnext\", {\n typescript: isTS(esnextEntry),\n }),\n },\n {\n external: external.esnext,\n input: esnextEntry,\n output: [\n {\n ...commonOutputESM,\n entryFileNames: `esnext/esm/${libraryFilename}.min.js`,\n paths: getPaths(\"esnext\", \"esm\"),\n },\n {\n ...commonOutputESM,\n entryFileNames: `esnext/esm/${libraryFilename}.min.mjs`,\n paths: getPaths(\"esnext\", \"esm\"),\n },\n {\n ...commonOutputUMD,\n entryFileNames: `esnext/umd/${libraryFilename}.min.js`,\n paths: getPaths(\"esnext\", \"umd\"),\n },\n {\n ...commonOutputUMD,\n entryFileNames: `esnext/umd/${libraryFilename}.min.cjs`,\n paths: getPaths(\"esnext\", \"umd\"),\n },\n ],\n plugins: getPlugins(\"esnext\", {\n minimize,\n typescript: isTS(esnextEntry),\n }),\n },\n ];\n}\n","import { execSync } from \"child_process\";\nimport { readFileSync } from \"fs\";\nimport { fileSync, setGracefulCleanup } from \"tmp-promise\";\n\nsetGracefulCleanup();\n\ninterface PackageInfo {\n id: string;\n name: string;\n version: string;\n size: number;\n unpackedSize: number;\n shasum: string;\n integrity: string;\n filename: string;\n files: FileInfo[];\n entryCount: number;\n bundled: string[];\n}\n\ninterface FileInfo {\n path: string;\n size: number;\n mode: number;\n}\n\nconst PACK_CMD = [\n \"npm\",\n \"pack\",\n // Don't create any package, we just need to see what would be packed.\n \"--dry-run\",\n // Prevents things like Husky from outputting to stdout, we don't need them\n // here anyway.\n \"--ignore-scripts\",\n // JSON is easier to parse and more stable between npm versions.\n \"--json\",\n];\n\n/**\n * @param textOrLines\n * @param message\n */\nfunction logStderr(textOrLines: unknown, message: string): never {\n console.group('\"npm pack\" output');\n console.error(textOrLines);\n console.groupEnd();\n\n throw new Error(message);\n}\n\n/**\n *\n */\nfunction runNpmPack(): PackageInfo[] {\n const tmpFile = fileSync().name;\n\n // There are issues with incomplete output when the stderr is read directly\n // into Node. Saving it into tmp file using shell redirection and reading it\n // from there doesn't exhibit those issues.\n execSync(`${PACK_CMD.join(\" \")} > ${tmpFile}`, {\n encoding: \"utf-8\",\n env: {\n ...process.env,\n LC_ALL: \"C\",\n NODE_ENV: \"production\",\n },\n });\n\n const stdout = readFileSync(tmpFile, \"utf-8\")\n // TODO: Why doesn't --ignore-scripts turn Husky off? It works in CLI.\n .replace(/^([^[]*)\\[\\n/, \"[\");\n\n try {\n return JSON.parse(stdout);\n } catch (error) {\n logStderr({ error, stdout }, 'Failed to parse \"npm pack\" JSON output.');\n }\n}\n\n/**\n * @param lines\n * @param packageInfo\n */\nfunction extractFiles(\n packageInfo: PackageInfo,\n): Record<string, Record<string, unknown>> {\n const files = packageInfo.files.map(\n ({ path, size }): [string, Record<string, unknown>] => [\n path,\n { empty: size === 0 },\n ],\n );\n\n if (files.length === 0) {\n logStderr(packageInfo, 'No files found in \"npm pack\" output.');\n }\n\n return Object.fromEntries(files);\n}\n\n/**\n * @param lines\n * @param packageInfo\n */\nfunction extractName(packageInfo: PackageInfo): string {\n const name = packageInfo.name;\n\n if (name == null) {\n logStderr(\n packageInfo,\n 'Can\\'t find the name of the package in \"npm pack\" output.',\n );\n }\n\n return name.replace(/^npm notice name: */, \"\");\n}\n\n/**\n *\n */\nexport function inspectNpmPack(): {\n name: string;\n files: Record<string, Record<string, unknown>>;\n} {\n const [packageInfo, ...unexpectedExtras] = runNpmPack();\n\n if (packageInfo == null) {\n logStderr(\n [packageInfo, ...unexpectedExtras],\n 'There was no output from \"npm pack\".',\n );\n }\n\n if (unexpectedExtras.length !== 0) {\n logStderr(\n [packageInfo, ...unexpectedExtras],\n 'Can\\'t process the output of \"npm pack\" if there are multiple packages.',\n );\n }\n\n const files = extractFiles(packageInfo);\n const name = extractName(packageInfo);\n\n return {\n name,\n files,\n };\n}\n"],"names":["readFile","chaiConfig","sep","validateExpect","join","injectCSS","minimize","transpile","resolve","dirname","fileURLToPath","URL","stringPlugin","setGracefulCleanup","fileSync","execSync","readFileSync"],"mappings":"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"}
@@ -4,8 +4,8 @@
4
4
  *
5
5
  * Development utilities for the Vis family projects.
6
6
  *
7
- * @version 5.0.2
8
- * @date 2025-07-19T14:03:21.252Z
7
+ * @version 5.0.4
8
+ * @date 2025-08-01T18:59:42.551Z
9
9
  *
10
10
  * @copyright (c) 2011-2017 Almende B.V, http://almende.com
11
11
  * @copyright (c) 2017-2019 visjs contributors, https://github.com/visjs
@@ -314,7 +314,7 @@ const generateRollupPluginArray = (libraryFilename, assets, copyTargetsBundle, c
314
314
  babelrc: false,
315
315
  configFile: false,
316
316
  exclude: BABEL_IGNORE_RE,
317
- extensions: [".js", ".ts"],
317
+ extensions: [".js", ".ts", ".mjs", ".cjs"],
318
318
  presets: [["vis-dev-utils/babel-preset", { ts: true }]]
319
319
  })
320
320
  ] : [],
@@ -1 +1 @@
1
- {"version":3,"file":"vis-dev-utils.mjs","sources":["../src/module/constants.ts","../src/module/header.ts","../src/module/generate-rollup-configuration/index.ts","../src/module/inspect-npm-pack.ts"],"sourcesContent":["export const BABEL_IGNORE_RE = /[\\\\/]node_modules[\\\\/](?!.*[\\\\/]esnext[\\\\/])/;\n","import { readFile } from \"fs/promises\";\n\n/**\n * Take a string and return a doc block comment.\n * @param string - The raw text to be included in the comment.\n * @throws If the string already contains a comment.\n * @returns A block doc comment string that can be for example prepended to a\n * bundled JavaScript file.\n */\nexport function textToComment(string: string): string {\n if (string.includes(\"*/\")) {\n throw new Error(\n \"Don't include comments in the input string. It will be converted automatically.\",\n );\n }\n\n return (\n \"/**\\n\" +\n string\n // Remove empty lines from the start.\n .replace(/^[\\n\\r]*/, \"\")\n // Remove empty lines from the end.\n .replace(/[\\n\\r\\s]*$/, \"\")\n // Process each line on it's own from now on.\n .split(\"\\n\")\n // Prefix each line with an asterisk.\n .map((line) => \" * \" + line)\n // Remove trailing white space.\n .map((line) => line.replace(/[^\\S\\r\\n]*$/, \"\"))\n // Join back into a string.\n .join(\"\\n\") +\n \"\\n */\\n\"\n );\n}\n\nconst buildHeader = ({\n customText,\n date,\n description,\n homepage,\n name,\n version,\n}: HeaderOptions): string =>\n textToComment(`\n${name}\n${homepage}\n\n${description}\n\n@version ${version}\n@date ${date}\n\n@copyright (c) 2011-2017 Almende B.V, http://almende.com\n@copyright (c) 2017-2019 visjs contributors, https://github.com/visjs\n\n@license\nvis.js is dual licensed under both\n\n 1. The Apache 2.0 License\n http://www.apache.org/licenses/LICENSE-2.0\n\n and\n\n 2. The MIT License\n http://opensource.org/licenses/MIT\n\nvis.js may be distributed under either license.\n\n${customText}\n`);\n\n/**\n * Options for {@link generateHeader}.\n */\nexport interface HeaderOptions {\n /** Any text to be appended to the standard header. */\n customText: string;\n /** The build date. */\n date: string;\n /** A description of the project. */\n description: string;\n /** An URL to the homepage of the project. */\n homepage: string;\n /** The name of the project. */\n name: string;\n /** The version of the build. */\n version: string;\n}\n\nconst defaultDate = new Date().toISOString();\n\n/**\n * Generate a dynamic header banner.\n * @param options - Optional information to be included. Otherwise no custom\n * text will be appended, the date will be the time when this module was\n * imported (most likely the start of the build process) and the rest will be\n * read from package.json.\n * @throws If the string already contains a comment.\n * @returns Ready to use banner text.\n */\nexport async function generateHeader(\n options?: Partial<HeaderOptions>,\n): Promise<string> {\n const packageJSON = JSON.parse(\n await readFile(\n (await import(\"find-up\")).findUpSync(\"package.json\")!,\n \"utf8\",\n ),\n );\n\n const defaultDescription = packageJSON.description;\n const defaultHomepage = packageJSON.homepage;\n const defaultName = packageJSON.name;\n const defaultVersion = packageJSON.version;\n\n const {\n customText = \"\",\n date = defaultDate,\n description = defaultDescription,\n homepage = defaultHomepage,\n name = defaultName,\n version = defaultVersion,\n } = options || {};\n\n return buildHeader({\n customText,\n date,\n description,\n homepage,\n name,\n version,\n });\n}\n","import fs from \"node:fs/promises\";\nimport { fileURLToPath, URL } from \"node:url\";\nimport { type RollupOptions, type Plugin } from \"rollup\";\nimport analyzerPlugin from \"rollup-plugin-analyzer\";\nimport babelPlugin from \"@rollup/plugin-babel\";\nimport commonjsPlugin from \"@rollup/plugin-commonjs\";\nimport copyPlugin, { Target as CopyTarget } from \"rollup-plugin-copy\";\nimport jsonPlugin from \"@rollup/plugin-json\";\nimport nodeResolvePlugin from \"@rollup/plugin-node-resolve\";\nimport postcssAssetsPlugin from \"postcss-assets\";\nimport postcssPlugin from \"rollup-plugin-postcss\";\nimport stripCodePlugin from \"rollup-plugin-strip-code\";\nimport terserPlugin from \"@rollup/plugin-terser\";\nimport typescriptPlugin from \"@rollup/plugin-typescript\";\nimport { generateHeader } from \"../header\";\nimport { join, resolve, sep } from \"path\";\nimport { string as stringPlugin } from \"rollup-plugin-string\";\nimport {\n config as chaiConfig,\n expect as validateExpect,\n use as chaiUse,\n} from \"chai\";\n\nimport { BABEL_IGNORE_RE } from \"../constants\";\nimport { type HeaderOptions } from \"../header\";\nimport { type OptionalOptions } from \"../util\";\nimport { dirname } from \"node:path\";\n\nconst rawGlobby = import(\"globby\");\n\nchaiConfig.truncateThreshold = Number.MAX_SAFE_INTEGER;\n\nconst VIS_DEBUG = [\"1\", \"true\", \"y\", \"yes\"].includes(\n process.env[\"VIS_DEBUG\"] || \"false\",\n);\nconst VIS_TEST = [\"1\", \"true\", \"y\", \"yes\"].includes(\n process.env[\"VIS_TEST\"] || \"false\",\n);\n\n/**\n * Simple glob with workaround for non-posix paths.\n * @param pattern - Single glob pattern.\n * @returns Globbed paths.\n */\nasync function glob(\n pattern: string,\n): ReturnType<(typeof import(\"globby\"))[\"globby\"]> {\n return (await rawGlobby).globby(\n sep === \"\\\\\" ? pattern.replace(/\\\\/g, \"/\") : pattern,\n );\n}\n\nexport interface GRCOptions {\n /**\n * Where to look for files when inlining assets into CSS.\n */\n assets: string;\n /**\n * Additional files to be copied.\n */\n copyTargets: {\n /**\n * These will be copied relative to the root of each bundle (esnext,\n * standalone…).\n */\n bundle: CopyTarget[];\n /**\n * These will be copied relative to the root of each variant of each bundle\n * (esnext/esm, esnext/umd, standalone/esm…).\n */\n variant: CopyTarget[];\n };\n /**\n * The base dir with entry points for various builds. The extensions\n * determines whether TypeScript processing will be used.\n */\n entryPoints: string;\n /**\n * These are the dependencies that would cause interoperability issues if they\n * were bundled. A notable example here is vis-data.\n */\n externalForPeerBuild: string[];\n /**\n * Passed straight to Rollup.\n */\n globals: Record<string, string>;\n /**\n * Options for {@link generateHeader}.\n */\n header: Partial<HeaderOptions>;\n /**\n * This will be used as a file name with appropriate extensions appended\n * (like .js, .min.js or .css).\n */\n libraryFilename: string;\n /**\n * Simply required package.json.\n */\n packageJSON: Partial<{\n browser: string;\n dependencies: Record<string, string>;\n devDependencies: Record<string, string>;\n exports: Record<string, Record<string, string | undefined> | undefined>;\n files: string[];\n jsnext: string;\n main: string;\n module: string;\n peerDependencies: Record<string, string>;\n types: string;\n }>;\n /**\n * The path to tsconfig.json to be used in this build.\n */\n tsconfig: string;\n}\n\n/**\n * These are the dependencies that follow standalone/peer/ESNext export\n * structure.\n */\nconst dependenciesWithVisExportStructure = [\n \"vis-data\",\n \"vis-graph3d\",\n \"vis-network\",\n \"vis-timeline\",\n \"vis-util\",\n \"vis-uuid\",\n];\n\n/**\n * This ensures that dependencies on Vis projects point to ESNext builds.\n * @param deps - The original dependencies as listed in package.json.\n * @returns An array of dependencies for Rollup.\n */\nfunction processDependencies(\n deps: string[] | Record<string, string>,\n): string[] {\n const depNames = Array.isArray(deps) ? deps : Object.keys(deps);\n\n return depNames.flatMap((key): string[] =>\n dependenciesWithVisExportStructure.includes(key)\n ? [key + \"/esnext\"]\n : [key],\n );\n}\n\n/**\n * This ensures that all Vis projects are imported using ESNext builds.\n * Importing standalone versions will not only cause problems in production but\n * will log warnings during build process and won't work at all.\n * @param globals - The original globals.\n * @returns Globals forcing the use of ESNext builds for Vis projects.\n */\nfunction processGlobals(\n globals: Record<string, string>,\n): Record<string, string> {\n return Object.entries(globals).reduce<Record<string, string>>(\n (acc, [key, value]): Record<string, string> => {\n acc[\n dependenciesWithVisExportStructure.includes(key) ? key + \"/esnext\" : key\n ] = value;\n\n return acc;\n },\n Object.create(null),\n );\n}\n\n/**\n * @param path\n */\nfunction isTS(path: string): boolean {\n return path.endsWith(\".ts\");\n}\n\n/*\n * Make sure that Chai doesn't throw and therefore stop execution on failed\n * validations during debugging.\n */\nconst validate: (\n callback: (expect: Chai.ExpectStatic) => Promise<void> | void,\n) => Promise<void> = VIS_DEBUG\n ? async (\n callback: (expect: Chai.ExpectStatic) => Promise<void> | void,\n ): Promise<void> => {\n try {\n await callback(validateExpect);\n } catch (error) {\n console.error(error);\n }\n }\n : async (\n callback: (expect: Chai.ExpectStatic) => Promise<void> | void,\n ): Promise<void> => {\n await callback(validateExpect);\n };\n\n/**\n * Transform ESNext import paths to match the build version being constructed.\n * @param buildVariant - ESNext or peer build. This is not available for\n * standalone as only peer and ESNext have imports.\n * @param moduleFormat - What kind of module system to use.\n * @returns Path overrides for Rollup.\n */\nfunction getPaths(\n buildVariant: \"esnext\" | \"peer\",\n moduleFormat: \"esm\" | \"umd\",\n): Record<string, string> {\n /**\n * @param lib\n */\n function getPath(\n lib:\n | \"charts\"\n | \"data\"\n | \"graph3d\"\n | \"network\"\n | \"timeline\"\n | \"util\"\n | \"uuid\",\n ): Record<string, string> {\n return {\n [`vis-${lib}/esnext`]: `vis-${lib}/${buildVariant}/${moduleFormat}/vis-${lib}.js`,\n };\n }\n\n return {\n ...getPath(\"charts\"),\n ...getPath(\"data\"),\n ...getPath(\"graph3d\"),\n ...getPath(\"network\"),\n ...getPath(\"timeline\"),\n ...getPath(\"util\"),\n ...getPath(\"uuid\"),\n };\n}\n\n/**\n * Change target's dest so that it's relative to given dir(s).\n * @param dirs - The directories there targets should be relative to.\n * @returns A function that can be directly supplied to Array.map().\n */\nfunction scopeCopyTarget(\n ...dirs: readonly string[]\n): (target: CopyTarget) => CopyTarget {\n return function (target): CopyTarget {\n const dest = (\n Array.isArray(target.dest) ? target.dest : [target.dest]\n ) as readonly string[];\n\n const bundleDest = dest.flatMap((path): string[] =>\n dirs.map((dir): string => join(dir, path)),\n );\n\n return {\n ...target,\n dest: bundleDest,\n };\n };\n}\n\nconst injectCSS = true;\nconst minimize = true;\nconst transpile = true;\nconst generateRollupPluginArray = (\n libraryFilename: string,\n assets: string,\n copyTargetsBundle: readonly CopyTarget[],\n copyTargetsVariant: readonly CopyTarget[],\n tsconfig: string,\n mode: \"production\" | \"development\" | \"test\",\n bundleType: \"esnext\" | \"standalone\" | \"peer\",\n {\n injectCSS = false,\n minimize = false,\n strip = mode === \"production\",\n transpile = false,\n typescript = false,\n } = {},\n): Plugin[] => {\n const fullLibraryFilename = `${libraryFilename}${minimize ? \".min\" : \"\"}`;\n\n const bundleDir = bundleType;\n const bundleVariantDirs = [\"esm\", \"umd\"].map((variant): string =>\n join(bundleDir, variant),\n );\n\n return [\n ...(strip\n ? [\n // This should be first because it removes code from source files.\n // It's much easier to follow if the removal happens before any\n // transformations.\n stripCodePlugin({\n start_comment: \"develblock:start\",\n end_comment: \"develblock:end\",\n }),\n ]\n : [\n // Remove the comments marking devel blocks as they can cause problems\n // later on because transpilation shuffles things around which may\n // lead to all kinds of issues including syntax errors.\n stripCodePlugin({\n pattern: /[\\t ]*\\/\\* ?develblock:(start|end) ?\\*\\//g,\n }),\n ]),\n analyzerPlugin(VIS_DEBUG ? undefined : { limit: 10, summaryOnly: true }),\n copyPlugin({\n verbose: VIS_DEBUG,\n targets: [\n // JavaScript\n {\n src: resolve(\n dirname(fileURLToPath(new URL(import.meta.url))),\n \"assets/bundle-root.js\",\n ),\n dest: bundleDir,\n rename: \"index.js\",\n },\n {\n src: resolve(\n dirname(fileURLToPath(new URL(import.meta.url))),\n \"assets/bundle-index.js\",\n ),\n dest: bundleVariantDirs,\n rename: \"index.js\",\n transform: (content: Buffer): string =>\n content.toString().replace(\"{{filename}}\", libraryFilename),\n },\n\n // TypeScript\n {\n src: resolve(\n dirname(fileURLToPath(new URL(import.meta.url))),\n \"assets/bundle-root.d.ts\",\n ),\n dest: bundleDir,\n rename: \"index.d.ts\",\n },\n {\n src: resolve(\n dirname(fileURLToPath(new URL(import.meta.url))),\n \"assets/bundle-index.d.ts\",\n ),\n dest: bundleVariantDirs,\n rename: \"index.d.ts\",\n transform: (content: Buffer): string =>\n content.toString().replace(\"{{filename}}\", libraryFilename),\n },\n {\n src: resolve(\n dirname(fileURLToPath(new URL(import.meta.url))),\n \"assets/bundle-file.d.ts\",\n ),\n dest: bundleVariantDirs,\n rename: `${fullLibraryFilename}.d.ts`,\n transform: (content: Buffer): string =>\n content.toString().replace(\"{{bundle-type}}\", bundleType),\n },\n\n // Custom\n ...copyTargetsBundle.map(scopeCopyTarget(bundleDir)),\n ...copyTargetsVariant.map(scopeCopyTarget(...bundleVariantDirs)),\n ],\n }),\n nodeResolvePlugin({\n browser: true,\n extensions: [\".js\", \".json\", \".ts\"],\n mainFields: [\"jsnext\", \"module\", \"main\"],\n preferBuiltins: false,\n }),\n ...(typescript\n ? [\n typescriptPlugin({\n tsconfig,\n }),\n ]\n : []),\n commonjsPlugin(),\n postcssPlugin({\n extract: !injectCSS && `styles/${fullLibraryFilename}.css`,\n inject: injectCSS,\n minimize,\n // Prevent the sourcemaps from being injected into JS files.\n sourceMap: !injectCSS,\n plugins: [\n postcssAssetsPlugin({\n loadPaths: [assets],\n }),\n ],\n }),\n jsonPlugin(),\n stringPlugin({\n include: \"**/*.txt\",\n }),\n ...(transpile\n ? [\n babelPlugin({\n babelHelpers: \"runtime\",\n babelrc: false,\n configFile: false,\n exclude: BABEL_IGNORE_RE,\n extensions: [\".js\", \".ts\"],\n presets: [[\"vis-dev-utils/babel-preset\", { ts: true }]],\n }),\n ]\n : []),\n ...(minimize\n ? [\n terserPlugin({\n format: {\n comments: \"some\",\n },\n }),\n ]\n : []),\n ];\n};\n\n/**\n * Prepare ready to use Rollup configuration file.\n * @remarks\n * IMPORTANT: Use `babel.config.js` in the root of the project, `.babelrc` files\n * are ignored.\n *\n * You can surround any piece of code with `stripInProduction: { debug code }`\n * to strip it from the generated bundles unless VIS_DEBUG=true environmental\n * variable is set. This is useful for example to render bounding boxes during\n * debugging but automatically switch it off without any performance or bundle\n * size penalty in production. Debugger statements are also automatically\n * stripped.\n *\n * Plugins:\n * - `\\@rollup/plugin-babel` (skipped in ESNext)\n * - `\\@rollup/plugin-commonjs`\n * - `\\@rollup/plugin-json`\n * - `\\@rollup/plugin-node-resolve`\n * - `\\@rollup/plugin-strip` (skipped with VIS_DEBUG=true env var)\n * - `\\@rollup/plugin-terser` (only in minified)\n * - `postcss-assets`\n * - `rollup-plugin-copy`\n * - `rollup-plugin-postcss`\n * - `rollup-plugin-typescript2` (skipped if the entry is .js)\n * @param options - See {@link GRCOptions}.\n * @param mode - Whether the code should be processed for production,\n * development or testing.\n * @returns Ready to use configuration object that can be just exported from\n * `rollup.config.js` or mutated in any way if necessary.\n */\nexport async function generateRollupConfiguration(\n options: OptionalOptions<GRCOptions>,\n mode: \"production\" | \"development\" | \"test\" = VIS_TEST\n ? \"test\"\n : VIS_DEBUG\n ? \"development\"\n : \"production\",\n): Promise<RollupOptions[]> {\n const {\n assets = \".\",\n copyTargets: {\n bundle: copyTargetsBundle = [],\n variant: copyTargetsVariant = [],\n } = {} as GRCOptions[\"copyTargets\"],\n externalForPeerBuild = [],\n globals = {},\n header = { name: \"Unknown Library\" },\n libraryFilename = \"unknown-library\",\n packageJSON: {\n dependencies = {},\n devDependencies = {},\n peerDependencies = {},\n ...packageJSONRest\n } = {} as GRCOptions[\"packageJSON\"],\n entryPoints: entryPoint = \"./src\",\n tsconfig = \"tsconfig.json\",\n }: GRCOptions = (options || {}) as GRCOptions;\n\n validate((expect): void => {\n // Note: Every array is a superset of empty array.\n if (Object.keys(peerDependencies).length > 0) {\n expect(\n Object.keys(dependencies),\n \"The dependencies and peer dependencies have to be disjoint sets\",\n )\n .to.be.an(\"array\")\n .that.does.not.include.any.members(Object.keys(peerDependencies));\n }\n });\n validate((expect): void => {\n expect(\n Object.keys(devDependencies),\n \"For convenience all peer dependencies also have to be dev dependencies\",\n )\n .to.be.an(\"array\")\n .that.includes.all.members(Object.keys(peerDependencies));\n });\n validate((expect): void => {\n expect(\n Object.keys(peerDependencies),\n \"Peer build externals have to be a subset of peer dependencies\",\n )\n .to.be.an(\"array\")\n .that.includes.all.members(externalForPeerBuild);\n });\n validate((expect): void => {\n expect(\n [...Object.keys(dependencies), ...Object.keys(peerDependencies)].sort(),\n \"Globals have to be provided for all runtime and peer dependencies but nothing else\",\n )\n .to.be.an(\"array\")\n .that.deep.equals(Object.keys(globals).sort());\n });\n\n validate(async (expect): Promise<void> => {\n expect(resolve(assets), \"Assets have to be a directory\").to.be.a(\"string\");\n const stats = await fs.stat(resolve(assets));\n expect(stats.isDirectory(), \"Assets have to be a directory\").to.be.true;\n });\n validate(async (expect): Promise<void> => {\n expect(entryPoint, \"The entry point has to be directory\").to.be.a(\"string\");\n const stats = await fs.stat(entryPoint);\n expect(stats.isDirectory(), \"The entry point has to be directory\").to.be\n .true;\n });\n const [esnextEntry, peerEntry, standaloneEntry] = await Promise.all(\n [\"ESNext\", \"peer\", \"standalone\"].map(async (name): Promise<string> => {\n const filenameGlob = `entry-${name.toLowerCase()}.{js,ts}`;\n const files = await glob(resolve(entryPoint, filenameGlob));\n\n validate(async (expect): Promise<void> => {\n expect(\n files,\n `There has to be a single entry file (${filenameGlob}) for the ${name} build`,\n )\n .to.have.lengthOf(1)\n .and.to.have.ownProperty(\"0\");\n const stats = await fs.stat(resolve(files[0]));\n expect(\n stats.isFile(),\n `The entry file (${filenameGlob}) for the ${name} build has to be a file`,\n ).to.be.true;\n });\n\n return files[0];\n }),\n );\n validate(async (expect): Promise<void> => {\n expect(\n resolve(\"./declarations\"),\n \"There has to be a directory with TypeScript declarations\",\n ).to.be.a(\"string\");\n const stats = await fs.stat(resolve(\"./declarations\"));\n expect(\n stats.isDirectory(),\n \"There has to be a directory with TypeScript declarations\",\n ).to.be.true;\n });\n\n validate((expect): void => {\n expect(\n packageJSONRest,\n \"The directories with built files have to be included in the package\",\n )\n .to.have.ownProperty(\"files\")\n .that.is.an(\"array\")\n .and.includes.all.members([\n \"declarations\",\n \"esnext\",\n \"peer\",\n \"standalone\",\n ]);\n });\n\n const expectedExports = Object.fromEntries([\n [\n \".\",\n {\n import: `./peer/esm/${libraryFilename}.mjs`,\n require: `./peer/umd/${libraryFilename}.cjs`,\n types: \"./declarations/index.d.ts\",\n },\n ],\n [\"./package.json\", \"./package.json\"],\n [\n \"./declarations/index.d.ts\",\n {\n types: \"./declarations/index.d.ts\",\n },\n ],\n ...[\"standalone\", \"peer\", \"esnext\"].flatMap(\n (variant): [string, Record<string, string>][] => [\n [\n `./${variant}`,\n {\n import: `./${variant}/esm/${libraryFilename}.mjs`,\n require: `./${variant}/umd/${libraryFilename}.cjs`,\n types: \"./declarations/index.d.ts\",\n },\n ],\n [\n `./${variant}/esm/${libraryFilename}.js`,\n {\n import: `./${variant}/esm/${libraryFilename}.mjs`,\n types: \"./declarations/index.d.ts\",\n },\n ],\n [\n `./${variant}/esm/${libraryFilename}.mjs`,\n {\n import: `./${variant}/esm/${libraryFilename}.mjs`,\n types: \"./declarations/index.d.ts\",\n },\n ],\n [\n `./${variant}/esm/${libraryFilename}.min.js`,\n {\n import: `./${variant}/esm/${libraryFilename}.min.mjs`,\n types: \"./declarations/index.d.ts\",\n },\n ],\n [\n `./${variant}/esm/${libraryFilename}.min.mjs`,\n {\n import: `./${variant}/esm/${libraryFilename}.min.mjs`,\n types: \"./declarations/index.d.ts\",\n },\n ],\n [\n `./${variant}/umd/${libraryFilename}.js`,\n {\n require: `./${variant}/umd/${libraryFilename}.cjs`,\n types: \"./declarations/index.d.ts\",\n },\n ],\n [\n `./${variant}/umd/${libraryFilename}.cjs`,\n {\n require: `./${variant}/umd/${libraryFilename}.cjs`,\n types: \"./declarations/index.d.ts\",\n },\n ],\n [\n `./${variant}/umd/${libraryFilename}.min.js`,\n {\n require: `./${variant}/umd/${libraryFilename}.min.cjs`,\n types: \"./declarations/index.d.ts\",\n },\n ],\n [\n `./${variant}/umd/${libraryFilename}.min.cjs`,\n {\n require: `./${variant}/umd/${libraryFilename}.min.cjs`,\n types: \"./declarations/index.d.ts\",\n },\n ],\n ],\n ),\n ]);\n\n validate((expect): void => {\n expect(\n packageJSONRest,\n \"Package JSON's type property has to point to the declarations\",\n )\n .to.have.ownProperty(\"types\")\n .that.is.a(\"string\")\n .and.equals(\"./declarations/index.d.ts\")\n .and.is.oneOf(Object.keys(expectedExports));\n });\n validate((expect): void => {\n expect(\n packageJSONRest,\n \"Package JSON's browser property has to point to the minifed UMD build\",\n )\n .to.have.ownProperty(\"browser\")\n .that.is.a(\"string\")\n .and.equals(`./peer/umd/${libraryFilename}.min.cjs`)\n .and.is.oneOf(Object.keys(expectedExports));\n });\n validate((expect): void => {\n expect(\n packageJSONRest,\n \"Package JSON's main property has to point to the UMD build\",\n )\n .to.have.ownProperty(\"main\")\n .that.is.a(\"string\")\n .and.equals(`./peer/umd/${libraryFilename}.cjs`)\n .and.is.oneOf(Object.keys(expectedExports));\n });\n validate((expect): void => {\n expect(\n packageJSONRest,\n \"Package JSON's modul property has to point to the ESM build\",\n )\n .to.have.ownProperty(\"module\")\n .that.is.a(\"string\")\n .and.equals(`./peer/esm/${libraryFilename}.mjs`)\n .and.is.oneOf(Object.keys(expectedExports));\n });\n validate((expect): void => {\n expect(\n packageJSONRest,\n \"Package JSON's jsnext has to point to the ESNext build\",\n )\n .to.have.ownProperty(\"jsnext\")\n .that.is.a(\"string\")\n .and.equals(`./esnext/esm/${libraryFilename}.mjs`)\n .and.is.oneOf(Object.keys(expectedExports));\n });\n\n validate((expect): void => {\n expect(\n Object.fromEntries(\n Object.entries(packageJSONRest.exports ?? {}).filter(([key]): boolean =>\n Object.keys(expectedExports).includes(key),\n ),\n ),\n \"Package JSON's exports have to contain common entries\",\n ).to.deep.equal(expectedExports);\n });\n\n validate(async (expect): Promise<void> => {\n const [{ status }] = await Promise.allSettled([\n fs.access(resolve(\"./.babelrc\")),\n ]);\n expect(\n status,\n \"Babelrc is ignored. Use babel.config.js config file instead.\",\n ).to.equal(\"rejected\");\n });\n validate(async (expect): Promise<void> => {\n const [{ status }] = await Promise.allSettled([\n fs.access(resolve(\"./babel.config.js\")),\n ]);\n expect(status, \"There has to be a babel.config.js config file.\").to.equal(\n \"fulfilled\",\n );\n });\n\n const banner = await generateHeader(header);\n const external = {\n // No dependencies are bundled.\n esnext: processDependencies([\n ...Object.keys(dependencies),\n ...Object.keys(peerDependencies),\n\n // This will show a warning if any of them is used. The idea behind\n // it is that if someone accidentaly imports a dev dependency they\n // won't accidentaly add it to globals and Rollup will warn them\n // about their error.\n ...Object.keys(devDependencies),\n ]),\n // Only dependencies that cause compatibility issues are not bundled.\n peer: processDependencies(externalForPeerBuild),\n // No runtime dependencies, everything's bundled.\n standalone: [],\n };\n\n const commonOutput = {\n banner,\n dir: \".\",\n globals: processGlobals(globals),\n sourcemap: VIS_TEST ? \"inline\" : true,\n } as const;\n const commonOutputESM = {\n ...commonOutput,\n format: \"esm\",\n } as const;\n const commonOutputUMD = {\n ...commonOutput,\n exports: \"named\",\n extend: true,\n format: \"umd\",\n name: \"vis\",\n strict: false, // Regenerator runtime causes issues with CSP in strict mode.\n } as const;\n\n // Note: Binding more than 4 at a time is not typesafe in TS.\n const getPlugins = generateRollupPluginArray\n .bind(null, libraryFilename)\n .bind(null, assets)\n .bind(null, copyTargetsBundle)\n .bind(null, copyTargetsVariant)\n .bind(null, tsconfig)\n .bind(null, mode);\n\n return [\n {\n external: external.standalone,\n input: standaloneEntry,\n output: [\n {\n ...commonOutputESM,\n entryFileNames: `standalone/esm/${libraryFilename}.js`,\n },\n {\n ...commonOutputESM,\n entryFileNames: `standalone/esm/${libraryFilename}.mjs`,\n },\n {\n ...commonOutputUMD,\n entryFileNames: `standalone/umd/${libraryFilename}.js`,\n },\n {\n ...commonOutputUMD,\n entryFileNames: `standalone/umd/${libraryFilename}.cjs`,\n },\n ],\n plugins: getPlugins(\"standalone\", {\n injectCSS,\n transpile,\n typescript: isTS(standaloneEntry),\n }),\n },\n {\n external: external.standalone,\n input: standaloneEntry,\n output: [\n {\n ...commonOutputESM,\n entryFileNames: `standalone/esm/${libraryFilename}.min.js`,\n },\n {\n ...commonOutputESM,\n entryFileNames: `standalone/esm/${libraryFilename}.min.mjs`,\n },\n {\n ...commonOutputUMD,\n entryFileNames: `standalone/umd/${libraryFilename}.min.js`,\n },\n {\n ...commonOutputUMD,\n entryFileNames: `standalone/umd/${libraryFilename}.min.cjs`,\n },\n ],\n plugins: getPlugins(\"standalone\", {\n injectCSS,\n minimize,\n transpile,\n typescript: isTS(standaloneEntry),\n }),\n },\n\n {\n external: external.peer,\n input: peerEntry,\n output: [\n {\n ...commonOutputESM,\n entryFileNames: `peer/esm/${libraryFilename}.js`,\n paths: getPaths(\"peer\", \"esm\"),\n },\n {\n ...commonOutputESM,\n entryFileNames: `peer/esm/${libraryFilename}.mjs`,\n paths: getPaths(\"peer\", \"esm\"),\n },\n {\n ...commonOutputUMD,\n entryFileNames: `peer/umd/${libraryFilename}.js`,\n paths: getPaths(\"peer\", \"umd\"),\n },\n {\n ...commonOutputUMD,\n entryFileNames: `peer/umd/${libraryFilename}.cjs`,\n paths: getPaths(\"peer\", \"umd\"),\n },\n ],\n plugins: getPlugins(\"peer\", {\n transpile,\n typescript: isTS(peerEntry),\n }),\n },\n {\n external: external.peer,\n input: peerEntry,\n output: [\n {\n ...commonOutputESM,\n entryFileNames: `peer/esm/${libraryFilename}.min.js`,\n paths: getPaths(\"peer\", \"esm\"),\n },\n {\n ...commonOutputESM,\n entryFileNames: `peer/esm/${libraryFilename}.min.mjs`,\n paths: getPaths(\"peer\", \"esm\"),\n },\n {\n ...commonOutputUMD,\n entryFileNames: `peer/umd/${libraryFilename}.min.js`,\n paths: getPaths(\"peer\", \"umd\"),\n },\n {\n ...commonOutputUMD,\n entryFileNames: `peer/umd/${libraryFilename}.min.cjs`,\n paths: getPaths(\"peer\", \"umd\"),\n },\n ],\n plugins: getPlugins(\"peer\", {\n minimize,\n transpile,\n typescript: isTS(peerEntry),\n }),\n },\n\n {\n external: external.esnext,\n input: esnextEntry,\n output: [\n {\n ...commonOutputESM,\n entryFileNames: `esnext/esm/${libraryFilename}.js`,\n paths: getPaths(\"esnext\", \"esm\"),\n },\n {\n ...commonOutputESM,\n entryFileNames: `esnext/esm/${libraryFilename}.mjs`,\n paths: getPaths(\"esnext\", \"esm\"),\n },\n {\n ...commonOutputESM,\n entryFileNames: `esnext/umd/${libraryFilename}.js`,\n paths: getPaths(\"esnext\", \"umd\"),\n },\n {\n ...commonOutputESM,\n entryFileNames: `esnext/umd/${libraryFilename}.cjs`,\n paths: getPaths(\"esnext\", \"umd\"),\n },\n ],\n plugins: getPlugins(\"esnext\", {\n typescript: isTS(esnextEntry),\n }),\n },\n {\n external: external.esnext,\n input: esnextEntry,\n output: [\n {\n ...commonOutputESM,\n entryFileNames: `esnext/esm/${libraryFilename}.min.js`,\n paths: getPaths(\"esnext\", \"esm\"),\n },\n {\n ...commonOutputESM,\n entryFileNames: `esnext/esm/${libraryFilename}.min.mjs`,\n paths: getPaths(\"esnext\", \"esm\"),\n },\n {\n ...commonOutputUMD,\n entryFileNames: `esnext/umd/${libraryFilename}.min.js`,\n paths: getPaths(\"esnext\", \"umd\"),\n },\n {\n ...commonOutputUMD,\n entryFileNames: `esnext/umd/${libraryFilename}.min.cjs`,\n paths: getPaths(\"esnext\", \"umd\"),\n },\n ],\n plugins: getPlugins(\"esnext\", {\n minimize,\n typescript: isTS(esnextEntry),\n }),\n },\n ];\n}\n","import { execSync } from \"child_process\";\nimport { readFileSync } from \"fs\";\nimport { fileSync, setGracefulCleanup } from \"tmp-promise\";\n\nsetGracefulCleanup();\n\ninterface PackageInfo {\n id: string;\n name: string;\n version: string;\n size: number;\n unpackedSize: number;\n shasum: string;\n integrity: string;\n filename: string;\n files: FileInfo[];\n entryCount: number;\n bundled: string[];\n}\n\ninterface FileInfo {\n path: string;\n size: number;\n mode: number;\n}\n\nconst PACK_CMD = [\n \"npm\",\n \"pack\",\n // Don't create any package, we just need to see what would be packed.\n \"--dry-run\",\n // Prevents things like Husky from outputting to stdout, we don't need them\n // here anyway.\n \"--ignore-scripts\",\n // JSON is easier to parse and more stable between npm versions.\n \"--json\",\n];\n\n/**\n * @param textOrLines\n * @param message\n */\nfunction logStderr(textOrLines: unknown, message: string): never {\n console.group('\"npm pack\" output');\n console.error(textOrLines);\n console.groupEnd();\n\n throw new Error(message);\n}\n\n/**\n *\n */\nfunction runNpmPack(): PackageInfo[] {\n const tmpFile = fileSync().name;\n\n // There are issues with incomplete output when the stderr is read directly\n // into Node. Saving it into tmp file using shell redirection and reading it\n // from there doesn't exhibit those issues.\n execSync(`${PACK_CMD.join(\" \")} > ${tmpFile}`, {\n encoding: \"utf-8\",\n env: {\n ...process.env,\n LC_ALL: \"C\",\n NODE_ENV: \"production\",\n },\n });\n\n const stdout = readFileSync(tmpFile, \"utf-8\")\n // TODO: Why doesn't --ignore-scripts turn Husky off? It works in CLI.\n .replace(/^([^[]*)\\[\\n/, \"[\");\n\n try {\n return JSON.parse(stdout);\n } catch (error) {\n logStderr({ error, stdout }, 'Failed to parse \"npm pack\" JSON output.');\n }\n}\n\n/**\n * @param lines\n * @param packageInfo\n */\nfunction extractFiles(\n packageInfo: PackageInfo,\n): Record<string, Record<string, unknown>> {\n const files = packageInfo.files.map(\n ({ path, size }): [string, Record<string, unknown>] => [\n path,\n { empty: size === 0 },\n ],\n );\n\n if (files.length === 0) {\n logStderr(packageInfo, 'No files found in \"npm pack\" output.');\n }\n\n return Object.fromEntries(files);\n}\n\n/**\n * @param lines\n * @param packageInfo\n */\nfunction extractName(packageInfo: PackageInfo): string {\n const name = packageInfo.name;\n\n if (name == null) {\n logStderr(\n packageInfo,\n 'Can\\'t find the name of the package in \"npm pack\" output.',\n );\n }\n\n return name.replace(/^npm notice name: */, \"\");\n}\n\n/**\n *\n */\nexport function inspectNpmPack(): {\n name: string;\n files: Record<string, Record<string, unknown>>;\n} {\n const [packageInfo, ...unexpectedExtras] = runNpmPack();\n\n if (packageInfo == null) {\n logStderr(\n [packageInfo, ...unexpectedExtras],\n 'There was no output from \"npm pack\".',\n );\n }\n\n if (unexpectedExtras.length !== 0) {\n logStderr(\n [packageInfo, ...unexpectedExtras],\n 'Can\\'t process the output of \"npm pack\" if there are multiple packages.',\n );\n }\n\n const files = extractFiles(packageInfo);\n const name = extractName(packageInfo);\n\n return {\n name,\n files,\n };\n}\n"],"names":["chaiConfig","validateExpect","injectCSS","minimize","transpile","stringPlugin"],"mappings":"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"}
1
+ {"version":3,"file":"vis-dev-utils.mjs","sources":["../src/module/constants.ts","../src/module/header.ts","../src/module/generate-rollup-configuration/index.ts","../src/module/inspect-npm-pack.ts"],"sourcesContent":["export const BABEL_IGNORE_RE = /[\\\\/]node_modules[\\\\/](?!.*[\\\\/]esnext[\\\\/])/;\n","import { readFile } from \"fs/promises\";\n\n/**\n * Take a string and return a doc block comment.\n * @param string - The raw text to be included in the comment.\n * @throws If the string already contains a comment.\n * @returns A block doc comment string that can be for example prepended to a\n * bundled JavaScript file.\n */\nexport function textToComment(string: string): string {\n if (string.includes(\"*/\")) {\n throw new Error(\n \"Don't include comments in the input string. It will be converted automatically.\",\n );\n }\n\n return (\n \"/**\\n\" +\n string\n // Remove empty lines from the start.\n .replace(/^[\\n\\r]*/, \"\")\n // Remove empty lines from the end.\n .replace(/[\\n\\r\\s]*$/, \"\")\n // Process each line on it's own from now on.\n .split(\"\\n\")\n // Prefix each line with an asterisk.\n .map((line) => \" * \" + line)\n // Remove trailing white space.\n .map((line) => line.replace(/[^\\S\\r\\n]*$/, \"\"))\n // Join back into a string.\n .join(\"\\n\") +\n \"\\n */\\n\"\n );\n}\n\nconst buildHeader = ({\n customText,\n date,\n description,\n homepage,\n name,\n version,\n}: HeaderOptions): string =>\n textToComment(`\n${name}\n${homepage}\n\n${description}\n\n@version ${version}\n@date ${date}\n\n@copyright (c) 2011-2017 Almende B.V, http://almende.com\n@copyright (c) 2017-2019 visjs contributors, https://github.com/visjs\n\n@license\nvis.js is dual licensed under both\n\n 1. The Apache 2.0 License\n http://www.apache.org/licenses/LICENSE-2.0\n\n and\n\n 2. The MIT License\n http://opensource.org/licenses/MIT\n\nvis.js may be distributed under either license.\n\n${customText}\n`);\n\n/**\n * Options for {@link generateHeader}.\n */\nexport interface HeaderOptions {\n /** Any text to be appended to the standard header. */\n customText: string;\n /** The build date. */\n date: string;\n /** A description of the project. */\n description: string;\n /** An URL to the homepage of the project. */\n homepage: string;\n /** The name of the project. */\n name: string;\n /** The version of the build. */\n version: string;\n}\n\nconst defaultDate = new Date().toISOString();\n\n/**\n * Generate a dynamic header banner.\n * @param options - Optional information to be included. Otherwise no custom\n * text will be appended, the date will be the time when this module was\n * imported (most likely the start of the build process) and the rest will be\n * read from package.json.\n * @throws If the string already contains a comment.\n * @returns Ready to use banner text.\n */\nexport async function generateHeader(\n options?: Partial<HeaderOptions>,\n): Promise<string> {\n const packageJSON = JSON.parse(\n await readFile(\n (await import(\"find-up\")).findUpSync(\"package.json\")!,\n \"utf8\",\n ),\n );\n\n const defaultDescription = packageJSON.description;\n const defaultHomepage = packageJSON.homepage;\n const defaultName = packageJSON.name;\n const defaultVersion = packageJSON.version;\n\n const {\n customText = \"\",\n date = defaultDate,\n description = defaultDescription,\n homepage = defaultHomepage,\n name = defaultName,\n version = defaultVersion,\n } = options || {};\n\n return buildHeader({\n customText,\n date,\n description,\n homepage,\n name,\n version,\n });\n}\n","import fs from \"node:fs/promises\";\nimport { fileURLToPath, URL } from \"node:url\";\nimport { type RollupOptions, type Plugin } from \"rollup\";\nimport analyzerPlugin from \"rollup-plugin-analyzer\";\nimport babelPlugin from \"@rollup/plugin-babel\";\nimport commonjsPlugin from \"@rollup/plugin-commonjs\";\nimport copyPlugin, { Target as CopyTarget } from \"rollup-plugin-copy\";\nimport jsonPlugin from \"@rollup/plugin-json\";\nimport nodeResolvePlugin from \"@rollup/plugin-node-resolve\";\nimport postcssAssetsPlugin from \"postcss-assets\";\nimport postcssPlugin from \"rollup-plugin-postcss\";\nimport stripCodePlugin from \"rollup-plugin-strip-code\";\nimport terserPlugin from \"@rollup/plugin-terser\";\nimport typescriptPlugin from \"@rollup/plugin-typescript\";\nimport { generateHeader } from \"../header\";\nimport { join, resolve, sep } from \"path\";\nimport { string as stringPlugin } from \"rollup-plugin-string\";\nimport {\n config as chaiConfig,\n expect as validateExpect,\n use as chaiUse,\n} from \"chai\";\n\nimport { BABEL_IGNORE_RE } from \"../constants\";\nimport { type HeaderOptions } from \"../header\";\nimport { type OptionalOptions } from \"../util\";\nimport { dirname } from \"node:path\";\n\nconst rawGlobby = import(\"globby\");\n\nchaiConfig.truncateThreshold = Number.MAX_SAFE_INTEGER;\n\nconst VIS_DEBUG = [\"1\", \"true\", \"y\", \"yes\"].includes(\n process.env[\"VIS_DEBUG\"] || \"false\",\n);\nconst VIS_TEST = [\"1\", \"true\", \"y\", \"yes\"].includes(\n process.env[\"VIS_TEST\"] || \"false\",\n);\n\n/**\n * Simple glob with workaround for non-posix paths.\n * @param pattern - Single glob pattern.\n * @returns Globbed paths.\n */\nasync function glob(\n pattern: string,\n): ReturnType<(typeof import(\"globby\"))[\"globby\"]> {\n return (await rawGlobby).globby(\n sep === \"\\\\\" ? pattern.replace(/\\\\/g, \"/\") : pattern,\n );\n}\n\nexport interface GRCOptions {\n /**\n * Where to look for files when inlining assets into CSS.\n */\n assets: string;\n /**\n * Additional files to be copied.\n */\n copyTargets: {\n /**\n * These will be copied relative to the root of each bundle (esnext,\n * standalone…).\n */\n bundle: CopyTarget[];\n /**\n * These will be copied relative to the root of each variant of each bundle\n * (esnext/esm, esnext/umd, standalone/esm…).\n */\n variant: CopyTarget[];\n };\n /**\n * The base dir with entry points for various builds. The extensions\n * determines whether TypeScript processing will be used.\n */\n entryPoints: string;\n /**\n * These are the dependencies that would cause interoperability issues if they\n * were bundled. A notable example here is vis-data.\n */\n externalForPeerBuild: string[];\n /**\n * Passed straight to Rollup.\n */\n globals: Record<string, string>;\n /**\n * Options for {@link generateHeader}.\n */\n header: Partial<HeaderOptions>;\n /**\n * This will be used as a file name with appropriate extensions appended\n * (like .js, .min.js or .css).\n */\n libraryFilename: string;\n /**\n * Simply required package.json.\n */\n packageJSON: Partial<{\n browser: string;\n dependencies: Record<string, string>;\n devDependencies: Record<string, string>;\n exports: Record<string, Record<string, string | undefined> | undefined>;\n files: string[];\n jsnext: string;\n main: string;\n module: string;\n peerDependencies: Record<string, string>;\n types: string;\n }>;\n /**\n * The path to tsconfig.json to be used in this build.\n */\n tsconfig: string;\n}\n\n/**\n * These are the dependencies that follow standalone/peer/ESNext export\n * structure.\n */\nconst dependenciesWithVisExportStructure = [\n \"vis-data\",\n \"vis-graph3d\",\n \"vis-network\",\n \"vis-timeline\",\n \"vis-util\",\n \"vis-uuid\",\n];\n\n/**\n * This ensures that dependencies on Vis projects point to ESNext builds.\n * @param deps - The original dependencies as listed in package.json.\n * @returns An array of dependencies for Rollup.\n */\nfunction processDependencies(\n deps: string[] | Record<string, string>,\n): string[] {\n const depNames = Array.isArray(deps) ? deps : Object.keys(deps);\n\n return depNames.flatMap((key): string[] =>\n dependenciesWithVisExportStructure.includes(key)\n ? [key + \"/esnext\"]\n : [key],\n );\n}\n\n/**\n * This ensures that all Vis projects are imported using ESNext builds.\n * Importing standalone versions will not only cause problems in production but\n * will log warnings during build process and won't work at all.\n * @param globals - The original globals.\n * @returns Globals forcing the use of ESNext builds for Vis projects.\n */\nfunction processGlobals(\n globals: Record<string, string>,\n): Record<string, string> {\n return Object.entries(globals).reduce<Record<string, string>>(\n (acc, [key, value]): Record<string, string> => {\n acc[\n dependenciesWithVisExportStructure.includes(key) ? key + \"/esnext\" : key\n ] = value;\n\n return acc;\n },\n Object.create(null),\n );\n}\n\n/**\n * @param path\n */\nfunction isTS(path: string): boolean {\n return path.endsWith(\".ts\");\n}\n\n/*\n * Make sure that Chai doesn't throw and therefore stop execution on failed\n * validations during debugging.\n */\nconst validate: (\n callback: (expect: Chai.ExpectStatic) => Promise<void> | void,\n) => Promise<void> = VIS_DEBUG\n ? async (\n callback: (expect: Chai.ExpectStatic) => Promise<void> | void,\n ): Promise<void> => {\n try {\n await callback(validateExpect);\n } catch (error) {\n console.error(error);\n }\n }\n : async (\n callback: (expect: Chai.ExpectStatic) => Promise<void> | void,\n ): Promise<void> => {\n await callback(validateExpect);\n };\n\n/**\n * Transform ESNext import paths to match the build version being constructed.\n * @param buildVariant - ESNext or peer build. This is not available for\n * standalone as only peer and ESNext have imports.\n * @param moduleFormat - What kind of module system to use.\n * @returns Path overrides for Rollup.\n */\nfunction getPaths(\n buildVariant: \"esnext\" | \"peer\",\n moduleFormat: \"esm\" | \"umd\",\n): Record<string, string> {\n /**\n * @param lib\n */\n function getPath(\n lib:\n | \"charts\"\n | \"data\"\n | \"graph3d\"\n | \"network\"\n | \"timeline\"\n | \"util\"\n | \"uuid\",\n ): Record<string, string> {\n return {\n [`vis-${lib}/esnext`]: `vis-${lib}/${buildVariant}/${moduleFormat}/vis-${lib}.js`,\n };\n }\n\n return {\n ...getPath(\"charts\"),\n ...getPath(\"data\"),\n ...getPath(\"graph3d\"),\n ...getPath(\"network\"),\n ...getPath(\"timeline\"),\n ...getPath(\"util\"),\n ...getPath(\"uuid\"),\n };\n}\n\n/**\n * Change target's dest so that it's relative to given dir(s).\n * @param dirs - The directories there targets should be relative to.\n * @returns A function that can be directly supplied to Array.map().\n */\nfunction scopeCopyTarget(\n ...dirs: readonly string[]\n): (target: CopyTarget) => CopyTarget {\n return function (target): CopyTarget {\n const dest = (\n Array.isArray(target.dest) ? target.dest : [target.dest]\n ) as readonly string[];\n\n const bundleDest = dest.flatMap((path): string[] =>\n dirs.map((dir): string => join(dir, path)),\n );\n\n return {\n ...target,\n dest: bundleDest,\n };\n };\n}\n\nconst injectCSS = true;\nconst minimize = true;\nconst transpile = true;\nconst generateRollupPluginArray = (\n libraryFilename: string,\n assets: string,\n copyTargetsBundle: readonly CopyTarget[],\n copyTargetsVariant: readonly CopyTarget[],\n tsconfig: string,\n mode: \"production\" | \"development\" | \"test\",\n bundleType: \"esnext\" | \"standalone\" | \"peer\",\n {\n injectCSS = false,\n minimize = false,\n strip = mode === \"production\",\n transpile = false,\n typescript = false,\n } = {},\n): Plugin[] => {\n const fullLibraryFilename = `${libraryFilename}${minimize ? \".min\" : \"\"}`;\n\n const bundleDir = bundleType;\n const bundleVariantDirs = [\"esm\", \"umd\"].map((variant): string =>\n join(bundleDir, variant),\n );\n\n return [\n ...(strip\n ? [\n // This should be first because it removes code from source files.\n // It's much easier to follow if the removal happens before any\n // transformations.\n stripCodePlugin({\n start_comment: \"develblock:start\",\n end_comment: \"develblock:end\",\n }),\n ]\n : [\n // Remove the comments marking devel blocks as they can cause problems\n // later on because transpilation shuffles things around which may\n // lead to all kinds of issues including syntax errors.\n stripCodePlugin({\n pattern: /[\\t ]*\\/\\* ?develblock:(start|end) ?\\*\\//g,\n }),\n ]),\n analyzerPlugin(VIS_DEBUG ? undefined : { limit: 10, summaryOnly: true }),\n copyPlugin({\n verbose: VIS_DEBUG,\n targets: [\n // JavaScript\n {\n src: resolve(\n dirname(fileURLToPath(new URL(import.meta.url))),\n \"assets/bundle-root.js\",\n ),\n dest: bundleDir,\n rename: \"index.js\",\n },\n {\n src: resolve(\n dirname(fileURLToPath(new URL(import.meta.url))),\n \"assets/bundle-index.js\",\n ),\n dest: bundleVariantDirs,\n rename: \"index.js\",\n transform: (content: Buffer): string =>\n content.toString().replace(\"{{filename}}\", libraryFilename),\n },\n\n // TypeScript\n {\n src: resolve(\n dirname(fileURLToPath(new URL(import.meta.url))),\n \"assets/bundle-root.d.ts\",\n ),\n dest: bundleDir,\n rename: \"index.d.ts\",\n },\n {\n src: resolve(\n dirname(fileURLToPath(new URL(import.meta.url))),\n \"assets/bundle-index.d.ts\",\n ),\n dest: bundleVariantDirs,\n rename: \"index.d.ts\",\n transform: (content: Buffer): string =>\n content.toString().replace(\"{{filename}}\", libraryFilename),\n },\n {\n src: resolve(\n dirname(fileURLToPath(new URL(import.meta.url))),\n \"assets/bundle-file.d.ts\",\n ),\n dest: bundleVariantDirs,\n rename: `${fullLibraryFilename}.d.ts`,\n transform: (content: Buffer): string =>\n content.toString().replace(\"{{bundle-type}}\", bundleType),\n },\n\n // Custom\n ...copyTargetsBundle.map(scopeCopyTarget(bundleDir)),\n ...copyTargetsVariant.map(scopeCopyTarget(...bundleVariantDirs)),\n ],\n }),\n nodeResolvePlugin({\n browser: true,\n extensions: [\".js\", \".json\", \".ts\"],\n mainFields: [\"jsnext\", \"module\", \"main\"],\n preferBuiltins: false,\n }),\n ...(typescript\n ? [\n typescriptPlugin({\n tsconfig,\n }),\n ]\n : []),\n commonjsPlugin(),\n postcssPlugin({\n extract: !injectCSS && `styles/${fullLibraryFilename}.css`,\n inject: injectCSS,\n minimize,\n // Prevent the sourcemaps from being injected into JS files.\n sourceMap: !injectCSS,\n plugins: [\n postcssAssetsPlugin({\n loadPaths: [assets],\n }),\n ],\n }),\n jsonPlugin(),\n stringPlugin({\n include: \"**/*.txt\",\n }),\n ...(transpile\n ? [\n babelPlugin({\n babelHelpers: \"runtime\",\n babelrc: false,\n configFile: false,\n exclude: BABEL_IGNORE_RE,\n extensions: [\".js\", \".ts\", \".mjs\", \".cjs\"],\n presets: [[\"vis-dev-utils/babel-preset\", { ts: true }]],\n }),\n ]\n : []),\n ...(minimize\n ? [\n terserPlugin({\n format: {\n comments: \"some\",\n },\n }),\n ]\n : []),\n ];\n};\n\n/**\n * Prepare ready to use Rollup configuration file.\n * @remarks\n * IMPORTANT: Use `babel.config.js` in the root of the project, `.babelrc` files\n * are ignored.\n *\n * You can surround any piece of code with `stripInProduction: { debug code }`\n * to strip it from the generated bundles unless VIS_DEBUG=true environmental\n * variable is set. This is useful for example to render bounding boxes during\n * debugging but automatically switch it off without any performance or bundle\n * size penalty in production. Debugger statements are also automatically\n * stripped.\n *\n * Plugins:\n * - `\\@rollup/plugin-babel` (skipped in ESNext)\n * - `\\@rollup/plugin-commonjs`\n * - `\\@rollup/plugin-json`\n * - `\\@rollup/plugin-node-resolve`\n * - `\\@rollup/plugin-strip` (skipped with VIS_DEBUG=true env var)\n * - `\\@rollup/plugin-terser` (only in minified)\n * - `postcss-assets`\n * - `rollup-plugin-copy`\n * - `rollup-plugin-postcss`\n * - `rollup-plugin-typescript2` (skipped if the entry is .js)\n * @param options - See {@link GRCOptions}.\n * @param mode - Whether the code should be processed for production,\n * development or testing.\n * @returns Ready to use configuration object that can be just exported from\n * `rollup.config.js` or mutated in any way if necessary.\n */\nexport async function generateRollupConfiguration(\n options: OptionalOptions<GRCOptions>,\n mode: \"production\" | \"development\" | \"test\" = VIS_TEST\n ? \"test\"\n : VIS_DEBUG\n ? \"development\"\n : \"production\",\n): Promise<RollupOptions[]> {\n const {\n assets = \".\",\n copyTargets: {\n bundle: copyTargetsBundle = [],\n variant: copyTargetsVariant = [],\n } = {} as GRCOptions[\"copyTargets\"],\n externalForPeerBuild = [],\n globals = {},\n header = { name: \"Unknown Library\" },\n libraryFilename = \"unknown-library\",\n packageJSON: {\n dependencies = {},\n devDependencies = {},\n peerDependencies = {},\n ...packageJSONRest\n } = {} as GRCOptions[\"packageJSON\"],\n entryPoints: entryPoint = \"./src\",\n tsconfig = \"tsconfig.json\",\n }: GRCOptions = (options || {}) as GRCOptions;\n\n validate((expect): void => {\n // Note: Every array is a superset of empty array.\n if (Object.keys(peerDependencies).length > 0) {\n expect(\n Object.keys(dependencies),\n \"The dependencies and peer dependencies have to be disjoint sets\",\n )\n .to.be.an(\"array\")\n .that.does.not.include.any.members(Object.keys(peerDependencies));\n }\n });\n validate((expect): void => {\n expect(\n Object.keys(devDependencies),\n \"For convenience all peer dependencies also have to be dev dependencies\",\n )\n .to.be.an(\"array\")\n .that.includes.all.members(Object.keys(peerDependencies));\n });\n validate((expect): void => {\n expect(\n Object.keys(peerDependencies),\n \"Peer build externals have to be a subset of peer dependencies\",\n )\n .to.be.an(\"array\")\n .that.includes.all.members(externalForPeerBuild);\n });\n validate((expect): void => {\n expect(\n [...Object.keys(dependencies), ...Object.keys(peerDependencies)].sort(),\n \"Globals have to be provided for all runtime and peer dependencies but nothing else\",\n )\n .to.be.an(\"array\")\n .that.deep.equals(Object.keys(globals).sort());\n });\n\n validate(async (expect): Promise<void> => {\n expect(resolve(assets), \"Assets have to be a directory\").to.be.a(\"string\");\n const stats = await fs.stat(resolve(assets));\n expect(stats.isDirectory(), \"Assets have to be a directory\").to.be.true;\n });\n validate(async (expect): Promise<void> => {\n expect(entryPoint, \"The entry point has to be directory\").to.be.a(\"string\");\n const stats = await fs.stat(entryPoint);\n expect(stats.isDirectory(), \"The entry point has to be directory\").to.be\n .true;\n });\n const [esnextEntry, peerEntry, standaloneEntry] = await Promise.all(\n [\"ESNext\", \"peer\", \"standalone\"].map(async (name): Promise<string> => {\n const filenameGlob = `entry-${name.toLowerCase()}.{js,ts}`;\n const files = await glob(resolve(entryPoint, filenameGlob));\n\n validate(async (expect): Promise<void> => {\n expect(\n files,\n `There has to be a single entry file (${filenameGlob}) for the ${name} build`,\n )\n .to.have.lengthOf(1)\n .and.to.have.ownProperty(\"0\");\n const stats = await fs.stat(resolve(files[0]));\n expect(\n stats.isFile(),\n `The entry file (${filenameGlob}) for the ${name} build has to be a file`,\n ).to.be.true;\n });\n\n return files[0];\n }),\n );\n validate(async (expect): Promise<void> => {\n expect(\n resolve(\"./declarations\"),\n \"There has to be a directory with TypeScript declarations\",\n ).to.be.a(\"string\");\n const stats = await fs.stat(resolve(\"./declarations\"));\n expect(\n stats.isDirectory(),\n \"There has to be a directory with TypeScript declarations\",\n ).to.be.true;\n });\n\n validate((expect): void => {\n expect(\n packageJSONRest,\n \"The directories with built files have to be included in the package\",\n )\n .to.have.ownProperty(\"files\")\n .that.is.an(\"array\")\n .and.includes.all.members([\n \"declarations\",\n \"esnext\",\n \"peer\",\n \"standalone\",\n ]);\n });\n\n const expectedExports = Object.fromEntries([\n [\n \".\",\n {\n import: `./peer/esm/${libraryFilename}.mjs`,\n require: `./peer/umd/${libraryFilename}.cjs`,\n types: \"./declarations/index.d.ts\",\n },\n ],\n [\"./package.json\", \"./package.json\"],\n [\n \"./declarations/index.d.ts\",\n {\n types: \"./declarations/index.d.ts\",\n },\n ],\n ...[\"standalone\", \"peer\", \"esnext\"].flatMap(\n (variant): [string, Record<string, string>][] => [\n [\n `./${variant}`,\n {\n import: `./${variant}/esm/${libraryFilename}.mjs`,\n require: `./${variant}/umd/${libraryFilename}.cjs`,\n types: \"./declarations/index.d.ts\",\n },\n ],\n [\n `./${variant}/esm/${libraryFilename}.js`,\n {\n import: `./${variant}/esm/${libraryFilename}.mjs`,\n types: \"./declarations/index.d.ts\",\n },\n ],\n [\n `./${variant}/esm/${libraryFilename}.mjs`,\n {\n import: `./${variant}/esm/${libraryFilename}.mjs`,\n types: \"./declarations/index.d.ts\",\n },\n ],\n [\n `./${variant}/esm/${libraryFilename}.min.js`,\n {\n import: `./${variant}/esm/${libraryFilename}.min.mjs`,\n types: \"./declarations/index.d.ts\",\n },\n ],\n [\n `./${variant}/esm/${libraryFilename}.min.mjs`,\n {\n import: `./${variant}/esm/${libraryFilename}.min.mjs`,\n types: \"./declarations/index.d.ts\",\n },\n ],\n [\n `./${variant}/umd/${libraryFilename}.js`,\n {\n require: `./${variant}/umd/${libraryFilename}.cjs`,\n types: \"./declarations/index.d.ts\",\n },\n ],\n [\n `./${variant}/umd/${libraryFilename}.cjs`,\n {\n require: `./${variant}/umd/${libraryFilename}.cjs`,\n types: \"./declarations/index.d.ts\",\n },\n ],\n [\n `./${variant}/umd/${libraryFilename}.min.js`,\n {\n require: `./${variant}/umd/${libraryFilename}.min.cjs`,\n types: \"./declarations/index.d.ts\",\n },\n ],\n [\n `./${variant}/umd/${libraryFilename}.min.cjs`,\n {\n require: `./${variant}/umd/${libraryFilename}.min.cjs`,\n types: \"./declarations/index.d.ts\",\n },\n ],\n ],\n ),\n ]);\n\n validate((expect): void => {\n expect(\n packageJSONRest,\n \"Package JSON's type property has to point to the declarations\",\n )\n .to.have.ownProperty(\"types\")\n .that.is.a(\"string\")\n .and.equals(\"./declarations/index.d.ts\")\n .and.is.oneOf(Object.keys(expectedExports));\n });\n validate((expect): void => {\n expect(\n packageJSONRest,\n \"Package JSON's browser property has to point to the minifed UMD build\",\n )\n .to.have.ownProperty(\"browser\")\n .that.is.a(\"string\")\n .and.equals(`./peer/umd/${libraryFilename}.min.cjs`)\n .and.is.oneOf(Object.keys(expectedExports));\n });\n validate((expect): void => {\n expect(\n packageJSONRest,\n \"Package JSON's main property has to point to the UMD build\",\n )\n .to.have.ownProperty(\"main\")\n .that.is.a(\"string\")\n .and.equals(`./peer/umd/${libraryFilename}.cjs`)\n .and.is.oneOf(Object.keys(expectedExports));\n });\n validate((expect): void => {\n expect(\n packageJSONRest,\n \"Package JSON's modul property has to point to the ESM build\",\n )\n .to.have.ownProperty(\"module\")\n .that.is.a(\"string\")\n .and.equals(`./peer/esm/${libraryFilename}.mjs`)\n .and.is.oneOf(Object.keys(expectedExports));\n });\n validate((expect): void => {\n expect(\n packageJSONRest,\n \"Package JSON's jsnext has to point to the ESNext build\",\n )\n .to.have.ownProperty(\"jsnext\")\n .that.is.a(\"string\")\n .and.equals(`./esnext/esm/${libraryFilename}.mjs`)\n .and.is.oneOf(Object.keys(expectedExports));\n });\n\n validate((expect): void => {\n expect(\n Object.fromEntries(\n Object.entries(packageJSONRest.exports ?? {}).filter(([key]): boolean =>\n Object.keys(expectedExports).includes(key),\n ),\n ),\n \"Package JSON's exports have to contain common entries\",\n ).to.deep.equal(expectedExports);\n });\n\n validate(async (expect): Promise<void> => {\n const [{ status }] = await Promise.allSettled([\n fs.access(resolve(\"./.babelrc\")),\n ]);\n expect(\n status,\n \"Babelrc is ignored. Use babel.config.js config file instead.\",\n ).to.equal(\"rejected\");\n });\n validate(async (expect): Promise<void> => {\n const [{ status }] = await Promise.allSettled([\n fs.access(resolve(\"./babel.config.js\")),\n ]);\n expect(status, \"There has to be a babel.config.js config file.\").to.equal(\n \"fulfilled\",\n );\n });\n\n const banner = await generateHeader(header);\n const external = {\n // No dependencies are bundled.\n esnext: processDependencies([\n ...Object.keys(dependencies),\n ...Object.keys(peerDependencies),\n\n // This will show a warning if any of them is used. The idea behind\n // it is that if someone accidentaly imports a dev dependency they\n // won't accidentaly add it to globals and Rollup will warn them\n // about their error.\n ...Object.keys(devDependencies),\n ]),\n // Only dependencies that cause compatibility issues are not bundled.\n peer: processDependencies(externalForPeerBuild),\n // No runtime dependencies, everything's bundled.\n standalone: [],\n };\n\n const commonOutput = {\n banner,\n dir: \".\",\n globals: processGlobals(globals),\n sourcemap: VIS_TEST ? \"inline\" : true,\n } as const;\n const commonOutputESM = {\n ...commonOutput,\n format: \"esm\",\n } as const;\n const commonOutputUMD = {\n ...commonOutput,\n exports: \"named\",\n extend: true,\n format: \"umd\",\n name: \"vis\",\n strict: false, // Regenerator runtime causes issues with CSP in strict mode.\n } as const;\n\n // Note: Binding more than 4 at a time is not typesafe in TS.\n const getPlugins = generateRollupPluginArray\n .bind(null, libraryFilename)\n .bind(null, assets)\n .bind(null, copyTargetsBundle)\n .bind(null, copyTargetsVariant)\n .bind(null, tsconfig)\n .bind(null, mode);\n\n return [\n {\n external: external.standalone,\n input: standaloneEntry,\n output: [\n {\n ...commonOutputESM,\n entryFileNames: `standalone/esm/${libraryFilename}.js`,\n },\n {\n ...commonOutputESM,\n entryFileNames: `standalone/esm/${libraryFilename}.mjs`,\n },\n {\n ...commonOutputUMD,\n entryFileNames: `standalone/umd/${libraryFilename}.js`,\n },\n {\n ...commonOutputUMD,\n entryFileNames: `standalone/umd/${libraryFilename}.cjs`,\n },\n ],\n plugins: getPlugins(\"standalone\", {\n injectCSS,\n transpile,\n typescript: isTS(standaloneEntry),\n }),\n },\n {\n external: external.standalone,\n input: standaloneEntry,\n output: [\n {\n ...commonOutputESM,\n entryFileNames: `standalone/esm/${libraryFilename}.min.js`,\n },\n {\n ...commonOutputESM,\n entryFileNames: `standalone/esm/${libraryFilename}.min.mjs`,\n },\n {\n ...commonOutputUMD,\n entryFileNames: `standalone/umd/${libraryFilename}.min.js`,\n },\n {\n ...commonOutputUMD,\n entryFileNames: `standalone/umd/${libraryFilename}.min.cjs`,\n },\n ],\n plugins: getPlugins(\"standalone\", {\n injectCSS,\n minimize,\n transpile,\n typescript: isTS(standaloneEntry),\n }),\n },\n\n {\n external: external.peer,\n input: peerEntry,\n output: [\n {\n ...commonOutputESM,\n entryFileNames: `peer/esm/${libraryFilename}.js`,\n paths: getPaths(\"peer\", \"esm\"),\n },\n {\n ...commonOutputESM,\n entryFileNames: `peer/esm/${libraryFilename}.mjs`,\n paths: getPaths(\"peer\", \"esm\"),\n },\n {\n ...commonOutputUMD,\n entryFileNames: `peer/umd/${libraryFilename}.js`,\n paths: getPaths(\"peer\", \"umd\"),\n },\n {\n ...commonOutputUMD,\n entryFileNames: `peer/umd/${libraryFilename}.cjs`,\n paths: getPaths(\"peer\", \"umd\"),\n },\n ],\n plugins: getPlugins(\"peer\", {\n transpile,\n typescript: isTS(peerEntry),\n }),\n },\n {\n external: external.peer,\n input: peerEntry,\n output: [\n {\n ...commonOutputESM,\n entryFileNames: `peer/esm/${libraryFilename}.min.js`,\n paths: getPaths(\"peer\", \"esm\"),\n },\n {\n ...commonOutputESM,\n entryFileNames: `peer/esm/${libraryFilename}.min.mjs`,\n paths: getPaths(\"peer\", \"esm\"),\n },\n {\n ...commonOutputUMD,\n entryFileNames: `peer/umd/${libraryFilename}.min.js`,\n paths: getPaths(\"peer\", \"umd\"),\n },\n {\n ...commonOutputUMD,\n entryFileNames: `peer/umd/${libraryFilename}.min.cjs`,\n paths: getPaths(\"peer\", \"umd\"),\n },\n ],\n plugins: getPlugins(\"peer\", {\n minimize,\n transpile,\n typescript: isTS(peerEntry),\n }),\n },\n\n {\n external: external.esnext,\n input: esnextEntry,\n output: [\n {\n ...commonOutputESM,\n entryFileNames: `esnext/esm/${libraryFilename}.js`,\n paths: getPaths(\"esnext\", \"esm\"),\n },\n {\n ...commonOutputESM,\n entryFileNames: `esnext/esm/${libraryFilename}.mjs`,\n paths: getPaths(\"esnext\", \"esm\"),\n },\n {\n ...commonOutputESM,\n entryFileNames: `esnext/umd/${libraryFilename}.js`,\n paths: getPaths(\"esnext\", \"umd\"),\n },\n {\n ...commonOutputESM,\n entryFileNames: `esnext/umd/${libraryFilename}.cjs`,\n paths: getPaths(\"esnext\", \"umd\"),\n },\n ],\n plugins: getPlugins(\"esnext\", {\n typescript: isTS(esnextEntry),\n }),\n },\n {\n external: external.esnext,\n input: esnextEntry,\n output: [\n {\n ...commonOutputESM,\n entryFileNames: `esnext/esm/${libraryFilename}.min.js`,\n paths: getPaths(\"esnext\", \"esm\"),\n },\n {\n ...commonOutputESM,\n entryFileNames: `esnext/esm/${libraryFilename}.min.mjs`,\n paths: getPaths(\"esnext\", \"esm\"),\n },\n {\n ...commonOutputUMD,\n entryFileNames: `esnext/umd/${libraryFilename}.min.js`,\n paths: getPaths(\"esnext\", \"umd\"),\n },\n {\n ...commonOutputUMD,\n entryFileNames: `esnext/umd/${libraryFilename}.min.cjs`,\n paths: getPaths(\"esnext\", \"umd\"),\n },\n ],\n plugins: getPlugins(\"esnext\", {\n minimize,\n typescript: isTS(esnextEntry),\n }),\n },\n ];\n}\n","import { execSync } from \"child_process\";\nimport { readFileSync } from \"fs\";\nimport { fileSync, setGracefulCleanup } from \"tmp-promise\";\n\nsetGracefulCleanup();\n\ninterface PackageInfo {\n id: string;\n name: string;\n version: string;\n size: number;\n unpackedSize: number;\n shasum: string;\n integrity: string;\n filename: string;\n files: FileInfo[];\n entryCount: number;\n bundled: string[];\n}\n\ninterface FileInfo {\n path: string;\n size: number;\n mode: number;\n}\n\nconst PACK_CMD = [\n \"npm\",\n \"pack\",\n // Don't create any package, we just need to see what would be packed.\n \"--dry-run\",\n // Prevents things like Husky from outputting to stdout, we don't need them\n // here anyway.\n \"--ignore-scripts\",\n // JSON is easier to parse and more stable between npm versions.\n \"--json\",\n];\n\n/**\n * @param textOrLines\n * @param message\n */\nfunction logStderr(textOrLines: unknown, message: string): never {\n console.group('\"npm pack\" output');\n console.error(textOrLines);\n console.groupEnd();\n\n throw new Error(message);\n}\n\n/**\n *\n */\nfunction runNpmPack(): PackageInfo[] {\n const tmpFile = fileSync().name;\n\n // There are issues with incomplete output when the stderr is read directly\n // into Node. Saving it into tmp file using shell redirection and reading it\n // from there doesn't exhibit those issues.\n execSync(`${PACK_CMD.join(\" \")} > ${tmpFile}`, {\n encoding: \"utf-8\",\n env: {\n ...process.env,\n LC_ALL: \"C\",\n NODE_ENV: \"production\",\n },\n });\n\n const stdout = readFileSync(tmpFile, \"utf-8\")\n // TODO: Why doesn't --ignore-scripts turn Husky off? It works in CLI.\n .replace(/^([^[]*)\\[\\n/, \"[\");\n\n try {\n return JSON.parse(stdout);\n } catch (error) {\n logStderr({ error, stdout }, 'Failed to parse \"npm pack\" JSON output.');\n }\n}\n\n/**\n * @param lines\n * @param packageInfo\n */\nfunction extractFiles(\n packageInfo: PackageInfo,\n): Record<string, Record<string, unknown>> {\n const files = packageInfo.files.map(\n ({ path, size }): [string, Record<string, unknown>] => [\n path,\n { empty: size === 0 },\n ],\n );\n\n if (files.length === 0) {\n logStderr(packageInfo, 'No files found in \"npm pack\" output.');\n }\n\n return Object.fromEntries(files);\n}\n\n/**\n * @param lines\n * @param packageInfo\n */\nfunction extractName(packageInfo: PackageInfo): string {\n const name = packageInfo.name;\n\n if (name == null) {\n logStderr(\n packageInfo,\n 'Can\\'t find the name of the package in \"npm pack\" output.',\n );\n }\n\n return name.replace(/^npm notice name: */, \"\");\n}\n\n/**\n *\n */\nexport function inspectNpmPack(): {\n name: string;\n files: Record<string, Record<string, unknown>>;\n} {\n const [packageInfo, ...unexpectedExtras] = runNpmPack();\n\n if (packageInfo == null) {\n logStderr(\n [packageInfo, ...unexpectedExtras],\n 'There was no output from \"npm pack\".',\n );\n }\n\n if (unexpectedExtras.length !== 0) {\n logStderr(\n [packageInfo, ...unexpectedExtras],\n 'Can\\'t process the output of \"npm pack\" if there are multiple packages.',\n );\n }\n\n const files = extractFiles(packageInfo);\n const name = extractName(packageInfo);\n\n return {\n name,\n files,\n };\n}\n"],"names":["chaiConfig","validateExpect","injectCSS","minimize","transpile","stringPlugin"],"mappings":"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"}
@@ -157,7 +157,6 @@ module.exports = {
157
157
  files: ["**/*.js", "**/*.ts"],
158
158
  extends: ["plugin:jsdoc/recommended"],
159
159
  rules: {
160
- "jsdoc/check-examples": "warn",
161
160
  "jsdoc/check-indentation": "warn",
162
161
  "jsdoc/check-syntax": "warn",
163
162
  "jsdoc/check-tag-names": ["error", { definedTags: ["remarks"] }],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vis-dev-utils",
3
- "version": "5.0.2",
3
+ "version": "5.0.4",
4
4
  "description": "Development utilities for the Vis family projects.",
5
5
  "homepage": "http://visjs.org/",
6
6
  "license": "(Apache-2.0 OR MIT)",