From 708f79a66206c06c8f01e693cda1541a82941148 Mon Sep 17 00:00:00 2001 From: Mustafa J Date: Sun, 28 Sep 2025 12:44:39 +0300 Subject: [PATCH 1/2] esm only; update deps --- builder.js | 41 ++++++++++++++--------------------------- package.json | 21 ++++++++++----------- src/index.js | 5 +++-- test/index.js | 6 +++--- 4 files changed, 30 insertions(+), 43 deletions(-) diff --git a/builder.js b/builder.js index 55bc954..1efcab9 100644 --- a/builder.js +++ b/builder.js @@ -1,31 +1,18 @@ -const fs = require('fs'); -const mkdir = require('mk-dirs'); -const pretty = require('pretty-bytes'); -const { minify } = require('terser'); -const sizer = require('gzip-size'); -const pkg = require('./package'); -const ESM = fs.readFileSync('src/index.js', 'utf8'); -const regexparam = require('regexparam').toString(); +import { readFileSync, writeFileSync } from 'node:fs'; +import { mkdir } from 'mk-dirs'; +import prettyBytes from 'pretty-bytes'; +import { gzipSizeSync } from 'gzip-size'; +import { minify } from 'terser'; +import pkg from './package.json' with { type: 'json' }; -mkdir('dist').then(() => { - // Copy as is for ESM - fs.writeFileSync(pkg.module, ESM); +const ESM = readFileSync('src/index.js', 'utf8'); - // Mutate (im|ex)ports for CJS - const CJS = regexparam.replace('function ', 'function convert ').concat( - ESM.replace(`import convert from 'regexparam';`, '') - .replace(/export default/, 'module.exports =') - ); +await mkdir('dist'); - fs.writeFileSync(pkg.main, CJS); +// Write ESM bundle as-is +writeFileSync(pkg.module, ESM); - // Minify & print gzip-size - const { code } = minify(CJS, { toplevel:true, compress:{ passes:10 } }); - console.log(`> gzip size: ${pretty(sizer.sync(code))}`); - - // Write UMD bundle - const name = pkg['umd:name'] || pkg.name; - let UMD = `!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.${name}=t()}(this,function(){`; - UMD += code.replace(/module.exports=/, 'return ') + '});'; - fs.writeFileSync(pkg.unpkg, UMD); -}); +// Minify ESM source to report gzip size only +const minOut = await minify(ESM, { toplevel: true, compress: { passes: 10 } }); +if (minOut.error) throw minOut.error; +console.log(`> gzip size: ${prettyBytes(gzipSizeSync(minOut.code))}`); diff --git a/package.json b/package.json index 882ffc4..4c3bbfe 100644 --- a/package.json +++ b/package.json @@ -3,9 +3,9 @@ "version": "1.2.0", "repository": "lukeed/navaid", "description": "A navigation aid (aka, router) for the browser in 865 bytes~!", - "unpkg": "dist/navaid.min.js", "module": "dist/navaid.mjs", - "main": "dist/navaid.js", + "type": "module", + "exports": "./dist/navaid.mjs", "types": "index.d.ts", "license": "MIT", "author": { @@ -14,12 +14,12 @@ "url": "https://lukeed.com" }, "engines": { - "node": ">= 6" + "node": ">= 20" }, "scripts": { "build": "node builder", "pretest": "npm run build", - "test": "uvu -r esm test" + "test": "uvu test" }, "files": [ "*.d.ts", @@ -31,14 +31,13 @@ "router" ], "dependencies": { - "regexparam": "^1.0.2" + "regexparam": "^3.0.0" }, "devDependencies": { - "esm": "3.2.25", - "gzip-size": "5.1.1", - "mk-dirs": "2.1.0", - "pretty-bytes": "5.3.0", - "terser": "4.8.0", - "uvu": "0.3.3" + "gzip-size": "7.0.0", + "mk-dirs": "3.0.0", + "pretty-bytes": "7.1.0", + "terser": "5.44.0", + "uvu": "0.5.6" } } diff --git a/src/index.js b/src/index.js index e9b126a..9c1daa6 100644 --- a/src/index.js +++ b/src/index.js @@ -1,4 +1,4 @@ -import convert from 'regexparam'; +import { parse } from 'regexparam' export default function Navaid(base, on404) { var rgx, curr, routes=[], $={}; @@ -18,7 +18,8 @@ export default function Navaid(base, on404) { } $.on = function (pat, fn) { - (pat = convert(pat)).fn = fn; + pat = parse(pat) + pat.fn = fn routes.push(pat); return $; } diff --git a/test/index.js b/test/index.js index 440e318..c9e0487 100644 --- a/test/index.js +++ b/test/index.js @@ -1,6 +1,6 @@ import { suite } from 'uvu'; import * as assert from 'uvu/assert'; -import navaid from '../src'; +import navaid from '../src/index.js'; global.history = {}; @@ -210,7 +210,7 @@ run('$.run (wildcard)', () => { let ctx = new navaid(); ctx.on('foo/bar/*', o => { let wild = ran ? 'baz/bat/quz' : 'baz'; - assert.equal(o, { wild }, '~> o.wild is expected'); + assert.equal(o, { ['*']: wild }, '~> o["*"] is expected'); plan -= 1; ran = true; }); @@ -228,7 +228,7 @@ run('$.run (query)', () => { navaid() .on('foo/*', o => { plan -= 1; - assert.is(o.wild, 'baz/bat', '~> trims query from "wild" key'); + assert.is(o['*'], 'baz/bat', '~> trims query from "*" key'); }) .on('/bar/:id', o => { plan -= 1; From 9ed781b7b3537d43421cbd0bddfbfea4540a0656 Mon Sep 17 00:00:00 2001 From: Mustafa J Date: Sun, 28 Sep 2025 13:16:39 +0300 Subject: [PATCH 2/2] 2.0.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 4c3bbfe..f76d2b7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "navaid", - "version": "1.2.0", + "version": "2.0.0", "repository": "lukeed/navaid", "description": "A navigation aid (aka, router) for the browser in 865 bytes~!", "module": "dist/navaid.mjs",