Biome reported 229 diagnostics after aligning the config with
bsi-ni.brain.riken.jp. Fix them all so `biome check` passes clean
without per-rule overrides.
- replace `any` in LokiJS queries with an `ItemFilter` interface and
a single `asLokiQuery()` cast, matching bsi-ni
- type the XOOPS redirect maps as
`Record<string, { key: string; isNumber: boolean }>`
- use `ItemSubTypes<string>` instead of `any` for sub item types
- join author lists with `.join(', ')` instead of index-keyed nodes
- give list elements stable keys derived from their own data
- return `React.ReactNode` from `ListBase.renderBody()`
- drop the temporary `noArrayIndexKey` override from biome.json
react-router removed withRouter in v6, and the shim that replaced it
kept nineteen components tied to injected router props. They now read
the state directly, matching how bsi-ni.brain.riken.jp is written.
- convert the remaining class components to function components
- call useLocation, useNavigate and useParams in place of the props
- drop src/common/lib/withRouter.tsx
The CRA toolchain was several major versions behind and no longer
maintained, so the whole build, lint and runtime stack is replaced.
- replace react-scripts with Vite 8 and TypeScript 7
- upgrade to React 19 and react-router 8
- swap unmaintained libraries: react-html-parser, axios, react-ga,
react-image-lightbox, react-helmet, moment, react-spinner-material
- replace ESLint with Biome for linting and formatting
- switch the package manager from yarn to npm
- serve static-contents/ with sirv in dev and copy it into the bundle
- keep a withRouter shim so the class components can stay as they are
for now