@dfinity/assets
Version:
JavaScript and TypeScript library to manage assets on the Internet Computer
78 lines • 2.24 kB
JavaScript
import mime from 'mime/lite.js';
import fs from 'fs';
import path from 'path';
import { uint8FromBufLike } from '@dfinity/agent';
export class ReadablePath {
constructor(path, size) {
this._path = path;
this._size = size;
}
get fileName() {
return path.basename(this._path);
}
get contentType() {
return mime.getType(this.fileName) ?? 'application/octet-stream';
}
get length() {
return this._size;
}
static async create(path) {
return new Promise((resolve, reject) => {
fs.stat(path, (err, stats) => {
if (err) {
reject(err);
return;
}
resolve(new ReadablePath(path, stats.size));
});
});
}
async open() {
return new Promise((resolve, reject) => {
if (this._fd !== undefined) {
reject('File is already open');
return;
}
fs.open(this._path, (err, fd) => {
if (err) {
reject(err);
return;
}
this._fd = fd;
resolve();
});
});
}
async close() {
return new Promise((resolve, reject) => {
if (this._fd === undefined) {
reject('No open file handle found');
return;
}
fs.close(this._fd, err => {
if (err) {
reject(err);
return;
}
resolve();
});
});
}
async slice(start, end) {
return new Promise((resolve, reject) => {
if (this._fd === undefined) {
reject('No open file handle found');
return;
}
const buffer = Buffer.alloc(end - start);
fs.read(this._fd, uint8FromBufLike(buffer), 0, end - start, start, (err) => {
if (err) {
reject(err);
return;
}
resolve(new Uint8Array(buffer));
});
});
}
}
//# sourceMappingURL=readablePath.js.map