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
JavaScript
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
;