build(server): hold SQLite-only SQL spellings to a shrinking baseline

ESLint keeps raw SQL out of the repositories, but nothing looked at the rest
of src/: the entities, the domain services, the src/db lifecycle files or a
migration added from now on. scripts/dialect-lint.mjs (npm run lint:dialect)
reads every string and template literal under src/, skipping comments, and
counts INSERT OR IGNORE/REPLACE, datetime(), strftime, json_extract, GLOB,
last_insert_rowid, AUTOINCREMENT, PRAGMA outside the lifecycle files, ||
concatenation in SQL and .insertId reads. scripts/dialect-baseline.json
holds today's thirteen hits; the counts may only go down, like lint:size.
The dialect layer is not scanned, and neither are the migrations that have
shipped.

The four seeders that still spelled INSERT OR IGNORE (addons, photo and
document providers, the schema_version marker) are Kysely inserts that do
nothing on conflict now, so a re-run still leaves an operator's rows alone.
They leave the SQL-string exemption list in eslint.config.mjs and their pins
in the selector test.
This commit is contained in:
Maurice
2026-10-08 15:21:17 +02:00
parent c524454f47
commit 39bb8f9619
14 changed files with 689 additions and 64 deletions
+38
View File
@@ -0,0 +1,38 @@
{
"src/db/document-provider-seed.ts": {
"insert-or": 2
},
"src/db/entities/IdempotencyKeys.entity.ts": {
"strftime": 1
},
"src/db/entities/PlaceShadowPicks.entity.ts": {
"datetime": 1
},
"src/db/entities/PluginCapabilityAudit.entity.ts": {
"datetime": 1
},
"src/db/entities/PluginEgressHosts.entity.ts": {
"datetime": 1
},
"src/db/entities/PluginEntityMetadata.entity.ts": {
"datetime": 1
},
"src/db/entities/PluginOauthTokens.entity.ts": {
"datetime": 1
},
"src/db/entities/PluginScheduledTasks.entity.ts": {
"datetime": 1
},
"src/db/entities/PluginUserConfig.entity.ts": {
"datetime": 1
},
"src/db/entities/PluginUserErasureQueue.entity.ts": {
"datetime": 1
},
"src/db/repositories/MaintenanceRepository.ts": {
"pragma": 1
},
"src/nest/backup/backup-archive.ts": {
"pragma": 1
}
}