62 lines
2.6 KiB
JavaScript
62 lines
2.6 KiB
JavaScript
|
"use strict";
|
||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||
|
exports.NodeFileSystemFileHandle = void 0;
|
||
|
const NodeFileSystemHandle_1 = require("./NodeFileSystemHandle");
|
||
|
const NodeFileSystemSyncAccessHandle_1 = require("./NodeFileSystemSyncAccessHandle");
|
||
|
const util_1 = require("./util");
|
||
|
const NodeFileSystemWritableFileStream_1 = require("./NodeFileSystemWritableFileStream");
|
||
|
class NodeFileSystemFileHandle extends NodeFileSystemHandle_1.NodeFileSystemHandle {
|
||
|
constructor(fs, __path, ctx = {}) {
|
||
|
ctx = (0, util_1.ctx)(ctx);
|
||
|
super('file', (0, util_1.basename)(__path, ctx.separator));
|
||
|
this.fs = fs;
|
||
|
this.__path = __path;
|
||
|
this.ctx = ctx;
|
||
|
}
|
||
|
/**
|
||
|
* Returns a {@link Promise} which resolves to a {@link File} object
|
||
|
* representing the state on disk of the entry represented by the handle.
|
||
|
*
|
||
|
* @see https://developer.mozilla.org/en-US/docs/Web/API/FileSystemFileHandle/getFile
|
||
|
*/
|
||
|
async getFile() {
|
||
|
try {
|
||
|
const path = this.__path;
|
||
|
const promises = this.fs.promises;
|
||
|
const stats = await promises.stat(path);
|
||
|
// TODO: Once implemented, use promises.readAsBlob() instead of promises.readFile().
|
||
|
const data = await promises.readFile(path);
|
||
|
const file = new File([data], this.name, { lastModified: stats.mtime.getTime() });
|
||
|
return file;
|
||
|
}
|
||
|
catch (error) {
|
||
|
if (error instanceof DOMException)
|
||
|
throw error;
|
||
|
if (error && typeof error === 'object') {
|
||
|
switch (error.code) {
|
||
|
case 'EPERM':
|
||
|
case 'EACCES':
|
||
|
throw (0, util_1.newNotAllowedError)();
|
||
|
}
|
||
|
}
|
||
|
throw error;
|
||
|
}
|
||
|
}
|
||
|
/**
|
||
|
* @see https://developer.mozilla.org/en-US/docs/Web/API/FileSystemFileHandle/createSyncAccessHandle
|
||
|
*/
|
||
|
get createSyncAccessHandle() {
|
||
|
if (!this.ctx.syncHandleAllowed)
|
||
|
return undefined;
|
||
|
return async () => new NodeFileSystemSyncAccessHandle_1.NodeFileSystemSyncAccessHandle(this.fs, this.__path, this.ctx);
|
||
|
}
|
||
|
/**
|
||
|
* @see https://developer.mozilla.org/en-US/docs/Web/API/FileSystemFileHandle/createWritable
|
||
|
*/
|
||
|
async createWritable({ keepExistingData = false } = { keepExistingData: false }) {
|
||
|
(0, util_1.assertCanWrite)(this.ctx.mode);
|
||
|
return new NodeFileSystemWritableFileStream_1.NodeFileSystemWritableFileStream(this.fs, this.__path, keepExistingData);
|
||
|
}
|
||
|
}
|
||
|
exports.NodeFileSystemFileHandle = NodeFileSystemFileHandle;
|
||
|
//# sourceMappingURL=NodeFileSystemFileHandle.js.map
|