123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.NodeFileSystemDirectoryHandle = void 0;
- const tslib_1 = require("tslib");
- const NodeFileSystemHandle_1 = require("./NodeFileSystemHandle");
- const util_1 = require("./util");
- const NodeFileSystemFileHandle_1 = require("./NodeFileSystemFileHandle");
- /**
- * @see https://developer.mozilla.org/en-US/docs/Web/API/FileSystemDirectoryHandle
- */
- class NodeFileSystemDirectoryHandle extends NodeFileSystemHandle_1.NodeFileSystemHandle {
- constructor(fs, path, ctx = {}) {
- super('directory', (0, util_1.basename)(path, ctx.separator || '/'));
- this.fs = fs;
- this.ctx = (0, util_1.ctx)(ctx);
- this.__path = path[path.length - 1] === this.ctx.separator ? path : path + this.ctx.separator;
- }
- /**
- * Returns a new array iterator containing the keys for each item in
- * {@link NodeFileSystemDirectoryHandle} object.
- *
- * @see https://developer.mozilla.org/en-US/docs/Web/API/FileSystemDirectoryHandle/keys
- */
- keys() {
- return tslib_1.__asyncGenerator(this, arguments, function* keys_1() {
- const list = yield tslib_1.__await(this.fs.promises.readdir(this.__path));
- for (const name of list)
- yield yield tslib_1.__await('' + name);
- });
- }
- /**
- * @see https://developer.mozilla.org/en-US/docs/Web/API/FileSystemDirectoryHandle/entries
- */
- entries() {
- return tslib_1.__asyncGenerator(this, arguments, function* entries_1() {
- const { __path: path, fs, ctx } = this;
- const list = yield tslib_1.__await(fs.promises.readdir(path, { withFileTypes: true }));
- for (const d of list) {
- const dirent = d;
- const name = dirent.name + '';
- const newPath = path + name;
- if (dirent.isDirectory())
- yield yield tslib_1.__await([name, new NodeFileSystemDirectoryHandle(fs, newPath, ctx)]);
- else if (dirent.isFile())
- yield yield tslib_1.__await([name, new NodeFileSystemFileHandle_1.NodeFileSystemFileHandle(fs, newPath, ctx)]);
- }
- });
- }
- /**
- * Returns a new array iterator containing the values for each index in the
- * {@link FileSystemDirectoryHandle} object.
- *
- * @see https://developer.mozilla.org/en-US/docs/Web/API/FileSystemDirectoryHandle/values
- */
- values() {
- return tslib_1.__asyncGenerator(this, arguments, function* values_1() {
- var _a, e_1, _b, _c;
- try {
- for (var _d = true, _e = tslib_1.__asyncValues(this.entries()), _f; _f = yield tslib_1.__await(_e.next()), _a = _f.done, !_a; _d = true) {
- _c = _f.value;
- _d = false;
- const [, value] = _c;
- yield yield tslib_1.__await(value);
- }
- }
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
- finally {
- try {
- if (!_d && !_a && (_b = _e.return)) yield tslib_1.__await(_b.call(_e));
- }
- finally { if (e_1) throw e_1.error; }
- }
- });
- }
- /**
- * Returns a {@link NodeFileSystemDirectoryHandle} for a subdirectory with the specified
- * name within the directory handle on which the method is called.
- *
- * @see https://developer.mozilla.org/en-US/docs/Web/API/FileSystemDirectoryHandle/getDirectoryHandle
- * @param name A string representing the {@link NodeFileSystemHandle} name of
- * the subdirectory you wish to retrieve.
- * @param options An optional object containing options for the retrieved
- * subdirectory.
- */
- async getDirectoryHandle(name, options) {
- (0, util_1.assertName)(name, 'getDirectoryHandle', 'FileSystemDirectoryHandle');
- const filename = this.__path + name;
- try {
- const stats = await this.fs.promises.stat(filename);
- if (!stats.isDirectory())
- throw (0, util_1.newTypeMismatchError)();
- return new NodeFileSystemDirectoryHandle(this.fs, filename, this.ctx);
- }
- catch (error) {
- if (error instanceof DOMException)
- throw error;
- if (error && typeof error === 'object') {
- switch (error.code) {
- case 'ENOENT': {
- if (options === null || options === void 0 ? void 0 : options.create) {
- (0, util_1.assertCanWrite)(this.ctx.mode);
- await this.fs.promises.mkdir(filename);
- return new NodeFileSystemDirectoryHandle(this.fs, filename, this.ctx);
- }
- throw (0, util_1.newNotFoundError)();
- }
- case 'EPERM':
- case 'EACCES':
- throw (0, util_1.newNotAllowedError)();
- }
- }
- throw error;
- }
- }
- /**
- * Returns a {@link FileSystemFileHandle} for a file with the specified name,
- * within the directory the method is called.
- *
- * @see https://developer.mozilla.org/en-US/docs/Web/API/FileSystemDirectoryHandle/getFileHandle
- * @param name A string representing the {@link NodeFileSystemHandle} name of
- * the file you wish to retrieve.
- * @param options An optional object containing options for the retrieved file.
- */
- async getFileHandle(name, options) {
- (0, util_1.assertName)(name, 'getFileHandle', 'FileSystemDirectoryHandle');
- const filename = this.__path + name;
- try {
- const stats = await this.fs.promises.stat(filename);
- if (!stats.isFile())
- throw (0, util_1.newTypeMismatchError)();
- return new NodeFileSystemFileHandle_1.NodeFileSystemFileHandle(this.fs, filename, this.ctx);
- }
- catch (error) {
- if (error instanceof DOMException)
- throw error;
- if (error && typeof error === 'object') {
- switch (error.code) {
- case 'ENOENT': {
- if (options === null || options === void 0 ? void 0 : options.create) {
- (0, util_1.assertCanWrite)(this.ctx.mode);
- await this.fs.promises.writeFile(filename, '');
- return new NodeFileSystemFileHandle_1.NodeFileSystemFileHandle(this.fs, filename, this.ctx);
- }
- throw (0, util_1.newNotFoundError)();
- }
- case 'EPERM':
- case 'EACCES':
- throw (0, util_1.newNotAllowedError)();
- }
- }
- throw error;
- }
- }
- /**
- * Attempts to remove an entry if the directory handle contains a file or
- * directory called the name specified.
- *
- * @see https://developer.mozilla.org/en-US/docs/Web/API/FileSystemDirectoryHandle/removeEntry
- * @param name A string representing the {@link FileSystemHandle} name of the
- * entry you wish to remove.
- * @param options An optional object containing options.
- */
- async removeEntry(name, { recursive = false } = {}) {
- (0, util_1.assertCanWrite)(this.ctx.mode);
- (0, util_1.assertName)(name, 'removeEntry', 'FileSystemDirectoryHandle');
- const filename = this.__path + name;
- const promises = this.fs.promises;
- try {
- const stats = await promises.stat(filename);
- if (stats.isFile()) {
- await promises.unlink(filename);
- }
- else if (stats.isDirectory()) {
- await promises.rmdir(filename, { recursive });
- }
- else
- throw (0, util_1.newTypeMismatchError)();
- }
- catch (error) {
- if (error instanceof DOMException)
- throw error;
- if (error && typeof error === 'object') {
- switch (error.code) {
- case 'ENOENT': {
- throw (0, util_1.newNotFoundError)();
- }
- case 'EPERM':
- case 'EACCES':
- throw (0, util_1.newNotAllowedError)();
- case 'ENOTEMPTY':
- throw new DOMException('The object can not be modified in this way.', 'InvalidModificationError');
- }
- }
- throw error;
- }
- }
- /**
- * The `resolve()` method of the {@link FileSystemDirectoryHandle} interface
- * returns an {@link Array} of directory names from the parent handle to the specified
- * child entry, with the name of the child entry as the last array item.
- *
- * @see https://developer.mozilla.org/en-US/docs/Web/API/FileSystemDirectoryHandle/resolve
- * @param possibleDescendant The {@link NodeFileSystemFileHandle} from which
- * to return the relative path.
- */
- async resolve(possibleDescendant) {
- if (possibleDescendant instanceof NodeFileSystemDirectoryHandle ||
- possibleDescendant instanceof NodeFileSystemFileHandle_1.NodeFileSystemFileHandle) {
- const path = this.__path;
- const childPath = possibleDescendant.__path;
- if (!childPath.startsWith(path))
- return null;
- let relative = childPath.slice(path.length);
- if (relative === '')
- return [];
- const separator = this.ctx.separator;
- if (relative[0] === separator)
- relative = relative.slice(1);
- return relative.split(separator);
- }
- return null;
- }
- }
- exports.NodeFileSystemDirectoryHandle = NodeFileSystemDirectoryHandle;
- //# sourceMappingURL=NodeFileSystemDirectoryHandle.js.map
|