@virtualstate/navigation
Version:
Native JavaScript [navigation](https://developer.mozilla.org/en-US/docs/Web/API/Navigation_API) implementation
247 lines (217 loc) • 6.95 kB
JavaScript
import "./correct-import-extensions.js";
import { promises as fs } from "fs";
import { rollup } from "rollup";
import { nodeResolve } from "@rollup/plugin-node-resolve";
import ignore from "rollup-plugin-ignore";
import { dirname, resolve } from "path";
const { pathname } = new URL(import.meta.url);
const cwd = resolve(dirname(pathname), "..")
{
const bundle = await rollup({
input: "./esnext/tests/index.js",
plugins: [
ignore([
"playwright",
"fs",
"path",
"cheerio",
"@virtualstate/navigation",
"@virtualstate/navigation-imported",
`${cwd}/esnext/tests/navigation.playwright.js`,
`${cwd}/esnext/tests/navigation.playwright.wpt.js`,
`${cwd}/esnext/tests/dependencies-input.js`,
`${cwd}/esnext/tests/dependencies.js`,
"./navigation.playwright.js",
"./navigation.playwright.wpt.js",
]),
nodeResolve()
],
inlineDynamicImports: true,
treeshake: {
preset: "smallest",
moduleSideEffects: "no-external"
}
});
await bundle.write({
sourcemap: true,
file: "./esnext/tests/rollup.js",
inlineDynamicImports: true,
format: "es",
interop: "esModule",
globals: {
"esnext/tests/navigation.playwright.js": "globalThis"
}
});
}
{
const bundle = await rollup({
input: "./esnext/index.js",
plugins: [
ignore([
`${cwd}/esnext/tests/navigation.playwright.js`,
`${cwd}/esnext/tests/navigation.playwright.wpt.js`,
`${cwd}/esnext/tests/dependencies-input.js`,
`${cwd}/esnext/tests/dependencies.js`,
]),
nodeResolve()
],
inlineDynamicImports: true,
treeshake: {
preset: "smallest",
moduleSideEffects: "no-external"
}
});
await bundle.write({
sourcemap: true,
file: "./esnext/rollup.js",
inlineDynamicImports: true,
format: "esm",
interop: "auto",
globals: {
}
});
}
{
const bundle = await rollup({
input: "./esnext/routes/index.js",
plugins: [
ignore([
`${cwd}/esnext/tests/navigation.playwright.js`,
`${cwd}/esnext/tests/navigation.playwright.wpt.js`,
`${cwd}/esnext/tests/dependencies-input.js`,
`${cwd}/esnext/tests/dependencies.js`,
]),
nodeResolve()
],
inlineDynamicImports: true,
treeshake: {
preset: "smallest",
moduleSideEffects: "no-external"
}
});
await bundle.write({
sourcemap: true,
file: "./esnext/routes-rollup.js",
inlineDynamicImports: true,
format: "esm",
interop: "auto",
globals: {
}
});
}
{
const bundle = await rollup({
input: "./esnext/polyfill.js",
plugins: [
ignore([
"@virtualstate/app-history",
`${cwd}/esnext/tests/navigation.playwright.js`,
`${cwd}/esnext/tests/navigation.playwright.wpt.js`,
`${cwd}/esnext/tests/dependencies-input.js`,
`${cwd}/esnext/tests/dependencies.js`,
"./app-history.playwright.js",
"./app-history.playwright.wpt.js",
]),
nodeResolve()
],
inlineDynamicImports: true,
treeshake: {
preset: "smallest",
moduleSideEffects: "no-external"
}
});
await bundle.write({
sourcemap: true,
file: "./esnext/polyfill-rollup.js",
inlineDynamicImports: true,
format: "cjs",
interop: "esModule",
globals: {
},
exports: "auto"
});
}
if (!process.env.NO_COVERAGE_BADGE_UPDATE) {
const badges = [];
const { name } = await fs.readFile("package.json", "utf-8").then(JSON.parse);
badges.push(
'### Support\n\n',
'',
'',
'',
'',
'',
'\n\n'
)
badges.push(
'<details><summary>Test Coverage</summary>\n\n',
// `})`
)
const wptResults = await fs.readFile("coverage/wpt.results.json", "utf8").then(JSON.parse).catch(() => ({}));
if (wptResults?.pass) {
const message = `${wptResults.pass}/${wptResults.pass + wptResults.fail}`;
const name = "Web Platform Tests";
badges.push(
`}-${encodeURIComponent(message)}-brightgreen)`
)
}
const coverage = await fs.readFile("coverage/coverage-summary.json", "utf8").then(JSON.parse).catch(() => ({}));
const coverageConfig = await fs.readFile(".nycrc", "utf8").then(JSON.parse);
for (const [name, { pct }] of Object.entries(coverage?.total ?? {})) {
const good = coverageConfig[name];
if (!good) continue; // not configured
const color = pct >= good ? "brightgreen" : "yellow";
const message = `${pct}%25`;
badges.push(
``
);
}
badges.push("\n\n</details>");
const tag = "[//]: # (badges)";
const readMe = await fs.readFile("README.md", "utf8");
const badgeStart = readMe.indexOf(tag);
const badgeStartAfter = badgeStart + tag.length;
if (badgeStart === -1) {
throw new Error(`Expected to find "${tag}" in README.md`);
}
const badgeEnd = badgeStartAfter + readMe.slice(badgeStartAfter).indexOf(tag);
const badgeEndAfter = badgeEnd + tag.length;
const readMeBefore = readMe.slice(0, badgeStart);
const readMeAfter = readMe.slice(badgeEndAfter);
const readMeNext = `${readMeBefore}${tag}\n\n${badges.join(" ")}\n\n${tag}${readMeAfter}`;
await fs.writeFile("README.md", readMeNext);
console.log("Wrote coverage badges!");
}
{
{
const bundle = await rollup({
input: "./esnext/rollup.js",
plugins: [
ignore([
`${cwd}/esnext/tests/navigation.playwright.js`,
`${cwd}/esnext/tests/navigation.playwright.wpt.js`,
`${cwd}/esnext/tests/dependencies-input.js`,
`${cwd}/esnext/tests/dependencies.js`,
]),
nodeResolve()
],
inlineDynamicImports: true,
treeshake: {
preset: "smallest",
moduleSideEffects: "no-external"
}
});
await bundle.write({
sourcemap: true,
file: "./esnext/rollup.cjs",
inlineDynamicImports: true,
format: "cjs",
interop: "esModule",
globals: {
}
});
}
await fs.cp("esnext/polyfill-rollup.js", "example/polyfill-rollup.js");
await fs.cp("esnext/routes-rollup.js", "example/routes-rollup.js");
await fs.cp("esnext/rollup.js", "example/rollup.js");
}