@smoothbricks/lmao 0.1.1 → 0.1.2
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/allocator.wasm +0 -0
- package/dist/lib/flushScheduler.d.ts.map +1 -1
- package/dist/lib/flushScheduler.js +8 -0
- package/dist/lib/wasm/wasmAllocator.d.ts +2 -2
- package/dist/lib/wasm/wasmAllocator.d.ts.map +1 -1
- package/dist/lib/wasm/wasmAllocator.js +5 -5
- package/package.json +3 -20
- package/src/lib/__tests__/flushScheduler.test.ts +10 -3
- package/src/lib/flushScheduler.ts +9 -0
- package/src/lib/wasm/wasmAllocator.ts +7 -7
package/dist/allocator.wasm
CHANGED
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flushScheduler.d.ts","sourceRoot":"","sources":["../../src/lib/flushScheduler.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAU,KAAK,KAAK,EAAoB,MAAM,mBAAmB,CAAC;AAIzE,OAAO,KAAK,EAAE,aAAa,EAAc,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"flushScheduler.d.ts","sourceRoot":"","sources":["../../src/lib/flushScheduler.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAU,KAAK,KAAK,EAAoB,MAAM,mBAAmB,CAAC;AAIzE,OAAO,KAAK,EAAE,aAAa,EAAc,MAAM,YAAY,CAAC;AAuC5D;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAE3F;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAC;IAChE,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAElC;;;;OAIG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAC;CAClC;AAED;;;GAGG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAiC;IAC/C,OAAO,CAAC,OAAO,CAAe;IAE9B,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,aAAa,CAAc;IACnC,OAAO,CAAC,gBAAgB,CAAc;IACtC,OAAO,CAAC,UAAU,CAAC,CAAiB;IACpC,OAAO,CAAC,SAAS,CAAC,CAAiB;IACnC,OAAO,CAAC,WAAW,CAAC,CAAiB;IACrC,OAAO,CAAC,SAAS,CAAS;IAE1B,wDAAwD;IACxD,OAAO,CAAC,WAAW,CAAK;IAExB;;;;OAIG;IACH,OAAO,CAAC,+BAA+B,CAAgD;gBAE3E,OAAO,EAAE,YAAY,EAAE,MAAM,GAAE,oBAAyB;IAepE;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI;IAUrC;;OAEG;IACH,KAAK,IAAI,IAAI;IA8Bb;;OAEG;IACH,IAAI,IAAI,IAAI;IAqBZ;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAiB5B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAU7B;;OAEG;IACH,OAAO,CAAC,cAAc;IAatB;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAe3B;;OAEG;YACW,OAAO;IA+IrB;;OAEG;IACH,cAAc,IAAI,IAAI;CAGvB;AAQD;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,oBAAoB,GAAG,cAAc,CAK5G;AAED;;GAEG;AACH,wBAAgB,yBAAyB,IAAI,IAAI,CAKhD;AAED;;;GAGG;AACH,eAAO,MAAM,uBAAuB;IAClC;;OAEG;6BACsB,cAAc,GAAG,MAAM,CAAC,OAAO,GAAG,SAAS;IAKpE;;OAEG;6BACsB,cAAc,SAAS,MAAM,CAAC,OAAO,GAAG,SAAS,GAAG,IAAI;IAIjF;;OAEG;mCAC4B,cAAc,GAAG,MAAM,GAAG,SAAS;IAKlE;;OAEG;mCAC4B,cAAc,QAAQ,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI;CAGtF,CAAC"}
|
|
@@ -19,6 +19,11 @@ function isSpanBufferConstructor(value) {
|
|
|
19
19
|
function isNodeTimer(value) {
|
|
20
20
|
return typeof value === 'object' && value !== null && typeof Reflect.get(value, 'hasRef') === 'function';
|
|
21
21
|
}
|
|
22
|
+
function unrefTimer(timer) {
|
|
23
|
+
if (isNodeTimer(timer)) {
|
|
24
|
+
timer.unref();
|
|
25
|
+
}
|
|
26
|
+
}
|
|
22
27
|
function mergeTables(first, rest) {
|
|
23
28
|
if (rest.length === 0)
|
|
24
29
|
return first;
|
|
@@ -94,17 +99,20 @@ export class FlushScheduler {
|
|
|
94
99
|
this.flushTimer = setInterval(() => {
|
|
95
100
|
this.checkFlushConditions();
|
|
96
101
|
}, 1000); // Check every second
|
|
102
|
+
unrefTimer(this.flushTimer);
|
|
97
103
|
// Set up idle detection timer
|
|
98
104
|
if (this.config.idleDetection) {
|
|
99
105
|
this.idleTimer = setInterval(() => {
|
|
100
106
|
this.checkIdleFlush();
|
|
101
107
|
}, this.config.idleTimeout);
|
|
108
|
+
unrefTimer(this.idleTimer);
|
|
102
109
|
}
|
|
103
110
|
// Set up memory pressure timer (Node.js only)
|
|
104
111
|
if (this.config.memoryPressureDetection && typeof process !== 'undefined') {
|
|
105
112
|
this.memoryTimer = setInterval(() => {
|
|
106
113
|
this.checkMemoryPressure();
|
|
107
114
|
}, 2000); // Check every 2 seconds
|
|
115
|
+
unrefTimer(this.memoryTimer);
|
|
108
116
|
}
|
|
109
117
|
}
|
|
110
118
|
/**
|
|
@@ -88,9 +88,9 @@ export declare enum SizeClass {
|
|
|
88
88
|
Identity = 4
|
|
89
89
|
}
|
|
90
90
|
export interface WasmAllocatorOptions {
|
|
91
|
-
/** Initial memory pages (64KB each).
|
|
91
|
+
/** Initial memory pages (64KB each). Values below the module minimum are clamped. */
|
|
92
92
|
initialPages?: number;
|
|
93
|
-
/** Maximum memory pages.
|
|
93
|
+
/** Maximum memory pages. Values below the effective initial page count are clamped. */
|
|
94
94
|
maxPages?: number;
|
|
95
95
|
/** Default capacity (rows per span buffer). Default: 64 */
|
|
96
96
|
capacity?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wasmAllocator.d.ts","sourceRoot":"","sources":["../../../src/lib/wasm/wasmAllocator.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"wasmAllocator.d.ts","sourceRoot":"","sources":["../../../src/lib/wasm/wasmAllocator.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,7 +18,7 @@ function isWasmExports(value) {
|
|
|
18
18
|
// =============================================================================
|
|
19
19
|
// Implementation
|
|
20
20
|
// =============================================================================
|
|
21
|
-
const
|
|
21
|
+
const MIN_INITIAL_PAGES = 17; // ~1MB - matches WASM module minimum
|
|
22
22
|
const DEFAULT_MAX_PAGES = 16384; // 1GB max (can grow up to this)
|
|
23
23
|
const DEFAULT_CAPACITY = 64;
|
|
24
24
|
/**
|
|
@@ -193,8 +193,8 @@ async function getWasmModule() {
|
|
|
193
193
|
* Buddy allocation enables efficient memory management across different capacities.
|
|
194
194
|
*/
|
|
195
195
|
export async function createWasmAllocator(options) {
|
|
196
|
-
const initialPages = options?.initialPages ??
|
|
197
|
-
const maxPages = options?.maxPages ?? DEFAULT_MAX_PAGES;
|
|
196
|
+
const initialPages = Math.max(options?.initialPages ?? MIN_INITIAL_PAGES, MIN_INITIAL_PAGES);
|
|
197
|
+
const maxPages = Math.max(options?.maxPages ?? DEFAULT_MAX_PAGES, initialPages);
|
|
198
198
|
const capacity = options?.capacity ?? DEFAULT_CAPACITY;
|
|
199
199
|
// Create memory
|
|
200
200
|
const memory = new WebAssembly.Memory({
|
|
@@ -212,8 +212,8 @@ export async function createWasmAllocator(options) {
|
|
|
212
212
|
* Synchronous version for when WASM is pre-loaded.
|
|
213
213
|
*/
|
|
214
214
|
export function createWasmAllocatorSync(wasmModule, options) {
|
|
215
|
-
const initialPages = options?.initialPages ??
|
|
216
|
-
const maxPages = options?.maxPages ?? DEFAULT_MAX_PAGES;
|
|
215
|
+
const initialPages = Math.max(options?.initialPages ?? MIN_INITIAL_PAGES, MIN_INITIAL_PAGES);
|
|
216
|
+
const maxPages = Math.max(options?.maxPages ?? DEFAULT_MAX_PAGES, initialPages);
|
|
217
217
|
const capacity = options?.capacity ?? DEFAULT_CAPACITY;
|
|
218
218
|
// Create memory
|
|
219
219
|
const memory = new WebAssembly.Memory({
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@smoothbricks/lmao",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -139,24 +139,6 @@
|
|
|
139
139
|
"^typecheck"
|
|
140
140
|
]
|
|
141
141
|
},
|
|
142
|
-
"build:wasm": {
|
|
143
|
-
"inputs": [
|
|
144
|
-
"{projectRoot}/src/**/*.zig",
|
|
145
|
-
"{projectRoot}/build.zig",
|
|
146
|
-
"{projectRoot}/build.zig.zon"
|
|
147
|
-
],
|
|
148
|
-
"executor": "nx:run-commands",
|
|
149
|
-
"options": {
|
|
150
|
-
"command": "zig build -Doptimize=ReleaseSmall",
|
|
151
|
-
"cwd": "packages/lmao"
|
|
152
|
-
}
|
|
153
|
-
},
|
|
154
|
-
"build": {
|
|
155
|
-
"dependsOn": [
|
|
156
|
-
"^build",
|
|
157
|
-
"build:wasm"
|
|
158
|
-
]
|
|
159
|
-
},
|
|
160
142
|
"test": {
|
|
161
143
|
"executor": "nx:run-commands",
|
|
162
144
|
"options": {
|
|
@@ -167,7 +149,8 @@
|
|
|
167
149
|
},
|
|
168
150
|
"tags": [
|
|
169
151
|
"npm:public"
|
|
170
|
-
]
|
|
152
|
+
],
|
|
153
|
+
"name": "lmao"
|
|
171
154
|
},
|
|
172
155
|
"devDependencies": {
|
|
173
156
|
"fast-check": "^4.4.0",
|
|
@@ -191,13 +191,20 @@ describe('FlushScheduler', () => {
|
|
|
191
191
|
describe('failure cases', () => {
|
|
192
192
|
it('should not throw if timers fail to clear', () => {
|
|
193
193
|
scheduler.start();
|
|
194
|
+
const originalFlushTimer = FlushSchedulerTestUtils.getFlushTimer(scheduler);
|
|
194
195
|
|
|
195
196
|
// Force internal state corruption - accessing private property for testing
|
|
196
197
|
FlushSchedulerTestUtils.setFlushTimer(scheduler, undefined);
|
|
197
198
|
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
199
|
+
try {
|
|
200
|
+
expect(() => {
|
|
201
|
+
scheduler.stop();
|
|
202
|
+
}).not.toThrow();
|
|
203
|
+
} finally {
|
|
204
|
+
if (originalFlushTimer) {
|
|
205
|
+
clearInterval(originalFlushTimer);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
201
208
|
});
|
|
202
209
|
});
|
|
203
210
|
});
|
|
@@ -27,6 +27,12 @@ function isNodeTimer(value: unknown): value is NodeJS.Timeout {
|
|
|
27
27
|
return typeof value === 'object' && value !== null && typeof Reflect.get(value, 'hasRef') === 'function';
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
+
function unrefTimer(timer: unknown): void {
|
|
31
|
+
if (isNodeTimer(timer)) {
|
|
32
|
+
timer.unref();
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
30
36
|
function mergeTables(first: Table, rest: Table[]): Table {
|
|
31
37
|
if (rest.length === 0) return first;
|
|
32
38
|
|
|
@@ -177,12 +183,14 @@ export class FlushScheduler {
|
|
|
177
183
|
this.flushTimer = setInterval(() => {
|
|
178
184
|
this.checkFlushConditions();
|
|
179
185
|
}, 1000); // Check every second
|
|
186
|
+
unrefTimer(this.flushTimer);
|
|
180
187
|
|
|
181
188
|
// Set up idle detection timer
|
|
182
189
|
if (this.config.idleDetection) {
|
|
183
190
|
this.idleTimer = setInterval(() => {
|
|
184
191
|
this.checkIdleFlush();
|
|
185
192
|
}, this.config.idleTimeout);
|
|
193
|
+
unrefTimer(this.idleTimer);
|
|
186
194
|
}
|
|
187
195
|
|
|
188
196
|
// Set up memory pressure timer (Node.js only)
|
|
@@ -190,6 +198,7 @@ export class FlushScheduler {
|
|
|
190
198
|
this.memoryTimer = setInterval(() => {
|
|
191
199
|
this.checkMemoryPressure();
|
|
192
200
|
}, 2000); // Check every 2 seconds
|
|
201
|
+
unrefTimer(this.memoryTimer);
|
|
193
202
|
}
|
|
194
203
|
}
|
|
195
204
|
|
|
@@ -132,9 +132,9 @@ export enum SizeClass {
|
|
|
132
132
|
}
|
|
133
133
|
|
|
134
134
|
export interface WasmAllocatorOptions {
|
|
135
|
-
/** Initial memory pages (64KB each).
|
|
135
|
+
/** Initial memory pages (64KB each). Values below the module minimum are clamped. */
|
|
136
136
|
initialPages?: number;
|
|
137
|
-
/** Maximum memory pages.
|
|
137
|
+
/** Maximum memory pages. Values below the effective initial page count are clamped. */
|
|
138
138
|
maxPages?: number;
|
|
139
139
|
/** Default capacity (rows per span buffer). Default: 64 */
|
|
140
140
|
capacity?: number;
|
|
@@ -225,7 +225,7 @@ function isWasmExports(value: unknown): value is WasmExports {
|
|
|
225
225
|
// Implementation
|
|
226
226
|
// =============================================================================
|
|
227
227
|
|
|
228
|
-
const
|
|
228
|
+
const MIN_INITIAL_PAGES = 17; // ~1MB - matches WASM module minimum
|
|
229
229
|
const DEFAULT_MAX_PAGES = 16384; // 1GB max (can grow up to this)
|
|
230
230
|
const DEFAULT_CAPACITY = 64;
|
|
231
231
|
|
|
@@ -427,8 +427,8 @@ async function getWasmModule(): Promise<WebAssembly.Module> {
|
|
|
427
427
|
* Buddy allocation enables efficient memory management across different capacities.
|
|
428
428
|
*/
|
|
429
429
|
export async function createWasmAllocator(options?: WasmAllocatorOptions): Promise<WasmAllocator> {
|
|
430
|
-
const initialPages = options?.initialPages ??
|
|
431
|
-
const maxPages = options?.maxPages ?? DEFAULT_MAX_PAGES;
|
|
430
|
+
const initialPages = Math.max(options?.initialPages ?? MIN_INITIAL_PAGES, MIN_INITIAL_PAGES);
|
|
431
|
+
const maxPages = Math.max(options?.maxPages ?? DEFAULT_MAX_PAGES, initialPages);
|
|
432
432
|
const capacity = options?.capacity ?? DEFAULT_CAPACITY;
|
|
433
433
|
|
|
434
434
|
// Create memory
|
|
@@ -451,8 +451,8 @@ export async function createWasmAllocator(options?: WasmAllocatorOptions): Promi
|
|
|
451
451
|
* Synchronous version for when WASM is pre-loaded.
|
|
452
452
|
*/
|
|
453
453
|
export function createWasmAllocatorSync(wasmModule: WebAssembly.Module, options?: WasmAllocatorOptions): WasmAllocator {
|
|
454
|
-
const initialPages = options?.initialPages ??
|
|
455
|
-
const maxPages = options?.maxPages ?? DEFAULT_MAX_PAGES;
|
|
454
|
+
const initialPages = Math.max(options?.initialPages ?? MIN_INITIAL_PAGES, MIN_INITIAL_PAGES);
|
|
455
|
+
const maxPages = Math.max(options?.maxPages ?? DEFAULT_MAX_PAGES, initialPages);
|
|
456
456
|
const capacity = options?.capacity ?? DEFAULT_CAPACITY;
|
|
457
457
|
|
|
458
458
|
// Create memory
|