Skip to content

Commit 56bd119

Browse files
committed
geo: try resolve within node_modules
1 parent 9ccca32 commit 56bd119

File tree

1 file changed

+27
-2
lines changed

1 file changed

+27
-2
lines changed

packages/geo/src/geo.ts

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { readFile } from 'node:fs/promises';
2+
import { createRequire } from 'node:module';
23
import path from 'node:path';
34
import { dirname } from 'node:path';
45
import { fileURLToPath } from 'node:url';
@@ -29,8 +30,32 @@ async function loadDatabase(): Promise<ReaderModel | null> {
2930
console.log('GeoLite2-City.mmdb loaded (local)', dbPathLocal);
3031
return Reader.openBuffer(dbBuffer);
3132
} catch {
32-
console.error('GeoLite2-City.mmdb not found', { dbPath, dbPathLocal });
33-
return null;
33+
// Try node_modules resolution (for Vercel/serverless environments)
34+
try {
35+
const require = createRequire(import.meta.url);
36+
// Resolve the package entry point, then find package.json relative to it
37+
const packageEntry = require.resolve('@openpanel/geo');
38+
let packageDir = path.dirname(packageEntry);
39+
// Walk up to find package.json (package entry might be in src/ or dist/)
40+
for (let i = 0; i < 3; i++) {
41+
try {
42+
await readFile(path.join(packageDir, 'package.json'));
43+
break; // Found package.json
44+
} catch {
45+
packageDir = path.dirname(packageDir);
46+
}
47+
}
48+
const nodeModulesPath = path.join(packageDir, filename);
49+
const dbBuffer = await readFile(nodeModulesPath);
50+
console.log(
51+
'GeoLite2-City.mmdb loaded (node_modules)',
52+
nodeModulesPath,
53+
);
54+
return Reader.openBuffer(dbBuffer);
55+
} catch {
56+
console.error('GeoLite2-City.mmdb not found (node_modules)');
57+
return null;
58+
}
3459
}
3560
}
3661
}

0 commit comments

Comments
 (0)