-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy path8.5-lazy-buffer.js
40 lines (32 loc) · 901 Bytes
/
8.5-lazy-buffer.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import { Buffer } from 'buffer';
function createLazyBuffer(size) {
let actualBuffer = null;
// use {} as a placeholder
return new Proxy({}, {
get: (target, prop) => {
if (actualBuffer) {
return actualBuffer[prop].bind(actualBuffer);
}
if (prop !== 'write') {
// since Buffer has only method properties
return () => {
throw new Error(`${prop} method cannot be called. Please write to buffer first`);
}
}
// If it's first write
actualBuffer = Buffer.allocUnsafe(size);
return (data) => {
actualBuffer.write(data);
}
},
});
}
// TESTING
const buffer = createLazyBuffer(20);
try {
console.log('Log buffer:', buffer.toString()); // throws an error
} catch(e) {
console.error('Error', e);
}
buffer.write('Hello to buffer');
console.log('Log buffer:', buffer.toString()); // success