MMap native library
This commit is contained in:
89
lib/index.ts
Normal file
89
lib/index.ts
Normal file
@@ -0,0 +1,89 @@
|
||||
// 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;
|
||||
Reference in New Issue
Block a user