@minilibs/ip2geo
Version:
Ip to Geo location instantly ⚡
56 lines (48 loc) • 1.67 kB
JavaScript
;
var ponyfill_es2018 = require('../web-streams-polyfill/dist/ponyfill.es2018.js');
/* c8 ignore start */
// 64 KiB (same size chrome slice theirs blob into Uint8array's)
const POOL_SIZE = 65536;
if (!globalThis.ReadableStream) {
// `node:stream/web` got introduced in v16.5.0 as experimental
// and it's preferred over the polyfilled version. So we also
// suppress the warning that gets emitted by NodeJS for using it.
try {
const process = require('node:process');
const { emitWarning } = process;
try {
process.emitWarning = () => {};
Object.assign(globalThis, require('node:stream/web'));
process.emitWarning = emitWarning;
} catch (error) {
process.emitWarning = emitWarning;
throw error
}
} catch (error) {
// fallback to polyfill implementation
Object.assign(globalThis, ponyfill_es2018.__require());
}
}
try {
// Don't use node: prefix for this, require+node: is not supported until node v14.14
// Only `import()` can use prefix in 12.20 and later
const { Blob } = require('buffer');
if (Blob && !Blob.prototype.stream) {
Blob.prototype.stream = function name (params) {
let position = 0;
const blob = this;
return new ReadableStream({
type: 'bytes',
async pull (ctrl) {
const chunk = blob.slice(position, Math.min(blob.size, position + POOL_SIZE));
const buffer = await chunk.arrayBuffer();
position += buffer.byteLength;
ctrl.enqueue(new Uint8Array(buffer));
if (position === blob.size) {
ctrl.close();
}
}
})
};
}
} catch (error) {}