@ebowwa/bun-native-page 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/ffi.ts ADDED
@@ -0,0 +1,119 @@
1
+ /**
2
+ * Bun FFI bindings to page_native library
3
+ */
4
+
5
+ import { dlopen, suffix, ptr, toArrayBuffer } from 'bun:ffi';
6
+
7
+ // Platform detection
8
+ const platform = process.platform;
9
+ const arch = process.arch;
10
+
11
+ // Resolve native library path
12
+ function getNativePath(): string {
13
+ const platformMap: Record<string, string> = {
14
+ 'darwin-arm64': 'darwin-arm64',
15
+ 'darwin-x64': 'darwin-x64',
16
+ 'linux-x64': 'linux-x64',
17
+ 'linux-x86': 'linux-x86',
18
+ 'linux-arm64': 'linux-arm64',
19
+ 'linux-arm': 'linux-arm',
20
+ 'win32-x64': 'windows-x64',
21
+ 'win32-x86': 'windows-x86',
22
+ 'win32-arm64': 'windows-arm64',
23
+ };
24
+
25
+ const key = `${platform}-${arch}`;
26
+ const platformDir = platformMap[key];
27
+
28
+ if (!platformDir) {
29
+ throw new Error(`Unsupported platform: ${key}`);
30
+ }
31
+
32
+ const libName = platform === 'win32' ? 'page_native.dll' : `libpage_native.dylib`;
33
+ return import.meta.dir + `/../native/${platformDir}/${libName}`;
34
+ }
35
+
36
+ // FFI symbol definitions
37
+ const symbols = {
38
+ // Page size
39
+ page_get_size: { returns: 'usize' },
40
+ page_is_4k: { returns: 'i32' },
41
+ page_is_16k: { returns: 'i32' },
42
+ page_get_huge_page_size: { returns: 'usize' },
43
+ page_get_platform: { returns: 'i32' },
44
+ page_align_size: { args: ['usize'], returns: 'usize' },
45
+ page_truncate_size: { args: ['usize'], returns: 'usize' },
46
+ page_is_aligned: { args: ['usize'], returns: 'i32' },
47
+
48
+ // Allocation
49
+ page_alloc: { args: ['usize'], returns: 'pointer' },
50
+ page_alloc_ptr: { args: ['pointer'], returns: 'pointer' },
51
+ page_alloc_size: { args: ['pointer'], returns: 'usize' },
52
+ page_free: { args: ['pointer'], returns: 'void' },
53
+
54
+ // mmap
55
+ page_mmap_anonymous: { args: ['usize', 'i32'], returns: 'pointer' },
56
+ page_mmap_file: { args: ['i32', 'usize', 'i64', 'i32'], returns: 'pointer' },
57
+ page_mmap_huge: { args: ['usize'], returns: 'pointer' },
58
+ page_mmap_ptr: { args: ['pointer'], returns: 'pointer' },
59
+ page_mmap_size: { args: ['pointer'], returns: 'usize' },
60
+ page_munmap: { args: ['pointer'], returns: 'i32' },
61
+ page_madvise: { args: ['ptr', 'usize', 'i32'], returns: 'i32' },
62
+ page_mprotect: { args: ['ptr', 'usize', 'i32'], returns: 'i32' },
63
+ page_mlock: { args: ['ptr', 'usize'], returns: 'i32' },
64
+ page_munlock: { args: ['ptr', 'usize'], returns: 'i32' },
65
+
66
+ // Utility
67
+ page_zero: { args: ['ptr', 'usize'], returns: 'void' },
68
+ page_copy: { args: ['ptr', 'ptr', 'usize'], returns: 'void' },
69
+ } as const;
70
+
71
+ // Load the library
72
+ let lib: ReturnType<typeof dlopen<typeof symbols>>;
73
+
74
+ try {
75
+ lib = dlopen(getNativePath(), symbols);
76
+ } catch (e) {
77
+ throw new Error(
78
+ `Failed to load page_native library for ${platform}-${arch}. ` +
79
+ `Make sure the native library is built for your platform. ` +
80
+ `Error: ${e}`
81
+ );
82
+ }
83
+
84
+ // Export the FFI functions
85
+ export const ffi = {
86
+ // Page size
87
+ getSize: lib.symbols.page_get_size,
88
+ is4k: lib.symbols.page_is_4k,
89
+ is16k: lib.symbols.page_is_16k,
90
+ getHugePageSize: lib.symbols.page_get_huge_page_size,
91
+ getPlatform: lib.symbols.page_get_platform,
92
+ alignSize: lib.symbols.page_align_size,
93
+ truncateSize: lib.symbols.page_truncate_size,
94
+ isAligned: lib.symbols.page_is_aligned,
95
+
96
+ // Allocation
97
+ alloc: lib.symbols.page_alloc,
98
+ allocPtr: lib.symbols.page_alloc_ptr,
99
+ allocSize: lib.symbols.page_alloc_size,
100
+ free: lib.symbols.page_free,
101
+
102
+ // mmap
103
+ mmapAnonymous: lib.symbols.page_mmap_anonymous,
104
+ mmapFile: lib.symbols.page_mmap_file,
105
+ mmapHuge: lib.symbols.page_mmap_huge,
106
+ mmapPtr: lib.symbols.page_mmap_ptr,
107
+ mmapSize: lib.symbols.page_mmap_size,
108
+ munmap: lib.symbols.page_munmap,
109
+ madvise: lib.symbols.page_madvise,
110
+ mprotect: lib.symbols.page_mprotect,
111
+ mlock: lib.symbols.page_mlock,
112
+ munlock: lib.symbols.page_munlock,
113
+
114
+ // Utility
115
+ zero: lib.symbols.page_zero,
116
+ copy: lib.symbols.page_copy,
117
+ };
118
+
119
+ export { ptr, toArrayBuffer };
@@ -0,0 +1,89 @@
1
+ /**
2
+ * @ebowwa/bun-native-page
3
+ *
4
+ * Cross-platform page-size aware memory operations for Bun
5
+ */
6
+ export * from './errors.js';
7
+ export * from './oom.js';
8
+ export * from './allocator.js';
9
+ import { OOMOptions } from './oom.js';
10
+ export interface PageSizeInfo {
11
+ /** System page size in bytes */
12
+ readonly size: number;
13
+ /** true if page size is 4096 bytes */
14
+ readonly is4k: boolean;
15
+ /** true if page size is 16384 bytes */
16
+ readonly is16k: boolean;
17
+ /** true if page size is 65536 bytes */
18
+ readonly is64k: boolean;
19
+ /** Huge page size in bytes (Linux only, 0 if unavailable) */
20
+ readonly hugePageSize: number;
21
+ /** Platform identifier */
22
+ readonly platform: PlatformName;
23
+ }
24
+ export type PlatformName = 'darwin-arm64' | 'darwin-x64' | 'linux-x64' | 'linux-x86' | 'linux-arm64' | 'linux-arm' | 'windows-x64' | 'windows-x86' | 'windows-arm64' | 'unknown';
25
+ export type MemoryProtection = 'none' | 'read' | 'write' | 'exec' | 'read-write' | 'read-exec' | 'write-exec' | 'all';
26
+ export type MemoryAdvice = 'normal' | 'random' | 'sequential' | 'willneed' | 'dontneed' | 'free' | 'hugepage' | 'nohugepage';
27
+ export interface AllocatedBuffer {
28
+ /** Pointer to allocated memory */
29
+ readonly ptr: bigint;
30
+ /** Requested size */
31
+ readonly size: number;
32
+ /** Actual allocated size (may be larger due to alignment) */
33
+ readonly allocatedSize: number;
34
+ /** ArrayBuffer view of the memory */
35
+ readonly buffer: ArrayBuffer;
36
+ /** Free the allocation */
37
+ free(): void;
38
+ }
39
+ export interface MappedRegion {
40
+ /** Pointer to mapped memory */
41
+ readonly ptr: bigint;
42
+ /** Mapped size */
43
+ readonly size: number;
44
+ /** ArrayBuffer view */
45
+ readonly buffer: ArrayBuffer;
46
+ /** Unmap the region */
47
+ unmap(): void;
48
+ /** Change memory protection */
49
+ protect(prot: MemoryProtection): void;
50
+ /** Advise kernel about usage pattern */
51
+ advise(advice: MemoryAdvice): void;
52
+ /** Lock pages in memory (prevent swap) */
53
+ lock(): void;
54
+ /** Unlock pages */
55
+ unlock(): void;
56
+ }
57
+ /**
58
+ * Get system page size information
59
+ */
60
+ export declare function getPageSize(): PageSizeInfo;
61
+ /**
62
+ * Round size up to nearest page boundary
63
+ */
64
+ export declare function alignToPage(size: number): number;
65
+ /**
66
+ * Round size down to nearest page boundary
67
+ */
68
+ export declare function truncateToPage(size: number): number;
69
+ /**
70
+ * Check if a pointer is page-aligned
71
+ */
72
+ export declare function isPageAligned(ptr: bigint | number): boolean;
73
+ /**
74
+ * Allocate page-aligned memory
75
+ */
76
+ export declare function allocPageAligned(size: number, options?: OOMOptions): AllocatedBuffer | null;
77
+ /**
78
+ * Map anonymous memory (no file backing)
79
+ */
80
+ export declare function mmapAnonymous(size: number, prot?: MemoryProtection): MappedRegion;
81
+ /**
82
+ * Map a file into memory
83
+ */
84
+ export declare function mmapFile(fd: number, size: number, offset?: number, prot?: MemoryProtection): MappedRegion;
85
+ /**
86
+ * Map huge pages (Linux only, falls back to regular pages on other platforms)
87
+ */
88
+ export declare function mmapHuge(size: number): MappedRegion | null;
89
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,294 @@
1
+ /**
2
+ * @ebowwa/bun-native-page
3
+ *
4
+ * Cross-platform page-size aware memory operations for Bun
5
+ */
6
+ export * from './errors.js';
7
+ export * from './oom.js';
8
+ export * from './allocator.js';
9
+ import { ffi, toArrayBuffer } from './ffi.js';
10
+ import { PageSizeError, MapError, ProtectionError, LockError } from './errors.js';
11
+ import { handleOOM } from './oom.js';
12
+ // ============================================================================
13
+ // Constants
14
+ // ============================================================================
15
+ const PROTECTION_MAP = {
16
+ 'none': 0,
17
+ 'read': 1,
18
+ 'write': 2,
19
+ 'exec': 4,
20
+ 'read-write': 3,
21
+ 'read-exec': 5,
22
+ 'write-exec': 6,
23
+ 'all': 7,
24
+ };
25
+ const ADVICE_MAP = {
26
+ 'normal': 0,
27
+ 'random': 1,
28
+ 'sequential': 2,
29
+ 'willneed': 3,
30
+ 'dontneed': 4,
31
+ 'free': 5,
32
+ 'hugepage': 6,
33
+ 'nohugepage': 7,
34
+ };
35
+ const PLATFORM_NAMES = {
36
+ 0: 'darwin-arm64',
37
+ 1: 'darwin-x64',
38
+ 2: 'linux-x64',
39
+ 3: 'linux-x86',
40
+ 4: 'linux-arm64',
41
+ 5: 'linux-arm',
42
+ 6: 'windows-x64',
43
+ 7: 'windows-x86',
44
+ 8: 'windows-arm64',
45
+ 99: 'unknown',
46
+ };
47
+ // Cached page size info
48
+ let cachedPageSizeInfo = null;
49
+ // ============================================================================
50
+ // Page Size API
51
+ // ============================================================================
52
+ /**
53
+ * Get system page size information
54
+ */
55
+ export function getPageSize() {
56
+ if (cachedPageSizeInfo) {
57
+ return cachedPageSizeInfo;
58
+ }
59
+ const size = Number(ffi.getSize());
60
+ const hugePageSize = Number(ffi.getHugePageSize());
61
+ const platformId = Number(ffi.getPlatform());
62
+ cachedPageSizeInfo = {
63
+ size,
64
+ is4k: size === 4096,
65
+ is16k: size === 16384,
66
+ is64k: size === 65536,
67
+ hugePageSize,
68
+ platform: PLATFORM_NAMES[platformId] ?? 'unknown',
69
+ };
70
+ return cachedPageSizeInfo;
71
+ }
72
+ /**
73
+ * Round size up to nearest page boundary
74
+ */
75
+ export function alignToPage(size) {
76
+ return Number(ffi.alignSize(BigInt(size)));
77
+ }
78
+ /**
79
+ * Round size down to nearest page boundary
80
+ */
81
+ export function truncateToPage(size) {
82
+ return Number(ffi.truncateSize(BigInt(size)));
83
+ }
84
+ /**
85
+ * Check if a pointer is page-aligned
86
+ */
87
+ export function isPageAligned(ptr) {
88
+ const result = ffi.isAligned(BigInt(ptr));
89
+ return result !== 0;
90
+ }
91
+ // ============================================================================
92
+ // Allocation API
93
+ // ============================================================================
94
+ /**
95
+ * Allocate page-aligned memory
96
+ */
97
+ export function allocPageAligned(size, options) {
98
+ if (size <= 0) {
99
+ throw new PageSizeError('Size must be positive');
100
+ }
101
+ if (size > Number.MAX_SAFE_INTEGER) {
102
+ throw new PageSizeError('Size exceeds safe integer range');
103
+ }
104
+ const allocHandle = ffi.alloc(BigInt(size));
105
+ if (allocHandle === null || allocHandle === 0n) {
106
+ return handleOOM(size, options);
107
+ }
108
+ const actualPtr = ffi.allocPtr(allocHandle);
109
+ const actualSize = Number(ffi.allocSize(allocHandle));
110
+ if (actualPtr === null || actualPtr === 0n) {
111
+ ffi.free(allocHandle);
112
+ return handleOOM(size, options);
113
+ }
114
+ let freed = false;
115
+ return {
116
+ ptr: BigInt(actualPtr),
117
+ size,
118
+ allocatedSize: actualSize,
119
+ get buffer() {
120
+ if (freed) {
121
+ throw new PageSizeError('Cannot access freed buffer');
122
+ }
123
+ return toArrayBuffer(actualPtr, 0, actualSize);
124
+ },
125
+ free() {
126
+ if (!freed) {
127
+ freed = true;
128
+ ffi.free(allocHandle);
129
+ }
130
+ },
131
+ };
132
+ }
133
+ // ============================================================================
134
+ // mmap API
135
+ // ============================================================================
136
+ /**
137
+ * Map anonymous memory (no file backing)
138
+ */
139
+ export function mmapAnonymous(size, prot = 'read-write') {
140
+ if (size <= 0) {
141
+ throw new PageSizeError('Size must be positive');
142
+ }
143
+ const protValue = PROTECTION_MAP[prot];
144
+ const regionHandle = ffi.mmapAnonymous(BigInt(size), protValue);
145
+ if (regionHandle === null || regionHandle === 0n) {
146
+ throw new MapError(size, 'mmap failed');
147
+ }
148
+ const actualPtr = ffi.mmapPtr(regionHandle);
149
+ const actualSize = Number(ffi.mmapSize(regionHandle));
150
+ if (actualPtr === null || actualPtr === 0n) {
151
+ throw new MapError(size, 'mmap returned null pointer');
152
+ }
153
+ let unmapped = false;
154
+ return {
155
+ ptr: BigInt(actualPtr),
156
+ size: actualSize,
157
+ get buffer() {
158
+ if (unmapped) {
159
+ throw new PageSizeError('Cannot access unmapped region');
160
+ }
161
+ return toArrayBuffer(actualPtr, 0, actualSize);
162
+ },
163
+ unmap() {
164
+ if (!unmapped) {
165
+ unmapped = true;
166
+ const result = ffi.munmap(regionHandle);
167
+ if (result !== 0) {
168
+ throw new PageSizeError('munmap failed');
169
+ }
170
+ }
171
+ },
172
+ protect(prot) {
173
+ const protValue = PROTECTION_MAP[prot];
174
+ const result = ffi.mprotect(actualPtr, BigInt(actualSize), protValue);
175
+ if (result !== 0) {
176
+ throw new ProtectionError(`mprotect failed with code ${result}`);
177
+ }
178
+ },
179
+ advise(advice) {
180
+ const adviceValue = ADVICE_MAP[advice];
181
+ ffi.madvise(actualPtr, BigInt(actualSize), adviceValue);
182
+ },
183
+ lock() {
184
+ const result = ffi.mlock(actualPtr, BigInt(actualSize));
185
+ if (result !== 0) {
186
+ throw new LockError(`mlock failed with code ${result}`);
187
+ }
188
+ },
189
+ unlock() {
190
+ const result = ffi.munlock(actualPtr, BigInt(actualSize));
191
+ if (result !== 0) {
192
+ throw new LockError(`munlock failed with code ${result}`);
193
+ }
194
+ },
195
+ };
196
+ }
197
+ /**
198
+ * Map a file into memory
199
+ */
200
+ export function mmapFile(fd, size, offset = 0, prot = 'read-write') {
201
+ if (size <= 0) {
202
+ throw new PageSizeError('Size must be positive');
203
+ }
204
+ const protValue = PROTECTION_MAP[prot];
205
+ const regionHandle = ffi.mmapFile(fd, BigInt(size), BigInt(offset), protValue);
206
+ if (regionHandle === null || regionHandle === 0n) {
207
+ throw new MapError(size, 'mmap file failed');
208
+ }
209
+ const actualPtr = ffi.mmapPtr(regionHandle);
210
+ const actualSize = Number(ffi.mmapSize(regionHandle));
211
+ if (actualPtr === null || actualPtr === 0n) {
212
+ throw new MapError(size, 'mmap file returned null pointer');
213
+ }
214
+ let unmapped = false;
215
+ return {
216
+ ptr: BigInt(actualPtr),
217
+ size: actualSize,
218
+ get buffer() {
219
+ if (unmapped) {
220
+ throw new PageSizeError('Cannot access unmapped region');
221
+ }
222
+ return toArrayBuffer(actualPtr, 0, actualSize);
223
+ },
224
+ unmap() {
225
+ if (!unmapped) {
226
+ unmapped = true;
227
+ ffi.munmap(regionHandle);
228
+ }
229
+ },
230
+ protect(prot) {
231
+ const protValue = PROTECTION_MAP[prot];
232
+ ffi.mprotect(actualPtr, BigInt(actualSize), protValue);
233
+ },
234
+ advise(advice) {
235
+ const adviceValue = ADVICE_MAP[advice];
236
+ ffi.madvise(actualPtr, BigInt(actualSize), adviceValue);
237
+ },
238
+ lock() {
239
+ ffi.mlock(actualPtr, BigInt(actualSize));
240
+ },
241
+ unlock() {
242
+ ffi.munlock(actualPtr, BigInt(actualSize));
243
+ },
244
+ };
245
+ }
246
+ /**
247
+ * Map huge pages (Linux only, falls back to regular pages on other platforms)
248
+ */
249
+ export function mmapHuge(size) {
250
+ if (size <= 0) {
251
+ throw new PageSizeError('Size must be positive');
252
+ }
253
+ const regionHandle = ffi.mmapHuge(BigInt(size));
254
+ if (regionHandle === null || regionHandle === 0n) {
255
+ return null;
256
+ }
257
+ const actualPtr = ffi.mmapPtr(regionHandle);
258
+ const actualSize = Number(ffi.mmapSize(regionHandle));
259
+ if (actualPtr === null || actualPtr === 0n) {
260
+ return null;
261
+ }
262
+ let unmapped = false;
263
+ return {
264
+ ptr: BigInt(actualPtr),
265
+ size: actualSize,
266
+ get buffer() {
267
+ if (unmapped) {
268
+ throw new PageSizeError('Cannot access unmapped region');
269
+ }
270
+ return toArrayBuffer(actualPtr, 0, actualSize);
271
+ },
272
+ unmap() {
273
+ if (!unmapped) {
274
+ unmapped = true;
275
+ ffi.munmap(regionHandle);
276
+ }
277
+ },
278
+ protect(prot) {
279
+ const protValue = PROTECTION_MAP[prot];
280
+ ffi.mprotect(actualPtr, BigInt(actualSize), protValue);
281
+ },
282
+ advise(advice) {
283
+ const adviceValue = ADVICE_MAP[advice];
284
+ ffi.madvise(actualPtr, BigInt(actualSize), adviceValue);
285
+ },
286
+ lock() {
287
+ ffi.mlock(actualPtr, BigInt(actualSize));
288
+ },
289
+ unlock() {
290
+ ffi.munlock(actualPtr, BigInt(actualSize));
291
+ },
292
+ };
293
+ }
294
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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"}