mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-10-19 21:46:49 +00:00
798553b13b
Components reach up into pages/ for models and helpers (28 imports in 25 files: the journey detail helpers, the collections, atlas and dashboard models) and sideways into mobile/ for phone hooks and sheets (36 in 30 files), and a few stores and a repo import from components/. Nothing stopped the next one, and every such import ties two trees together that should move and split independently. lint:layers reads each source file's imports from its syntax tree (multi-line imports, re-exports, import() and type imports included, nothing inside comments or strings) and checks them against a small rule table: a component imports neither pages/ nor mobile/, a shared hook no view, nothing under the views (store, repo, sync, api, db, utils and the other helpers) any view, a repo no store, and the Dexie schema none of the layers above it. mobile/ and pages/ stay free, since the phone screens reuse the page hooks by design. The 80 imports that break a rule today are counted per file in scripts/layers-baseline.json, and a file may hold no more than its entry. Type imports count: a type the lower layer needs belongs below it. Tests are not checked.
26 lines
1.3 KiB
JavaScript
26 lines
1.3 KiB
JavaScript
#!/usr/bin/env node
|
|
/*
|
|
* lint:layers: imports follow the layering, downwards only.
|
|
*
|
|
* Components reached up into pages/ for models and helpers, and sideways into
|
|
* mobile/ for phone hooks and sheets, so nothing could be moved or split
|
|
* without touching three trees. scripts/lib/layers.mjs holds the rules: a
|
|
* component imports neither pages/ nor mobile/, a shared hook no view, and
|
|
* nothing under the views (stores, repos, sync, api, db, helpers) a view at
|
|
* all. The imports that already broke a rule are counted per file in
|
|
* scripts/layers-baseline.json, and a file may hold no more of them than its
|
|
* entry (a file without an entry holds none). Type-only imports count: a type
|
|
* the lower layer needs belongs below it.
|
|
*
|
|
* npm run lint:layers check against the baseline (CI)
|
|
* npm run lint:layers -- --list print every import against the layering
|
|
* npm run lint:layers -- --update lower the baseline to what the files hold now;
|
|
* it never raises an entry
|
|
*/
|
|
import { fileURLToPath } from 'node:url'
|
|
import { check } from './lib/layers.mjs'
|
|
import { runCli } from './lib/ratchet.mjs'
|
|
|
|
const root = fileURLToPath(new URL('..', import.meta.url))
|
|
await runCli('lint:layers', (args) => check({ root, update: args.includes('--update'), list: args.includes('--list') }))
|