UNPKG

react-native-fast-io

Version:

Modern IO for React Native, built on top of Nitro and Web standards

104 lines (102 loc) 2.89 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.File = void 0; exports.showDirectoryPicker = showDirectoryPicker; exports.showOpenFilePicker = showOpenFilePicker; exports.showSaveFilePicker = showSaveFilePicker; var _fsNitro = require("../native/fs.nitro.js"); var _streamsNitro = require("../native/streams.nitro.js"); var _blob = require("./blob.js"); var _streams = require("./streams.js"); class File extends _blob.Blob { constructor(fileBits, name, options = {}) { super(fileBits, options); this.name = name; this.lastModified = options.lastModified ?? Date.now(); } get [Symbol.toStringTag]() { return 'File'; } get webkitRelativePath() { throw new Error('Not implemented'); } } exports.File = File; class NativeFile extends File { #path; constructor({ name, path, type, size, lastModified }) { super([], name, { lastModified, type }); this.#path = path; this._size = size; } stream() { const nativeStream = _streamsNitro.StreamFactory.createInputStream(this.#path); return (0, _streams.toReadableStream)(nativeStream); } get [Symbol.toStringTag]() { return 'File'; } } class FileSystemFileHandle { kind = 'file'; get name() { return this.#metadata.name; } #metadata; constructor(path) { this.#metadata = _fsNitro.FileSystem.getMetadata(path); } async getFile() { return new NativeFile(this.#metadata); } async createWritable() { throw new Error('Not implemented'); } async isSameEntry(other) { return other instanceof FileSystemFileHandle && this.#metadata.root === other.#metadata.root && this.#metadata.path === other.#metadata.path; } get [Symbol.toStringTag]() { return 'FileSystemFileHandle'; } } async function showOpenFilePicker(options = {}) { const nativePickerOptions = {}; if (options.startIn) { nativePickerOptions.startIn = _fsNitro.FileSystem.getWellKnownDirectoryPath(options.startIn); } if (options.multiple) { nativePickerOptions.multiple = options.multiple; } if (options.types) { nativePickerOptions.extensions = options.types.reduce((acc, type) => { if (!type.accept) { return acc; } return acc.concat(...Object.values(type.accept)); }, []); nativePickerOptions.mimeTypes = options.types.flatMap(type => Object.keys(type.accept || {})); } const paths = await _fsNitro.FileSystem.showOpenFilePicker(nativePickerOptions); return paths.map(path => new FileSystemFileHandle(path)); } // eslint-disable-next-line @typescript-eslint/no-unused-vars function showSaveFilePicker(options) { throw new Error('Not implemented'); } function showDirectoryPicker( // eslint-disable-next-line @typescript-eslint/no-unused-vars options) { throw new Error('Not implemented'); } //# sourceMappingURL=fs.js.map