UNPKG

graph-explorer

Version:

Graph Explorer can be used to explore and RDF graphs in SPARQL endpoints or on the web.

69 lines (59 loc) 2.44 kB
import { describe, expect, it } from "vitest"; import { existsSync, readFileSync, statSync } from "node:fs"; import { join } from "node:path"; const repoRoot = process.cwd(); const dist = join(repoRoot, "dist"); const umd = join(dist, "graph-explorer.js"); const esm = join(dist, "graph-explorer.mjs"); const standalone = join(dist, "graph-explorer-full.min.js"); const typings = join(dist, "graph-explorer.d.ts"); const artifacts = [umd, esm, standalone, typings]; const isBuilt = artifacts.every((file) => existsSync(file)); /** * Guards the Vite library build configuration: which formats are emitted, what * stays external, and that the package entry points actually resolve. Runs once * the library has been built (CI builds before running the tests). */ describe.skipIf(!isBuilt)("published library artifacts", () => { it("emits the UMD, ESM and standalone builds plus bundled typings", () => { for (const file of artifacts) { expect(statSync(file).size, `${file} looks empty`).toBeGreaterThan(1000); } }); it("points every package entry point at a file that exists", () => { const pkg = JSON.parse( readFileSync(join(repoRoot, "package.json"), "utf8") ) as { main: string; module: string; typings: string }; for (const entry of [pkg.main, pkg.module, pkg.typings]) { expect(existsSync(join(repoRoot, entry)), `missing ${entry}`).toBe(true); } }); it("keeps peer dependencies external in the default build", () => { // react must not be inlined, otherwise consumers get a second copy expect(readFileSync(umd, "utf8")).toMatch(/require\(["']react["']\)/); expect(readFileSync(esm, "utf8")).toMatch(/from\s*["']react["']/); }); it("inlines dependencies in the standalone build", () => { expect(readFileSync(standalone, "utf8")).not.toMatch( /require\(["']react["']\)/ ); expect(statSync(standalone).size).toBeGreaterThan(statSync(umd).size); }); it("declares the documented public API in the bundled typings", () => { const declarations = readFileSync(typings, "utf8"); for (const name of [ "Workspace", "renderTo", "DemoDataProvider", "SparqlDataProvider", "EmbeddedLayer", "AuthoredEntity", "WorkspaceEventKey", "DiagramModel", ]) { expect(declarations, `${name} is missing from the typings`).toMatch( new RegExp(`\\b${name}\\b`) ); } }); });