browserfs
Version:
A filesystem in your browser!
80 lines • 9.77 kB
JavaScript
;
var __extends = (this && this.__extends) || function (d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
var kvfs = require('../generic/key_value_filesystem');
var api_error_1 = require('../core/api_error');
var global = require('../core/global');
var supportsBinaryString = false, binaryEncoding;
try {
global.localStorage.setItem("__test__", String.fromCharCode(0xD800));
supportsBinaryString = global.localStorage.getItem("__test__") === String.fromCharCode(0xD800);
}
catch (e) {
supportsBinaryString = false;
}
binaryEncoding = supportsBinaryString ? 'binary_string' : 'binary_string_ie';
if (!Buffer.isEncoding(binaryEncoding)) {
binaryEncoding = "base64";
}
var LocalStorageStore = (function () {
function LocalStorageStore() {
}
LocalStorageStore.prototype.name = function () {
return 'LocalStorage';
};
LocalStorageStore.prototype.clear = function () {
global.localStorage.clear();
};
LocalStorageStore.prototype.beginTransaction = function (type) {
return new kvfs.SimpleSyncRWTransaction(this);
};
LocalStorageStore.prototype.get = function (key) {
try {
var data = global.localStorage.getItem(key);
if (data !== null) {
return new Buffer(data, binaryEncoding);
}
}
catch (e) {
}
return undefined;
};
LocalStorageStore.prototype.put = function (key, data, overwrite) {
try {
if (!overwrite && global.localStorage.getItem(key) !== null) {
return false;
}
global.localStorage.setItem(key, data.toString(binaryEncoding));
return true;
}
catch (e) {
throw new api_error_1.ApiError(api_error_1.ErrorCode.ENOSPC, "LocalStorage is full.");
}
};
LocalStorageStore.prototype.del = function (key) {
try {
global.localStorage.removeItem(key);
}
catch (e) {
throw new api_error_1.ApiError(api_error_1.ErrorCode.EIO, "Unable to delete key " + key + ": " + e);
}
};
return LocalStorageStore;
}());
exports.LocalStorageStore = LocalStorageStore;
var LocalStorageFileSystem = (function (_super) {
__extends(LocalStorageFileSystem, _super);
function LocalStorageFileSystem() {
_super.call(this, { store: new LocalStorageStore() });
}
LocalStorageFileSystem.isAvailable = function () {
return typeof global.localStorage !== 'undefined';
};
return LocalStorageFileSystem;
}(kvfs.SyncKeyValueFileSystem));
exports.__esModule = true;
exports["default"] = LocalStorageFileSystem;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTG9jYWxTdG9yYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2JhY2tlbmQvTG9jYWxTdG9yYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQU8sSUFBSSxXQUFXLGlDQUFpQyxDQUFDLENBQUM7QUFDekQsMEJBQWtDLG1CQUFtQixDQUFDLENBQUE7QUFDdEQsSUFBTyxNQUFNLFdBQVcsZ0JBQWdCLENBQUMsQ0FBQztBQUsxQyxJQUFJLG9CQUFvQixHQUFZLEtBQUssRUFDdkMsY0FBc0IsQ0FBQztBQUN6QixJQUFJLENBQUM7SUFDSCxNQUFNLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLG9CQUFvQixHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDakcsQ0FBRTtBQUFBLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFWCxvQkFBb0IsR0FBRyxLQUFLLENBQUM7QUFDL0IsQ0FBQztBQUNELGNBQWMsR0FBRyxvQkFBb0IsR0FBRyxlQUFlLEdBQUcsa0JBQWtCLENBQUM7QUFDN0UsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUd2QyxjQUFjLEdBQUcsUUFBUSxDQUFDO0FBQzVCLENBQUM7QUFLRDtJQUNFO0lBQWdCLENBQUM7SUFFVixnQ0FBSSxHQUFYO1FBQ0UsTUFBTSxDQUFDLGNBQWMsQ0FBQztJQUN4QixDQUFDO0lBRU0saUNBQUssR0FBWjtRQUNFLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVNLDRDQUFnQixHQUF2QixVQUF3QixJQUFZO1FBRWxDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRU0sK0JBQUcsR0FBVixVQUFXLEdBQVc7UUFDcEIsSUFBSSxDQUFDO1lBQ0gsSUFBSSxJQUFJLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDNUMsRUFBRSxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQ2xCLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUM7WUFDMUMsQ0FBQztRQUNILENBQUU7UUFBQSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRWIsQ0FBQztRQUVELE1BQU0sQ0FBQyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVNLCtCQUFHLEdBQVYsVUFBVyxHQUFXLEVBQUUsSUFBZ0IsRUFBRSxTQUFrQjtRQUMxRCxJQUFJLENBQUM7WUFDSCxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsSUFBSSxNQUFNLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUU1RCxNQUFNLENBQUMsS0FBSyxDQUFDO1lBQ2YsQ0FBQztZQUNELE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7WUFDaEUsTUFBTSxDQUFDLElBQUksQ0FBQztRQUNkLENBQUU7UUFBQSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ1gsTUFBTSxJQUFJLG9CQUFRLENBQUMscUJBQVMsQ0FBQyxNQUFNLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztRQUNoRSxDQUFDO0lBQ0gsQ0FBQztJQUVNLCtCQUFHLEdBQVYsVUFBVyxHQUFXO1FBQ3BCLElBQUksQ0FBQztZQUNILE1BQU0sQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RDLENBQUU7UUFBQSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ1gsTUFBTSxJQUFJLG9CQUFRLENBQUMscUJBQVMsQ0FBQyxHQUFHLEVBQUUsdUJBQXVCLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQztRQUM5RSxDQUFDO0lBQ0gsQ0FBQztJQUNILHdCQUFDO0FBQUQsQ0FBQyxBQWpERCxJQWlEQztBQWpEWSx5QkFBaUIsb0JBaUQ3QixDQUFBO0FBTUQ7SUFBb0QsMENBQTJCO0lBQzdFO1FBQWdCLGtCQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksaUJBQWlCLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFBQyxDQUFDO0lBQzlDLGtDQUFXLEdBQXpCO1FBQ0UsTUFBTSxDQUFDLE9BQU8sTUFBTSxDQUFDLFlBQVksS0FBSyxXQUFXLENBQUM7SUFDcEQsQ0FBQztJQUNILDZCQUFDO0FBQUQsQ0FBQyxBQUxELENBQW9ELElBQUksQ0FBQyxzQkFBc0IsR0FLOUU7QUFMRDsyQ0FLQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGt2ZnMgPSByZXF1aXJlKCcuLi9nZW5lcmljL2tleV92YWx1ZV9maWxlc3lzdGVtJyk7XG5pbXBvcnQge0FwaUVycm9yLCBFcnJvckNvZGV9IGZyb20gJy4uL2NvcmUvYXBpX2Vycm9yJztcbmltcG9ydCBnbG9iYWwgPSByZXF1aXJlKCcuLi9jb3JlL2dsb2JhbCcpO1xuXG4vLyBTb21lIHZlcnNpb25zIG9mIEZGIGFuZCBhbGwgdmVyc2lvbnMgb2YgSUUgZG8gbm90IHN1cHBvcnQgdGhlIGZ1bGwgcmFuZ2Ugb2Zcbi8vIDE2LWJpdCBudW1iZXJzIGVuY29kZWQgYXMgY2hhcmFjdGVycywgYXMgdGhleSBlbmZvcmNlIFVURi0xNiByZXN0cmljdGlvbnMuXG4vLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzExMTcwNzE2L2FyZS10aGVyZS1hbnktY2hhcmFjdGVycy10aGF0LWFyZS1ub3QtYWxsb3dlZC1pbi1sb2NhbHN0b3JhZ2UvMTExNzM2NzMjMTExNzM2NzNcbnZhciBzdXBwb3J0c0JpbmFyeVN0cmluZzogYm9vbGVhbiA9IGZhbHNlLFxuICBiaW5hcnlFbmNvZGluZzogc3RyaW5nO1xudHJ5IHtcbiAgZ2xvYmFsLmxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiX190ZXN0X19cIiwgU3RyaW5nLmZyb21DaGFyQ29kZSgweEQ4MDApKTtcbiAgc3VwcG9ydHNCaW5hcnlTdHJpbmcgPSBnbG9iYWwubG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJfX3Rlc3RfX1wiKSA9PT0gU3RyaW5nLmZyb21DaGFyQ29kZSgweEQ4MDApO1xufSBjYXRjaCAoZSkge1xuICAvLyBJRSB0aHJvd3MgYW4gZXhjZXB0aW9uLlxuICBzdXBwb3J0c0JpbmFyeVN0cmluZyA9IGZhbHNlO1xufVxuYmluYXJ5RW5jb2RpbmcgPSBzdXBwb3J0c0JpbmFyeVN0cmluZyA/ICdiaW5hcnlfc3RyaW5nJyA6ICdiaW5hcnlfc3RyaW5nX2llJztcbmlmICghQnVmZmVyLmlzRW5jb2RpbmcoYmluYXJ5RW5jb2RpbmcpKSB7XG4gIC8vIEZhbGxiYWNrIGZvciBub24gQnJvd3NlckZTIGltcGxlbWVudGF0aW9ucyBvZiBidWZmZXIgdGhhdCBsYWNrIGFcbiAgLy8gYmluYXJ5X3N0cmluZyBmb3JtYXQuXG4gIGJpbmFyeUVuY29kaW5nID0gXCJiYXNlNjRcIjtcbn1cblxuLyoqXG4gKiBBIHN5bmNocm9ub3VzIGtleS12YWx1ZSBzdG9yZSBiYWNrZWQgYnkgbG9jYWxTdG9yYWdlLlxuICovXG5leHBvcnQgY2xhc3MgTG9jYWxTdG9yYWdlU3RvcmUgaW1wbGVtZW50cyBrdmZzLlN5bmNLZXlWYWx1ZVN0b3JlLCBrdmZzLlNpbXBsZVN5bmNTdG9yZSB7XG4gIGNvbnN0cnVjdG9yKCkgeyB9XG5cbiAgcHVibGljIG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ0xvY2FsU3RvcmFnZSc7XG4gIH1cblxuICBwdWJsaWMgY2xlYXIoKTogdm9pZCB7XG4gICAgZ2xvYmFsLmxvY2FsU3RvcmFnZS5jbGVhcigpO1xuICB9XG5cbiAgcHVibGljIGJlZ2luVHJhbnNhY3Rpb24odHlwZTogc3RyaW5nKToga3Zmcy5TeW5jS2V5VmFsdWVSV1RyYW5zYWN0aW9uIHtcbiAgICAvLyBObyBuZWVkIHRvIGRpZmZlcmVudGlhdGUuXG4gICAgcmV0dXJuIG5ldyBrdmZzLlNpbXBsZVN5bmNSV1RyYW5zYWN0aW9uKHRoaXMpO1xuICB9XG5cbiAgcHVibGljIGdldChrZXk6IHN0cmluZyk6IE5vZGVCdWZmZXIge1xuICAgIHRyeSB7XG4gICAgICB2YXIgZGF0YSA9IGdsb2JhbC5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpO1xuICAgICAgaWYgKGRhdGEgIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBCdWZmZXIoZGF0YSwgYmluYXJ5RW5jb2RpbmcpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcblxuICAgIH1cbiAgICAvLyBLZXkgZG9lc24ndCBleGlzdCwgb3IgYSBmYWlsdXJlIG9jY3VycmVkLlxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgcHV0KGtleTogc3RyaW5nLCBkYXRhOiBOb2RlQnVmZmVyLCBvdmVyd3JpdGU6IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgaWYgKCFvdmVyd3JpdGUgJiYgZ2xvYmFsLmxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSkgIT09IG51bGwpIHtcbiAgICAgICAgLy8gRG9uJ3Qgd2FudCB0byBvdmVyd3JpdGUgdGhlIGtleSFcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgZ2xvYmFsLmxvY2FsU3RvcmFnZS5zZXRJdGVtKGtleSwgZGF0YS50b1N0cmluZyhiaW5hcnlFbmNvZGluZykpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEFwaUVycm9yKEVycm9yQ29kZS5FTk9TUEMsIFwiTG9jYWxTdG9yYWdlIGlzIGZ1bGwuXCIpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBkZWwoa2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgZ2xvYmFsLmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGtleSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEFwaUVycm9yKEVycm9yQ29kZS5FSU8sIFwiVW5hYmxlIHRvIGRlbGV0ZSBrZXkgXCIgKyBrZXkgKyBcIjogXCIgKyBlKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBBIHN5bmNocm9ub3VzIGZpbGUgc3lzdGVtIGJhY2tlZCBieSBsb2NhbFN0b3JhZ2UuIENvbm5lY3RzIG91clxuICogTG9jYWxTdG9yYWdlU3RvcmUgdG8gb3VyIFN5bmNLZXlWYWx1ZUZpbGVTeXN0ZW0uXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvY2FsU3RvcmFnZUZpbGVTeXN0ZW0gZXh0ZW5kcyBrdmZzLlN5bmNLZXlWYWx1ZUZpbGVTeXN0ZW0ge1xuICBjb25zdHJ1Y3RvcigpIHsgc3VwZXIoeyBzdG9yZTogbmV3IExvY2FsU3RvcmFnZVN0b3JlKCkgfSk7IH1cbiAgcHVibGljIHN0YXRpYyBpc0F2YWlsYWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIGdsb2JhbC5sb2NhbFN0b3JhZ2UgIT09ICd1bmRlZmluZWQnO1xuICB9XG59XG4iXX0=