UNPKG

one

Version:

One is a React framework for web, iOS, and Android apps.

1 lines • 22.4 kB
{"version":3,"file":"classes.js","names":[],"sources":["esm/platform/file-system/classes.js"],"sourcesContent":["import { directories, entry, parent, parts, serial, transfer, write } from \"./opfs\";\nimport { PathUtilities } from \"./paths\";\nimport { FileSystemReadableStreamSource, FileSystemWritableSink } from \"./streams\";\nimport { FileMode } from \"./types\";\nimport {\n assertAlgorithm,\n assertByteLength,\n assertDestination,\n assertEncoding,\n assertMode,\n assertOffset,\n assertReadable,\n assertUri,\n assertWritable,\n assertWriteBytes,\n assertWriteContent\n} from \"./validate\";\nfunction unavailable(member) {\n return new Error(`${member} is not available on web`);\n}\nfunction server() {\n return typeof window === \"undefined\";\n}\nfunction toBytes(content) {\n if (content instanceof ArrayBuffer) return new Uint8Array(content);\n if (content.buffer instanceof ArrayBuffer) {\n return new Uint8Array(content.buffer, content.byteOffset, content.byteLength);\n }\n const copy = new Uint8Array(content.byteLength);\n copy.set(content);\n return copy;\n}\nfunction toBase64(bytes) {\n let binary = \"\";\n for (let i = 0; i < bytes.length; i += 32768) {\n binary += String.fromCharCode(...bytes.subarray(i, i + 32768));\n }\n return btoa(binary);\n}\nasync function fileEntry(uri) {\n const handle = await entry(parts(uri));\n if (handle.kind !== \"file\") throw new Error(\"FileSystem: expected a file\");\n return handle;\n}\nasync function readWholeFile(uri) {\n return new Uint8Array(await (await (await fileEntry(uri)).getFile()).arrayBuffer());\n}\nasync function writePositioned(uri, position, data) {\n const handle = await fileEntry(uri);\n const writable = await handle.createWritable({ keepExistingData: true });\n try {\n await writable.write({ type: \"write\", position, data });\n await writable.close();\n } catch (error) {\n await writable.abort().catch(() => {\n });\n throw error;\n }\n}\nclass FileHandle {\n targetUri;\n mode;\n offsetValue = 0;\n closed = false;\n truncatePending;\n appendPending;\n // obtain through File.open().\n constructor(uri, mode = FileMode.ReadWrite) {\n assertUri(uri, \"FileHandle\");\n assertMode(mode, \"FileHandle\");\n this.targetUri = uri;\n this.mode = mode;\n this.truncatePending = mode === FileMode.Truncate;\n this.appendPending = mode === FileMode.Append;\n }\n get offset() {\n if (this.closed) return null;\n return this.offsetValue;\n }\n set offset(value) {\n this.assertOpen(\"offset\");\n assertOffset(value, \"FileHandle.offset\");\n this.offsetValue = value;\n this.appendPending = false;\n }\n get size() {\n if (this.closed) return null;\n throw unavailable(\"FileHandle.size\");\n }\n close() {\n this.closed = true;\n }\n readBytes(length) {\n this.assertOpen(\"readBytes\");\n assertReadable(this.mode, \"FileHandle.readBytes\");\n assertByteLength(length, \"FileHandle.readBytes\");\n if (server()) return Promise.resolve(new Uint8Array());\n return serial(async () => {\n await this.prepare();\n const bytes = await readWholeFile(this.targetUri);\n const slice = bytes.slice(this.offsetValue, this.offsetValue + length);\n this.offsetValue += slice.length;\n return slice;\n });\n }\n readBytesSync(_length) {\n throw unavailable(\"FileHandle.readBytesSync\");\n }\n writeBytes(bytes) {\n this.assertOpen(\"writeBytes\");\n assertWritable(this.mode, \"FileHandle.writeBytes\");\n assertWriteBytes(bytes, \"FileHandle.writeBytes\");\n if (server()) return Promise.resolve();\n const data = toBytes(bytes);\n return serial(async () => {\n await this.prepare();\n let size = 0;\n try {\n size = (await (await fileEntry(this.targetUri)).getFile()).size;\n } catch (error) {\n if (error.name !== \"NotFoundError\") throw error;\n if (this.mode === FileMode.ReadOnly || this.mode === FileMode.ReadWrite) throw error;\n const names = parts(this.targetUri);\n await (await parent(names)).getFileHandle(names.at(-1), { create: true });\n }\n const position = Math.min(this.offsetValue, size);\n await writePositioned(this.targetUri, position, data);\n this.offsetValue = position + data.length;\n });\n }\n writeBytesSync(_bytes) {\n throw unavailable(\"FileHandle.writeBytesSync\");\n }\n async prepare() {\n if (this.truncatePending) {\n this.truncatePending = false;\n this.offsetValue = 0;\n const names = parts(this.targetUri);\n await write(await (await parent(names)).getFileHandle(names.at(-1), { create: true }), \"\");\n } else if (this.appendPending) {\n this.appendPending = false;\n try {\n this.offsetValue = (await (await fileEntry(this.targetUri)).getFile()).size;\n } catch (error) {\n if (error.name !== \"NotFoundError\") throw error;\n this.offsetValue = 0;\n }\n }\n }\n assertOpen(verb) {\n if (this.closed) throw new Error(`FileHandle.${verb}: the handle is closed`);\n }\n}\nfunction resolveDestination(source, destination, verb) {\n assertDestination(destination, verb);\n if (destination instanceof Directory) {\n return PathUtilities.join(destination.uri, source.name);\n }\n if (destination instanceof File) return destination.uri;\n throw new Error(`${verb}: expected a File or Directory destination`);\n}\nasync function relocate(source, to, move, overwrite) {\n if (overwrite && parts(to).length === 1) {\n throw new Error(\"FileSystem: app root directories are protected\");\n }\n if (overwrite) {\n const names = parts(to);\n await (await parent(names)).removeEntry(names.at(-1), { recursive: true }).catch((error) => {\n if (error.name !== \"NotFoundError\") throw error;\n });\n }\n await transfer(source, to, move);\n}\nclass File {\n currentUri;\n constructor(...uris) {\n const joined = PathUtilities.join(...uris);\n assertUri(joined, \"File\");\n this.currentUri = joined;\n }\n get uri() {\n return this.currentUri;\n }\n get name() {\n return PathUtilities.basename(this.currentUri);\n }\n get extension() {\n return PathUtilities.extname(this.currentUri);\n }\n get parentDirectory() {\n return new Directory(PathUtilities.dirname(this.currentUri));\n }\n get exists() {\n throw unavailable(\"File.exists\");\n }\n get size() {\n throw unavailable(\"File.size\");\n }\n get type() {\n throw unavailable(\"File.type\");\n }\n get creationTime() {\n throw unavailable(\"File.creationTime\");\n }\n get lastModified() {\n throw unavailable(\"File.lastModified\");\n }\n text() {\n if (server()) return Promise.resolve(\"\");\n const uri = this.currentUri;\n return serial(async () => (await (await fileEntry(uri)).getFile()).text());\n }\n textSync() {\n throw unavailable(\"File.textSync\");\n }\n bytes() {\n if (server()) return Promise.resolve(new Uint8Array());\n const uri = this.currentUri;\n return serial(() => readWholeFile(uri));\n }\n bytesSync() {\n throw unavailable(\"File.bytesSync\");\n }\n base64() {\n if (server()) return Promise.resolve(\"\");\n return this.bytes().then(toBase64);\n }\n base64Sync() {\n throw unavailable(\"File.base64Sync\");\n }\n async arrayBuffer() {\n return (await this.bytes()).buffer;\n }\n async json() {\n return JSON.parse(await this.text());\n }\n info() {\n throw unavailable(\"File.info\");\n }\n digest(algorithm) {\n assertAlgorithm(algorithm, \"File.digest\");\n if (server()) return Promise.reject(new Error(\"File.digest is not available on the server\"));\n if (algorithm === \"MD5\") {\n return Promise.reject(new Error(\"File.digest: MD5 is not available on web\"));\n }\n if (!globalThis.crypto?.subtle) return Promise.reject(unavailable(\"File.digest\"));\n return this.bytes().then(async (bytes) => {\n const hash = await globalThis.crypto.subtle.digest(algorithm, bytes);\n return Array.from(new Uint8Array(hash)).map((byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n });\n }\n write(content, options) {\n assertWriteContent(content, \"File.write\");\n if (server()) return Promise.resolve();\n const append = options?.append ?? false;\n let data;\n if (typeof content === \"string\") {\n const encoding = options?.encoding ?? \"utf8\";\n assertEncoding(encoding, \"File.write\");\n if (encoding === \"base64\") {\n if (!/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(content)) {\n throw new Error(\"FileSystem: invalid base64 contents\");\n }\n data = Uint8Array.from(atob(content), (char) => char.charCodeAt(0));\n } else {\n data = content;\n }\n } else {\n if (options?.encoding !== void 0) assertEncoding(options.encoding, \"File.write\");\n data = toBytes(content);\n }\n const uri = this.currentUri;\n return serial(async () => {\n if (append) {\n let existing = new Uint8Array();\n try {\n existing = await readWholeFile(uri);\n } catch (error) {\n if (error.name !== \"NotFoundError\") throw error;\n }\n const next = typeof data === \"string\" ? new TextEncoder().encode(data) : data;\n const combined = new Uint8Array(existing.length + next.length);\n combined.set(existing);\n combined.set(next, existing.length);\n data = combined;\n }\n const names = parts(uri);\n await write(await (await parent(names)).getFileHandle(names.at(-1), { create: true }), data);\n });\n }\n writeSync(_content, _options) {\n throw unavailable(\"File.writeSync\");\n }\n create(_options) {\n throw unavailable(\"File.create\");\n }\n delete() {\n throw unavailable(\"File.delete\");\n }\n copy(destination, options) {\n const to = resolveDestination(this, destination, \"File.copy\");\n if (server()) return Promise.resolve();\n const from = this.currentUri;\n return serial(() => relocate(from, to, false, options?.overwrite ?? false));\n }\n copySync(_destination, _options) {\n throw unavailable(\"File.copySync\");\n }\n move(destination, options) {\n const to = resolveDestination(this, destination, \"File.move\");\n if (to === this.currentUri || server()) return Promise.resolve();\n const from = this.currentUri;\n return serial(\n () => relocate(from, to, true, options?.overwrite ?? false).then(() => {\n this.currentUri = to;\n })\n );\n }\n moveSync(_destination, _options) {\n throw unavailable(\"File.moveSync\");\n }\n rename(_newName) {\n throw unavailable(\"File.rename\");\n }\n open(mode = FileMode.ReadWrite) {\n assertMode(mode, \"File.open\");\n return new FileHandle(this.currentUri, mode);\n }\n readableStream() {\n return new ReadableStream(new FileSystemReadableStreamSource(this.open(FileMode.ReadOnly)));\n }\n writableStream() {\n return new WritableStream(new FileSystemWritableSink(this.open(FileMode.WriteOnly)));\n }\n stream() {\n return this.readableStream();\n }\n}\nclass Directory {\n currentUri;\n constructor(...uris) {\n const joined = PathUtilities.join(...uris);\n assertUri(joined, \"Directory\");\n this.currentUri = joined;\n }\n get uri() {\n return this.currentUri;\n }\n get name() {\n return PathUtilities.basename(this.currentUri);\n }\n get parentDirectory() {\n return new Directory(PathUtilities.join(this.currentUri, \"..\"));\n }\n get exists() {\n throw unavailable(\"Directory.exists\");\n }\n get size() {\n throw unavailable(\"Directory.size\");\n }\n list() {\n throw unavailable(\"Directory.list\");\n }\n info() {\n throw unavailable(\"Directory.info\");\n }\n create(_options) {\n throw unavailable(\"Directory.create\");\n }\n createFile(_name, _mimeType) {\n throw unavailable(\"Directory.createFile\");\n }\n createDirectory(_name) {\n throw unavailable(\"Directory.createDirectory\");\n }\n delete() {\n throw unavailable(\"Directory.delete\");\n }\n copy(destination, options) {\n const to = resolveDestination(this, destination, \"Directory.copy\");\n if (server()) return Promise.resolve();\n const from = this.currentUri;\n return serial(() => relocate(from, to, false, options?.overwrite ?? false));\n }\n copySync(_destination, _options) {\n throw unavailable(\"Directory.copySync\");\n }\n move(destination, options) {\n const to = resolveDestination(this, destination, \"Directory.move\");\n if (to === this.currentUri || server()) return Promise.resolve();\n const from = this.currentUri;\n return serial(\n () => relocate(from, to, true, options?.overwrite ?? false).then(() => {\n this.currentUri = to;\n })\n );\n }\n moveSync(_destination, _options) {\n throw unavailable(\"Directory.moveSync\");\n }\n rename(_newName) {\n throw unavailable(\"Directory.rename\");\n }\n}\nclass Paths extends PathUtilities {\n static get cache() {\n return new Directory(directories.cache);\n }\n static get document() {\n return new Directory(directories.documents);\n }\n static get bundle() {\n throw unavailable(\"Paths.bundle\");\n }\n static get totalDiskSpace() {\n throw unavailable(\"Paths.totalDiskSpace\");\n }\n static get availableDiskSpace() {\n throw unavailable(\"Paths.availableDiskSpace\");\n }\n static info(..._uris) {\n throw unavailable(\"Paths.info\");\n }\n}\nexport {\n Directory,\n File,\n FileHandle,\n FileMode,\n Paths\n};\n//# sourceMappingURL=classes.js.map\n"],"mappings":"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"}