From 2d8bd00d6e9e7190ae3213f6c4087f2fd73ded0c Mon Sep 17 00:00:00 2001 From: Kurt Thiemann Date: Thu, 6 Feb 2025 17:50:01 +0100 Subject: [PATCH] make memory file system element operations async --- package.json | 2 +- .../Memory/MemoryFileSystemDirectory.js | 20 +++++----- src/FileSystem/Memory/MemoryFileSystemFile.js | 4 +- src/FileSystem/MemoryFileSystem.js | 38 +++++++++---------- 4 files changed, 32 insertions(+), 32 deletions(-) diff --git a/package.json b/package.json index 6d0c00b..d140155 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cm-spyglass", - "version": "1.0.0", + "version": "1.1.0", "exports": { ".": "./index.js", "./src/Dependency/VanillaMcDocDependency": "./src/Dependency/VanillaMcDocDependency.js" diff --git a/src/FileSystem/Memory/MemoryFileSystemDirectory.js b/src/FileSystem/Memory/MemoryFileSystemDirectory.js index c35fd92..72900ee 100644 --- a/src/FileSystem/Memory/MemoryFileSystemDirectory.js +++ b/src/FileSystem/Memory/MemoryFileSystemDirectory.js @@ -6,41 +6,41 @@ export default class MemoryFileSystemDirectory extends MemoryFileSystemEntry { /** * @param {string} name * @param {MemoryFileSystemEntry} entry - * @return {this} + * @return {Promise} */ - addEntry(name, entry) { + async addEntry(name, entry) { this.entries.set(name, entry); return this; } /** * @param {string} name - * @return {?MemoryFileSystemEntry} + * @return {Promise} */ - getEntry(name) { + async getEntry(name) { return this.entries.get(name) ?? null; } /** - * @return {IterableIterator<[string, MemoryFileSystemEntry]>} + * @return {Promise>} */ - getEntries() { + async getEntries() { return this.entries.entries(); } /** * @param {string} name - * @return {boolean} + * @return {Promise} */ - hasEntry(name) { + async hasEntry(name) { return this.entries.has(name); } /** * @param {string} name - * @return {this} + * @return {Promise} */ - removeEntry(name) { + async removeEntry(name) { this.entries.delete(name); return this; } diff --git a/src/FileSystem/Memory/MemoryFileSystemFile.js b/src/FileSystem/Memory/MemoryFileSystemFile.js index f031889..47dd7f5 100644 --- a/src/FileSystem/Memory/MemoryFileSystemFile.js +++ b/src/FileSystem/Memory/MemoryFileSystemFile.js @@ -12,9 +12,9 @@ export default class MemoryFileSystemFile extends MemoryFileSystemEntry { } /** - * @return {Uint8Array} + * @return {Promise} */ - getContent() { + async getContent() { return this.content; } } diff --git a/src/FileSystem/MemoryFileSystem.js b/src/FileSystem/MemoryFileSystem.js index aa89901..ca12bf3 100644 --- a/src/FileSystem/MemoryFileSystem.js +++ b/src/FileSystem/MemoryFileSystem.js @@ -29,9 +29,9 @@ export default class MemoryFileSystem { /** * @param location * @param {boolean} parent If true, return the parent directory of the entry - * @return {MemoryFileSystemEntry} + * @return {Promise} */ - findEntry(location, parent = false) { + async findEntry(location, parent = false) { let parts = this.getPathParts(location); if (parent) { @@ -48,7 +48,7 @@ export default class MemoryFileSystem { throw new Error(`ENOTDIR: ${location}`); } - current = current.getEntry(part); + current = await current.getEntry(part); if (current === null) { throw new Error(`ENOENT: ${location}`); } @@ -75,10 +75,10 @@ export default class MemoryFileSystem { continue; } - let next = current.getEntry(part); + let next = await current.getEntry(part); if (next === null) { next = new MemoryFileSystemDirectory(); - current.addEntry(part, next); + await current.addEntry(part, next); } else if (!(next instanceof MemoryFileSystemDirectory)) { throw new Error(`EEXIST: ${location}`); } @@ -87,30 +87,30 @@ export default class MemoryFileSystem { } } - let parent = this.findEntry(location, true); + let parent = await this.findEntry(location, true); let basename = parts.pop(); if (!(parent instanceof MemoryFileSystemDirectory)) { throw new Error(`ENOTDIR: ${location}`); } - if (parent.hasEntry(basename)) { + if (await parent.hasEntry(basename)) { throw new Error(`EEXIST: ${location}`); } - parent.addEntry(basename, new MemoryFileSystemDirectory()); + await parent.addEntry(basename, new MemoryFileSystemDirectory()); } /** * @inheritDoc */ async readdir(location) { - let directory = this.findEntry(location); + let directory = await this.findEntry(location); if (!(directory instanceof MemoryFileSystemDirectory)) { throw new Error(`ENOTDIR: ${location}`); } let result = []; - for (let [name, entry] of directory.getEntries()) { + for (let [name, entry] of await directory.getEntries()) { let isDirectory = entry instanceof MemoryFileSystemDirectory; result.push({ name: name, @@ -127,12 +127,12 @@ export default class MemoryFileSystem { * @inheritDoc */ async readFile(location) { - let entry = this.findEntry(location); + let entry = await this.findEntry(location); if (!(entry instanceof MemoryFileSystemFile)) { throw new Error(`EISDIR: ${location}`); } - return entry.getContent(); + return await entry.getContent(); } /** @@ -146,7 +146,7 @@ export default class MemoryFileSystem { * @inheritDoc */ async stat(location) { - let entry = this.findEntry(location); + let entry = await this.findEntry(location); let isDirectory = entry instanceof MemoryFileSystemDirectory; return { @@ -160,13 +160,13 @@ export default class MemoryFileSystem { */ async unlink(location) { let parts = this.getPathParts(location); - let parent = this.findEntry(location, true); + let parent = await this.findEntry(location, true); let basename = parts.pop(); - if (!(parent instanceof MemoryFileSystemDirectory) || !parent.hasEntry(basename)) { + if (!(parent instanceof MemoryFileSystemDirectory) || !await parent.hasEntry(basename)) { throw new Error(`ENOENT: ${location}`); } - parent.removeEntry(basename); + await parent.removeEntry(basename); } /** @@ -181,17 +181,17 @@ export default class MemoryFileSystem { */ async writeFile(location, data, _options) { let parts = this.getPathParts(location); - let parent = this.findEntry(location, true); + let parent = await this.findEntry(location, true); let basename = parts.pop(); if (!(parent instanceof MemoryFileSystemDirectory)) { throw new Error(`ENOENT: ${location}`); } - if (parent.hasEntry(basename) && !(parent.getEntry(basename) instanceof MemoryFileSystemFile)) { + if (await parent.hasEntry(basename) && !(await parent.getEntry(basename) instanceof MemoryFileSystemFile)) { throw new Error(`EISDIR: ${location}`); } - parent.addEntry(basename, new MemoryFileSystemFile(data)); + await parent.addEntry(basename, new MemoryFileSystemFile(data)); } }