Fix bit(1) import coercion and subpath login redirect; add GitHub export script
Some checks failed
CI / backend (push) Successful in 1m40s
CI / naming (push) Successful in 1s
CI / frontend (push) Successful in 9s
CI / migrations-mysql (push) Failing after 7s

Loader: bool() on pymysql bit(1) bytes is always true - isinstallable
and isshopfloor imported as 1 for every row; route through _truthy_bit.
The employee source DB is now optional (shopdb-only imports).

Frontend: under a subpath mount the 401 interceptor stored the browser
path (mount base included) as the login redirect and the router applied
its base again (/ops/ops). New stripBase() keeps redirects base-free.

tools/export-github.sh automates the publication flow: prune + scrub +
commit into ~/projects/shopdb-flask-pub and emit a transfer bundle.
This commit is contained in:
cproudlock
2026-07-16 13:56:38 -04:00
parent f16d2289ff
commit 3ba09ac9f3
6 changed files with 168 additions and 15 deletions

View File

@@ -11,3 +11,15 @@ export function withBase(path) {
if (/^([a-z]+:)?\/\//i.test(path) || path.startsWith('data:')) return path
return BASE_URL + String(path).replace(/^\//, '')
}
// Inverse of withBase: turn a browser pathname (which includes the mount
// base, e.g. '/ops/computers') into a router path ('/computers'). Router
// navigation already applies the base; feeding it an un-stripped pathname
// double-prefixes ('/ops/ops/...').
export function stripBase(path) {
if (!path) return path
if (BASE_URL !== '/' && path.startsWith(BASE_URL)) {
return '/' + path.slice(BASE_URL.length)
}
return path
}