@ionic-native/file
Version:
Ionic Native - Native plugins for ionic apps
707 lines (702 loc) • 26.9 kB
JavaScript
'use strict';
Object.defineProperty(exports, '__esModule', { value: true });
var tslib = require('tslib');
var core$1 = require('@angular/core');
var core = require('@ionic-native/core');
var File = /** @class */ (function (_super) {
tslib.__extends(File, _super);
function File() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.cordovaFileError = {
1: 'NOT_FOUND_ERR',
2: 'SECURITY_ERR',
3: 'ABORT_ERR',
4: 'NOT_READABLE_ERR',
5: 'ENCODING_ERR',
6: 'NO_MODIFICATION_ALLOWED_ERR',
7: 'INVALID_STATE_ERR',
8: 'SYNTAX_ERR',
9: 'INVALID_MODIFICATION_ERR',
10: 'QUOTA_EXCEEDED_ERR',
11: 'TYPE_MISMATCH_ERR',
12: 'PATH_EXISTS_ERR',
13: 'WRONG_ENTRY_TYPE',
14: 'DIR_READ_ERR',
};
return _this;
}
File.prototype.getFreeDiskSpace = function () {
var _this = this;
return (function () {
if (core.checkAvailability(_this) === true) {
return core.getPromise(function (resolve, reject) {
cordova.exec(resolve, reject, 'File', 'getFreeDiskSpace', []);
});
}
})();
};
File.prototype.checkDir = function (path, dir) {
var _this = this;
return (function () {
if (core.checkAvailability(_this) === true) {
if (/^\//.test(dir)) {
var err = new FileError(5);
err.message = 'directory cannot start with /';
return Promise.reject(err);
}
var fullPath = path + dir;
return _this.resolveDirectoryUrl(fullPath).then(function () {
return true;
});
}
})();
};
File.prototype.createDir = function (path, dirName, replace) {
var _this = this;
return (function () {
if (core.checkAvailability(_this) === true) {
if (/^\//.test(dirName)) {
var err = new FileError(5);
err.message = 'directory cannot start with /';
return Promise.reject(err);
}
var options = {
create: true,
};
if (!replace) {
options.exclusive = true;
}
return _this.resolveDirectoryUrl(path).then(function (fse) {
return _this.getDirectory(fse, dirName, options);
});
}
})();
};
File.prototype.removeDir = function (path, dirName) {
var _this = this;
return (function () {
if (core.checkAvailability(_this) === true) {
if (/^\//.test(dirName)) {
var err = new FileError(5);
err.message = 'directory cannot start with /';
return Promise.reject(err);
}
return _this.resolveDirectoryUrl(path)
.then(function (fse) {
return _this.getDirectory(fse, dirName, { create: false });
})
.then(function (de) {
return _this.remove(de);
});
}
})();
};
File.prototype.moveDir = function (path, dirName, newPath, newDirName) {
var _this = this;
return (function () {
if (core.checkAvailability(_this) === true) {
newDirName = newDirName || dirName;
if (/^\//.test(newDirName)) {
var err = new FileError(5);
err.message = 'directory cannot start with /';
return Promise.reject(err);
}
return _this.resolveDirectoryUrl(path)
.then(function (fse) {
return _this.getDirectory(fse, dirName, { create: false });
})
.then(function (srcde) {
return _this.resolveDirectoryUrl(newPath).then(function (destenation) {
return _this.move(srcde, destenation, newDirName);
});
});
}
})();
};
File.prototype.copyDir = function (path, dirName, newPath, newDirName) {
var _this = this;
return (function () {
if (core.checkAvailability(_this) === true) {
if (/^\//.test(newDirName)) {
var err = new FileError(5);
err.message = 'directory cannot start with /';
return Promise.reject(err);
}
return _this.resolveDirectoryUrl(path)
.then(function (fse) {
return _this.getDirectory(fse, dirName, { create: false });
})
.then(function (srcde) {
return _this.resolveDirectoryUrl(newPath).then(function (deste) {
return _this.copy(srcde, deste, newDirName);
});
});
}
})();
};
File.prototype.listDir = function (path, dirName) {
var _this = this;
return (function () {
if (core.checkAvailability(_this) === true) {
if (/^\//.test(dirName)) {
var err = new FileError(5);
err.message = 'directory cannot start with /';
return Promise.reject(err);
}
return _this.resolveDirectoryUrl(path)
.then(function (fse) {
return _this.getDirectory(fse, dirName, {
create: false,
exclusive: false,
});
})
.then(function (de) {
var reader = de.createReader();
return _this.readEntries(reader);
});
}
})();
};
File.prototype.removeRecursively = function (path, dirName) {
var _this = this;
return (function () {
if (core.checkAvailability(_this) === true) {
if (/^\//.test(dirName)) {
var err = new FileError(5);
err.message = 'directory cannot start with /';
return Promise.reject(err);
}
return _this.resolveDirectoryUrl(path)
.then(function (fse) {
return _this.getDirectory(fse, dirName, { create: false });
})
.then(function (de) {
return _this.rimraf(de);
});
}
})();
};
File.prototype.checkFile = function (path, file) {
var _this = this;
return (function () {
if (core.checkAvailability(_this) === true) {
if (/^\//.test(file)) {
var err = new FileError(5);
err.message = 'file cannot start with /';
return Promise.reject(err);
}
return _this.resolveLocalFilesystemUrl(path + file).then(function (fse) {
if (fse.isFile) {
return true;
}
else {
var err = new FileError(13);
err.message = 'input is not a file';
return Promise.reject(err);
}
});
}
})();
};
File.prototype.createFile = function (path, fileName, replace) {
var _this = this;
return (function () {
if (core.checkAvailability(_this) === true) {
if (/^\//.test(fileName)) {
var err = new FileError(5);
err.message = 'file-name cannot start with /';
return Promise.reject(err);
}
var options = {
create: true,
};
if (!replace) {
options.exclusive = true;
}
return _this.resolveDirectoryUrl(path).then(function (fse) {
return _this.getFile(fse, fileName, options);
});
}
})();
};
File.prototype.removeFile = function (path, fileName) {
var _this = this;
return (function () {
if (core.checkAvailability(_this) === true) {
if (/^\//.test(fileName)) {
var err = new FileError(5);
err.message = 'file-name cannot start with /';
return Promise.reject(err);
}
return _this.resolveDirectoryUrl(path)
.then(function (fse) {
return _this.getFile(fse, fileName, { create: false });
})
.then(function (fe) {
return _this.remove(fe);
});
}
})();
};
File.prototype.writeFile = function (path, fileName, text, options) {
var _this = this;
if (options === void 0) { options = {}; }
return (function () {
if (core.checkAvailability(_this) === true) {
if (/^\//.test(fileName)) {
var err = new FileError(5);
err.message = 'file-name cannot start with /';
return Promise.reject(err);
}
var getFileOpts = {
create: !options.append,
exclusive: !options.replace,
};
return _this.resolveDirectoryUrl(path)
.then(function (directoryEntry) {
return _this.getFile(directoryEntry, fileName, getFileOpts);
})
.then(function (fileEntry) {
return _this.writeFileEntry(fileEntry, text, options);
});
}
})();
};
/**
* Write content to FileEntry.
* @hidden
* Write to an existing file.
* @param {FileEntry} fe file entry object
* @param {string | Blob | ArrayBuffer} text text content or blob to write
* @param {IWriteOptions} options replace file if set to true. See WriteOptions for more information.
* @returns {Promise<FileEntry>} Returns a Promise that resolves to updated file entry or rejects with an error.
*/
File.prototype.writeFileEntry = function (fe, text, options) {
var _this = this;
return this.createWriter(fe)
.then(function (writer) {
if (options.append) {
writer.seek(writer.length);
}
if (options.truncate) {
writer.truncate(options.truncate);
}
return _this.write(writer, text);
})
.then(function () { return fe; });
};
File.prototype.writeExistingFile = function (path, fileName, text) {
var _this = this;
return (function () {
if (core.checkAvailability(_this) === true) {
return _this.writeFile(path, fileName, text, { replace: true });
}
})();
};
File.prototype.readAsText = function (path, file) {
var _this = this;
return (function () {
if (core.checkAvailability(_this) === true) {
return _this.readFile(path, file, 'Text');
}
})();
};
File.prototype.readAsDataURL = function (path, file) {
var _this = this;
return (function () {
if (core.checkAvailability(_this) === true) {
return _this.readFile(path, file, 'DataURL');
}
})();
};
File.prototype.readAsBinaryString = function (path, file) {
var _this = this;
return (function () {
if (core.checkAvailability(_this) === true) {
return _this.readFile(path, file, 'BinaryString');
}
})();
};
File.prototype.readAsArrayBuffer = function (path, file) {
var _this = this;
return (function () {
if (core.checkAvailability(_this) === true) {
return _this.readFile(path, file, 'ArrayBuffer');
}
})();
};
File.prototype.moveFile = function (path, fileName, newPath, newFileName) {
var _this = this;
return (function () {
if (core.checkAvailability(_this) === true) {
newFileName = newFileName || fileName;
if (/^\//.test(newFileName)) {
var err = new FileError(5);
err.message = 'file name cannot start with /';
return Promise.reject(err);
}
return _this.resolveDirectoryUrl(path)
.then(function (fse) {
return _this.getFile(fse, fileName, { create: false });
})
.then(function (srcfe) {
return _this.resolveDirectoryUrl(newPath).then(function (deste) {
return _this.move(srcfe, deste, newFileName);
});
});
}
})();
};
File.prototype.copyFile = function (path, fileName, newPath, newFileName) {
var _this = this;
return (function () {
if (core.checkAvailability(_this) === true) {
newFileName = newFileName || fileName;
if (/^\//.test(newFileName)) {
var err = new FileError(5);
err.message = 'file name cannot start with /';
return Promise.reject(err);
}
return _this.resolveDirectoryUrl(path)
.then(function (fse) {
return _this.getFile(fse, fileName, { create: false });
})
.then(function (srcfe) {
return _this.resolveDirectoryUrl(newPath).then(function (deste) {
return _this.copy(srcfe, deste, newFileName);
});
});
}
})();
};
/**
* @hidden
*/
File.prototype.fillErrorMessage = function (err) {
try {
err.message = this.cordovaFileError[err.code];
}
catch (e) { }
};
File.prototype.resolveLocalFilesystemUrl = function (fileUrl) {
var _this = this;
return (function () {
if (core.checkAvailability(_this) === true) {
return core.getPromise(function (resolve, reject) {
try {
window.resolveLocalFileSystemURL(fileUrl, function (entry) {
resolve(entry);
}, function (err) {
_this.fillErrorMessage(err);
reject(err);
});
}
catch (xc) {
_this.fillErrorMessage(xc);
reject(xc);
}
});
}
})();
};
File.prototype.resolveDirectoryUrl = function (directoryUrl) {
var _this = this;
return (function () {
if (core.checkAvailability(_this) === true) {
return _this.resolveLocalFilesystemUrl(directoryUrl).then(function (de) {
if (de.isDirectory) {
return de;
}
else {
var err = new FileError(13);
err.message = 'input is not a directory';
return Promise.reject(err);
}
});
}
})();
};
File.prototype.getDirectory = function (directoryEntry, directoryName, flags) {
var _this = this;
return (function () {
if (core.checkAvailability(_this) === true) {
return new Promise(function (resolve, reject) {
try {
directoryEntry.getDirectory(directoryName, flags, function (de) {
resolve(de);
}, function (err) {
_this.fillErrorMessage(err);
reject(err);
});
}
catch (xc) {
_this.fillErrorMessage(xc);
reject(xc);
}
});
}
})();
};
File.prototype.getFile = function (directoryEntry, fileName, flags) {
var _this = this;
return (function () {
if (core.checkAvailability(_this) === true) {
return new Promise(function (resolve, reject) {
try {
directoryEntry.getFile(fileName, flags, resolve, function (err) {
_this.fillErrorMessage(err);
reject(err);
});
}
catch (xc) {
_this.fillErrorMessage(xc);
reject(xc);
}
});
}
})();
};
File.prototype.readFile = function (path, file, readAs) {
var _this = this;
if (/^\//.test(file)) {
var err = new FileError(5);
err.message = 'file-name cannot start with /';
return Promise.reject(err);
}
return this.resolveDirectoryUrl(path)
.then(function (directoryEntry) {
return _this.getFile(directoryEntry, file, { create: false });
})
.then(function (fileEntry) {
var reader = new FileReader();
return core.getPromise(function (resolve, reject) {
reader.onloadend = function () {
if (reader.result !== undefined || reader.result !== null) {
resolve(reader.result);
}
else if (reader.error !== undefined || reader.error !== null) {
reject(reader.error);
}
else {
reject({ code: null, message: 'READER_ONLOADEND_ERR' });
}
};
fileEntry.file(function (file) {
reader["readAs" + readAs].call(reader, file);
}, function (error) {
reject(error);
});
});
});
};
/**
* @hidden
*/
File.prototype.remove = function (fe) {
var _this = this;
return new Promise(function (resolve, reject) {
fe.remove(function () {
resolve({ success: true, fileRemoved: fe });
}, function (err) {
_this.fillErrorMessage(err);
reject(err);
});
});
};
/**
* @hidden
*/
File.prototype.move = function (srce, destdir, newName) {
var _this = this;
return new Promise(function (resolve, reject) {
srce.moveTo(destdir, newName, function (deste) {
resolve(deste);
}, function (err) {
_this.fillErrorMessage(err);
reject(err);
});
});
};
/**
* @hidden
*/
File.prototype.copy = function (srce, destdir, newName) {
var _this = this;
return new Promise(function (resolve, reject) {
srce.copyTo(destdir, newName, function (deste) {
resolve(deste);
}, function (err) {
_this.fillErrorMessage(err);
reject(err);
});
});
};
/**
* @hidden
*/
File.prototype.readEntries = function (dr) {
var _this = this;
return new Promise(function (resolve, reject) {
dr.readEntries(function (entries) {
resolve(entries);
}, function (err) {
_this.fillErrorMessage(err);
reject(err);
});
});
};
/**
* @hidden
*/
File.prototype.rimraf = function (de) {
var _this = this;
return new Promise(function (resolve, reject) {
de.removeRecursively(function () {
resolve({ success: true, fileRemoved: de });
}, function (err) {
_this.fillErrorMessage(err);
reject(err);
});
});
};
/**
* @hidden
*/
File.prototype.createWriter = function (fe) {
var _this = this;
return new Promise(function (resolve, reject) {
fe.createWriter(function (writer) {
resolve(writer);
}, function (err) {
_this.fillErrorMessage(err);
reject(err);
});
});
};
/**
* @hidden
*/
File.prototype.write = function (writer, gu) {
if (gu instanceof Blob) {
return this.writeFileInChunks(writer, gu);
}
return new Promise(function (resolve, reject) {
writer.onwriteend = function (evt) {
if (writer.error) {
reject(writer.error);
}
else {
resolve(evt);
}
};
writer.write(gu);
});
};
/**
* @hidden
*/
File.prototype.writeFileInChunks = function (writer, file) {
var BLOCK_SIZE = 1024 * 1024;
var writtenSize = 0;
function writeNextChunk() {
var size = Math.min(BLOCK_SIZE, file.size - writtenSize);
var chunk = file.slice(writtenSize, writtenSize + size);
writtenSize += size;
writer.write(chunk);
}
return core.getPromise(function (resolve, reject) {
writer.onerror = reject;
writer.onwrite = function () {
if (writtenSize < file.size) {
writeNextChunk();
}
else {
resolve();
}
};
writeNextChunk();
});
};
Object.defineProperty(File.prototype, "applicationDirectory", {
get: function () { return core.cordovaPropertyGet(this, "applicationDirectory"); },
set: function (value) { core.cordovaPropertySet(this, "applicationDirectory", value); },
enumerable: false,
configurable: true
});
Object.defineProperty(File.prototype, "applicationStorageDirectory", {
get: function () { return core.cordovaPropertyGet(this, "applicationStorageDirectory"); },
set: function (value) { core.cordovaPropertySet(this, "applicationStorageDirectory", value); },
enumerable: false,
configurable: true
});
Object.defineProperty(File.prototype, "dataDirectory", {
get: function () { return core.cordovaPropertyGet(this, "dataDirectory"); },
set: function (value) { core.cordovaPropertySet(this, "dataDirectory", value); },
enumerable: false,
configurable: true
});
Object.defineProperty(File.prototype, "cacheDirectory", {
get: function () { return core.cordovaPropertyGet(this, "cacheDirectory"); },
set: function (value) { core.cordovaPropertySet(this, "cacheDirectory", value); },
enumerable: false,
configurable: true
});
Object.defineProperty(File.prototype, "externalApplicationStorageDirectory", {
get: function () { return core.cordovaPropertyGet(this, "externalApplicationStorageDirectory"); },
set: function (value) { core.cordovaPropertySet(this, "externalApplicationStorageDirectory", value); },
enumerable: false,
configurable: true
});
Object.defineProperty(File.prototype, "externalDataDirectory", {
get: function () { return core.cordovaPropertyGet(this, "externalDataDirectory"); },
set: function (value) { core.cordovaPropertySet(this, "externalDataDirectory", value); },
enumerable: false,
configurable: true
});
Object.defineProperty(File.prototype, "externalCacheDirectory", {
get: function () { return core.cordovaPropertyGet(this, "externalCacheDirectory"); },
set: function (value) { core.cordovaPropertySet(this, "externalCacheDirectory", value); },
enumerable: false,
configurable: true
});
Object.defineProperty(File.prototype, "externalRootDirectory", {
get: function () { return core.cordovaPropertyGet(this, "externalRootDirectory"); },
set: function (value) { core.cordovaPropertySet(this, "externalRootDirectory", value); },
enumerable: false,
configurable: true
});
Object.defineProperty(File.prototype, "tempDirectory", {
get: function () { return core.cordovaPropertyGet(this, "tempDirectory"); },
set: function (value) { core.cordovaPropertySet(this, "tempDirectory", value); },
enumerable: false,
configurable: true
});
Object.defineProperty(File.prototype, "syncedDataDirectory", {
get: function () { return core.cordovaPropertyGet(this, "syncedDataDirectory"); },
set: function (value) { core.cordovaPropertySet(this, "syncedDataDirectory", value); },
enumerable: false,
configurable: true
});
Object.defineProperty(File.prototype, "documentsDirectory", {
get: function () { return core.cordovaPropertyGet(this, "documentsDirectory"); },
set: function (value) { core.cordovaPropertySet(this, "documentsDirectory", value); },
enumerable: false,
configurable: true
});
Object.defineProperty(File.prototype, "sharedDirectory", {
get: function () { return core.cordovaPropertyGet(this, "sharedDirectory"); },
set: function (value) { core.cordovaPropertySet(this, "sharedDirectory", value); },
enumerable: false,
configurable: true
});
File.pluginName = "File";
File.plugin = "cordova-plugin-file";
File.pluginRef = "cordova.file";
File.repo = "https://github.com/apache/cordova-plugin-file";
File.platforms = ["Android", "Browser", "iOS", "macOS", "Windows"];
File.decorators = [
{ type: core$1.Injectable }
];
return File;
}(core.IonicNativePlugin));
exports.File = File;