89 lines
2.0 KiB
TypeScript
89 lines
2.0 KiB
TypeScript
// lib/index.ts
|
|
import { createRequire } from 'node:module';
|
|
import * as path from 'node:path';
|
|
import { fileURLToPath } from 'node:url';
|
|
|
|
const __filename = fileURLToPath(import.meta.url);
|
|
const __dirname = path.dirname(__filename);
|
|
const require = createRequire(import.meta.url);
|
|
|
|
// dist/lib/index.js 에서 실행될 때 -> ../../build/Release/
|
|
// lib/index.ts 에서 실행될 때 -> ../build/Release/
|
|
// 둘 다 지원하도록 동적으로 찾기
|
|
|
|
function findBinding(): string {
|
|
const candidates = [
|
|
path.join(__dirname, '..', '..', 'build', 'Release', 'mmap_binding.node'), // dist/lib/ 기준
|
|
path.join(__dirname, '..', 'build', 'Release', 'mmap_binding.node'), // lib/ 기준
|
|
];
|
|
|
|
for (const candidate of candidates) {
|
|
try {
|
|
require.resolve(candidate);
|
|
return candidate;
|
|
} catch {
|
|
continue;
|
|
}
|
|
}
|
|
|
|
throw new Error('Cannot find mmap_binding.node. Run `npm run build:native` first.');
|
|
}
|
|
|
|
const binding = require(findBinding());
|
|
|
|
// 타입 정의
|
|
export interface MmapBinding {
|
|
map(size: number, prot: number, flags: number, fd: number, offset: number): Buffer;
|
|
sync(buffer: Buffer, offset: number, length: number, flags: number): void;
|
|
unmap(buffer: Buffer): void;
|
|
advise(buffer: Buffer, offset: number, length: number, advice: number): void;
|
|
pageSize(): number;
|
|
|
|
PROT_NONE: number;
|
|
PROT_READ: number;
|
|
PROT_WRITE: number;
|
|
PROT_EXEC: number;
|
|
|
|
MAP_SHARED: number;
|
|
MAP_PRIVATE: number;
|
|
MAP_ANONYMOUS?: number;
|
|
MAP_ANON?: number;
|
|
|
|
MS_ASYNC: number;
|
|
MS_SYNC: number;
|
|
MS_INVALIDATE: number;
|
|
|
|
MADV_NORMAL: number;
|
|
MADV_RANDOM: number;
|
|
MADV_SEQUENTIAL: number;
|
|
MADV_WILLNEED: number;
|
|
MADV_DONTNEED: number;
|
|
}
|
|
|
|
const mmap: MmapBinding = binding;
|
|
|
|
export default mmap;
|
|
|
|
export const {
|
|
map,
|
|
sync,
|
|
unmap,
|
|
advise,
|
|
pageSize,
|
|
PROT_NONE,
|
|
PROT_READ,
|
|
PROT_WRITE,
|
|
PROT_EXEC,
|
|
MAP_SHARED,
|
|
MAP_PRIVATE,
|
|
MAP_ANONYMOUS,
|
|
MAP_ANON,
|
|
MS_ASYNC,
|
|
MS_SYNC,
|
|
MS_INVALIDATE,
|
|
MADV_NORMAL,
|
|
MADV_RANDOM,
|
|
MADV_SEQUENTIAL,
|
|
MADV_WILLNEED,
|
|
MADV_DONTNEED,
|
|
} = mmap; |