Files
OmniRoute/tests/unit/db-driver-bundling-externals.test.ts
Praveen K Palaniswamy 65e81158ab fix(ollama): route models by advertised capability (#11088)
Landed with the design call resolved per the owner's pick — **option 1**: the synced store is now endpoint-agnostic (persistDiscoveredModels and managedModelImport no longer drop non-chat models at write time), and chat selectability moved to read time (auto-pool expansion in autoStrategy applies filterChatSelectableModels; the models-route projection already had its chatOnly filter). Your discovery test now passes end-to-end (3/3): /api/show capabilities persist per connection and image/embedding requests route through the advertising host.

Reconciliation notes: conflicted areas merged onto the current tip (adobe discovery import, requestedModel preflight signature, resolvedProvider fast-path coexists with the synced-route override — explicit resolution wins); carried base-red drains (#10055 memoization, #11071 test variants) dropped as already-landed; the managed-model-import exclusion test was propagated to the new contract (image/video models persist; the read filter still hides them from chat pickers — pinned by a new assertion). Full battery: 205/206 focused (the one red is a confirmed periodic-timer timing flake on the loaded devbox — 20/20 isolated), autoCombo vitest 30/30, combo suites 46/46, gates + typecheck clean.

Thank you @yourspraveen — the capability probe + routing design was right; it just needed the store contract opened up. Fixes #11087.
2026-08-23 11:45:01 -03:00

55 lines
2.6 KiB
TypeScript

// Guards the native `require` shape that webpack silently rewrites when the
// module specifier (or the require itself) is not statically analyzable.
//
// This failure cannot be caught by running the code: under `tsx`/`node --test` the
// injected loader behaves normally, so the existing driverFactory tests pass in BOTH
// the broken and fixed shapes. The damage only appears in a packaged Next server build.
// The sql.js fallback is covered separately through package assembly and installed-
// artifact boot/write/read outcomes; do not pin another resolver implementation here.
import test from "node:test";
import assert from "node:assert/strict";
import fs from "node:fs";
import path from "node:path";
import { fileURLToPath } from "node:url";
const repoRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..", "..");
function readSource(relativePath: string): string {
return fs.readFileSync(path.join(repoRoot, relativePath), "utf8");
}
/**
* Strips comments before shape-matching. Both files document the rewritten forms they
* must avoid, so a scan of the raw text matches its own warning and fails on the FIXED
* source — a guard that can only ever be satisfied by deleting the explanation.
*/
function stripComments(source: string): string {
return source.replace(/\/\*[\s\S]*?\*\//g, "").replace(/^[ \t]*\/\/.*$/gm, "");
}
test("sync driver cascade requires each SQLite module by literal specifier", () => {
const driverFactory = stripComments(readSource("src/lib/db/adapters/driverFactory.ts"));
// Positive anchor: proves the read hit the real, non-empty module (#8619).
assert.match(driverFactory, /^export function createSyncDriverFactory\(/m);
// The production loader must be the literal-specifier wrapper, never `_require`
// itself — passing `_require` through the `load` parameter is exactly what makes
// webpack substitute its missing-module stub.
assert.match(
driverFactory,
/const openSyncDriver = createSyncDriverFactory\((?:requireSqliteDriver|\w+)(?:,\s*createBetterSqliteProbe\(\{\}\))?\)/
);
assert.match(driverFactory, /^export function tryOpenSync\($/m);
assert.doesNotMatch(driverFactory, /createSyncDriverFactory\(\s*_require\s*\)/);
// Every driver the cascade can ask for needs a direct `_require("<literal>")` so
// webpack emits a real external for it.
for (const moduleName of ["bun:sqlite", "better-sqlite3", "node:sqlite"]) {
assert.ok(
driverFactory.includes(`_require("${moduleName}")`),
`driverFactory must call _require("${moduleName}") with a literal specifier so webpack emits an external for it`
);
}
});