This commit is contained in:
68
node_modules/geotiff/dist-module/source/file.js
generated
vendored
Normal file
68
node_modules/geotiff/dist-module/source/file.js
generated
vendored
Normal file
@@ -0,0 +1,68 @@
|
||||
import fs from 'fs';
|
||||
import { BaseSource } from './basesource.js';
|
||||
|
||||
function closeAsync(fd) {
|
||||
return new Promise((resolve, reject) => {
|
||||
fs.close(fd, (err) => {
|
||||
if (err) {
|
||||
reject(err);
|
||||
} else {
|
||||
resolve();
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function openAsync(path, flags, mode = undefined) {
|
||||
return new Promise((resolve, reject) => {
|
||||
fs.open(path, flags, mode, (err, fd) => {
|
||||
if (err) {
|
||||
reject(err);
|
||||
} else {
|
||||
resolve(fd);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function readAsync(...args) {
|
||||
return new Promise((resolve, reject) => {
|
||||
fs.read(...args, (err, bytesRead, buffer) => {
|
||||
if (err) {
|
||||
reject(err);
|
||||
} else {
|
||||
resolve({ bytesRead, buffer });
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
class FileSource extends BaseSource {
|
||||
constructor(path) {
|
||||
super();
|
||||
this.path = path;
|
||||
this.openRequest = openAsync(path, 'r');
|
||||
}
|
||||
|
||||
async fetchSlice(slice) {
|
||||
// TODO: use `signal`
|
||||
const fd = await this.openRequest;
|
||||
const { buffer } = await readAsync(
|
||||
fd,
|
||||
Buffer.alloc(slice.length),
|
||||
0,
|
||||
slice.length,
|
||||
slice.offset,
|
||||
);
|
||||
return buffer.buffer;
|
||||
}
|
||||
|
||||
async close() {
|
||||
const fd = await this.openRequest;
|
||||
await closeAsync(fd);
|
||||
}
|
||||
}
|
||||
|
||||
export function makeFileSource(path) {
|
||||
return new FileSource(path);
|
||||
}
|
||||
Reference in New Issue
Block a user