Big News: Socket raises $60M Series C at a $1B valuation to secure software supply chains for AI-driven development.Announcement
Sign In

@openhps/localstorage

Package Overview
Dependencies
Maintainers
1
Versions
10
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@openhps/localstorage - npm Package Compare versions

Comparing version
0.1.0-alpha.2
to
0.1.0-alpha.3
+19
dist/cjs/LocalStorageDriver.d.ts
import { DataServiceDriver, FilterQuery, FindOptions } from '@openhps/core';
import { LocalStorageOptions } from './LocalStorageOptions';
export declare class LocalStorageDriver<I, T> extends DataServiceDriver<I, T> {
protected options: LocalStorageOptions;
protected _indexKeys: string[];
protected serialize: (obj: T) => any;
protected deserialize: (obj: any) => T;
protected prefix: string;
constructor(dataType?: new () => T, options?: LocalStorageOptions, serializer?: (obj: T) => any, deserializer?: (obj: any) => T);
count(filter?: FilterQuery<T>): Promise<number>;
private _findAll;
private _findByUID;
findByUID(id: I): Promise<T>;
findOne(query?: FilterQuery<T>, options?: FindOptions): Promise<T>;
findAll(query?: FilterQuery<T>, options?: FindOptions): Promise<T[]>;
insert(id: I, object: T): Promise<T>;
delete(id: I): Promise<void>;
deleteAll(filter?: FilterQuery<T>): Promise<void>;
}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.LocalStorageDriver = void 0;
const core_1 = require("@openhps/core");
const lz_string_1 = require("lz-string");
class LocalStorageDriver extends core_1.DataServiceDriver {
constructor(dataType, options, serializer = (obj) => core_1.DataSerializer.serialize(obj), deserializer = (obj) => core_1.DataSerializer.deserialize(obj)) {
super(dataType);
this._indexKeys = [];
this.options = options || {};
this.options.namespace = this.options.namespace || 'default';
this.options.chunkSize = this.options.chunkSize || 10;
this.prefix = `${this.options.namespace}.${dataType.name}`.toLowerCase();
this.serialize = serializer;
this.deserialize = deserializer;
if (typeof localStorage === 'undefined' || localStorage === null) {
var LocalStorage = require('node-localstorage').LocalStorage;
global.localStorage = new LocalStorage(this.options.namespace);
}
}
count(filter) {
return new Promise((resolve) => {
const items = this._findAll();
if (filter) {
let count = 0;
for (let i = 0; i <= items.length; i += this.options.chunkSize) {
const keys = items.slice(i, i + this.options.chunkSize);
keys.forEach((key) => {
const value = this._findByUID(key);
if (core_1.MemoryQueryEvaluator.evaluate(value, filter)) {
count++;
}
});
}
resolve(count);
}
else {
return items.length;
}
});
}
_findAll() {
return JSON.parse(localStorage.getItem(`${this.prefix}_keys`)) || [];
}
_findByUID(id) {
const compressedStr = localStorage.getItem(`${this.prefix}.${id}`);
const jsonStr = this.options.compress ? lz_string_1.decompressFromUTF16(compressedStr) : compressedStr;
if (jsonStr === null) {
return undefined;
}
return JSON.parse(jsonStr);
}
findByUID(id) {
return new Promise((resolve, reject) => {
const serialized = this._findByUID(id);
if (serialized) {
const obj = core_1.DataSerializer.deserialize(this._findByUID(id));
resolve(obj);
}
else {
reject(`${this.dataType.name} with identifier #${id} not found!`);
}
});
}
findOne(query, options = {}) {
return new Promise((resolve, reject) => {
this.findAll(query, {
limit: 1,
sort: options.sort,
})
.then((results) => {
if (results.length > 0) {
return resolve(results[0]);
}
else {
resolve(undefined);
}
})
.catch(reject);
});
}
findAll(query, options = {}) {
return new Promise((resolve) => {
const items = this._findAll();
options.limit = options.limit || items.length;
let data = [];
for (let i = 0; i <= items.length; i += this.options.chunkSize) {
const keys = items.slice(i, i + this.options.chunkSize);
keys.forEach((key) => {
const value = this._findByUID(key);
if (value && core_1.MemoryQueryEvaluator.evaluate(value, query)) {
data.push(value);
if (!options.sort && data.length >= options.limit) {
return;
}
}
});
}
if (options.sort) {
data = data
.sort((a, b) => options.sort
.map((s) => {
const res1 = core_1.MemoryQueryEvaluator.getValueFromPath(s[1] > 0 ? a : b, s[0])[1];
const res2 = core_1.MemoryQueryEvaluator.getValueFromPath(s[1] > 0 ? b : a, s[0])[1];
if (typeof res1 === 'number') {
return res1 - res2;
}
else if (typeof res1 === 'string') {
return res1.localeCompare(res2);
}
else {
return 0;
}
})
.reduce((a, b) => a + b))
.slice(0, options.limit);
}
data = data.map(this.deserialize);
resolve(data);
});
}
insert(id, object) {
return new Promise((resolve) => {
const serializedStr = JSON.stringify(core_1.DataSerializer.serialize(object));
const compressedStr = this.options.compress ? lz_string_1.compressToUTF16(serializedStr) : serializedStr;
localStorage.setItem(`${this.prefix}.${id}`, compressedStr);
const items = this._findAll();
if (!items.includes(id)) {
items.push(id);
localStorage.setItem(`${this.prefix}_keys`, JSON.stringify(items));
}
resolve(object);
});
}
delete(id) {
return new Promise((resolve) => {
const items = this._findAll();
items.splice(items.indexOf(id), 1);
localStorage.setItem(`${this.prefix}_keys`, JSON.stringify(items));
localStorage.removeItem(`${this.prefix}.${id}`);
resolve();
});
}
deleteAll(filter) {
return new Promise((resolve, reject) => {
const items = this._findAll();
if (filter === undefined) {
Promise.all(items.map((item) => this.delete(item)))
.then(() => resolve())
.catch(reject);
}
else {
for (let i = 0; i <= items.length; i += this.options.chunkSize) {
const keys = items.slice(i, i + this.options.chunkSize);
keys.forEach((key) => {
const value = this._findByUID(key);
if (core_1.MemoryQueryEvaluator.evaluate(value, filter)) {
this.delete(key);
}
});
}
}
resolve();
});
}
}
exports.LocalStorageDriver = LocalStorageDriver;
//# sourceMappingURL=LocalStorageDriver.js.map
{"version":3,"file":"LocalStorageDriver.js","sourceRoot":"","sources":["../../src/LocalStorageDriver.ts"],"names":[],"mappings":"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"}
export interface LocalStorageOptions {
namespace?: string;
chunkSize?: number;
compress?: boolean;
}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
//# sourceMappingURL=LocalStorageOptions.js.map
{"version":3,"file":"LocalStorageOptions.js","sourceRoot":"","sources":["../../src/LocalStorageOptions.ts"],"names":[],"mappings":""}
import { DataServiceDriver, FilterQuery, FindOptions } from '@openhps/core';
import { LocalStorageOptions } from './LocalStorageOptions';
export declare class LocalStorageDriver<I, T> extends DataServiceDriver<I, T> {
protected options: LocalStorageOptions;
protected _indexKeys: string[];
protected serialize: (obj: T) => any;
protected deserialize: (obj: any) => T;
protected prefix: string;
constructor(dataType?: new () => T, options?: LocalStorageOptions, serializer?: (obj: T) => any, deserializer?: (obj: any) => T);
count(filter?: FilterQuery<T>): Promise<number>;
private _findAll;
private _findByUID;
findByUID(id: I): Promise<T>;
findOne(query?: FilterQuery<T>, options?: FindOptions): Promise<T>;
findAll(query?: FilterQuery<T>, options?: FindOptions): Promise<T[]>;
insert(id: I, object: T): Promise<T>;
delete(id: I): Promise<void>;
deleteAll(filter?: FilterQuery<T>): Promise<void>;
}
import { DataSerializer, DataServiceDriver, MemoryQueryEvaluator } from '@openhps/core';
import { compressToUTF16, decompressFromUTF16 } from 'lz-string';
export class LocalStorageDriver extends DataServiceDriver {
constructor(dataType, options, serializer = (obj) => DataSerializer.serialize(obj), deserializer = (obj) => DataSerializer.deserialize(obj)) {
super(dataType);
this._indexKeys = [];
this.options = options || {};
this.options.namespace = this.options.namespace || 'default';
this.options.chunkSize = this.options.chunkSize || 10;
this.prefix = `${this.options.namespace}.${dataType.name}`.toLowerCase();
this.serialize = serializer;
this.deserialize = deserializer;
if (typeof localStorage === 'undefined' || localStorage === null) {
var LocalStorage = require('node-localstorage').LocalStorage;
global.localStorage = new LocalStorage(this.options.namespace);
}
}
count(filter) {
return new Promise((resolve) => {
const items = this._findAll();
if (filter) {
let count = 0;
for (let i = 0; i <= items.length; i += this.options.chunkSize) {
const keys = items.slice(i, i + this.options.chunkSize);
keys.forEach((key) => {
const value = this._findByUID(key);
if (MemoryQueryEvaluator.evaluate(value, filter)) {
count++;
}
});
}
resolve(count);
}
else {
return items.length;
}
});
}
_findAll() {
return JSON.parse(localStorage.getItem(`${this.prefix}_keys`)) || [];
}
_findByUID(id) {
const compressedStr = localStorage.getItem(`${this.prefix}.${id}`);
const jsonStr = this.options.compress ? decompressFromUTF16(compressedStr) : compressedStr;
if (jsonStr === null) {
return undefined;
}
return JSON.parse(jsonStr);
}
findByUID(id) {
return new Promise((resolve, reject) => {
const serialized = this._findByUID(id);
if (serialized) {
const obj = DataSerializer.deserialize(this._findByUID(id));
resolve(obj);
}
else {
reject(`${this.dataType.name} with identifier #${id} not found!`);
}
});
}
findOne(query, options = {}) {
return new Promise((resolve, reject) => {
this.findAll(query, {
limit: 1,
sort: options.sort,
})
.then((results) => {
if (results.length > 0) {
return resolve(results[0]);
}
else {
resolve(undefined);
}
})
.catch(reject);
});
}
findAll(query, options = {}) {
return new Promise((resolve) => {
const items = this._findAll();
options.limit = options.limit || items.length;
let data = [];
for (let i = 0; i <= items.length; i += this.options.chunkSize) {
const keys = items.slice(i, i + this.options.chunkSize);
keys.forEach((key) => {
const value = this._findByUID(key);
if (value && MemoryQueryEvaluator.evaluate(value, query)) {
data.push(value);
if (!options.sort && data.length >= options.limit) {
return;
}
}
});
}
if (options.sort) {
data = data
.sort((a, b) => options.sort
.map((s) => {
const res1 = MemoryQueryEvaluator.getValueFromPath(s[1] > 0 ? a : b, s[0])[1];
const res2 = MemoryQueryEvaluator.getValueFromPath(s[1] > 0 ? b : a, s[0])[1];
if (typeof res1 === 'number') {
return res1 - res2;
}
else if (typeof res1 === 'string') {
return res1.localeCompare(res2);
}
else {
return 0;
}
})
.reduce((a, b) => a + b))
.slice(0, options.limit);
}
data = data.map(this.deserialize);
resolve(data);
});
}
insert(id, object) {
return new Promise((resolve) => {
const serializedStr = JSON.stringify(DataSerializer.serialize(object));
const compressedStr = this.options.compress ? compressToUTF16(serializedStr) : serializedStr;
localStorage.setItem(`${this.prefix}.${id}`, compressedStr);
const items = this._findAll();
if (!items.includes(id)) {
items.push(id);
localStorage.setItem(`${this.prefix}_keys`, JSON.stringify(items));
}
resolve(object);
});
}
delete(id) {
return new Promise((resolve) => {
const items = this._findAll();
items.splice(items.indexOf(id), 1);
localStorage.setItem(`${this.prefix}_keys`, JSON.stringify(items));
localStorage.removeItem(`${this.prefix}.${id}`);
resolve();
});
}
deleteAll(filter) {
return new Promise((resolve, reject) => {
const items = this._findAll();
if (filter === undefined) {
Promise.all(items.map((item) => this.delete(item)))
.then(() => resolve())
.catch(reject);
}
else {
for (let i = 0; i <= items.length; i += this.options.chunkSize) {
const keys = items.slice(i, i + this.options.chunkSize);
keys.forEach((key) => {
const value = this._findByUID(key);
if (MemoryQueryEvaluator.evaluate(value, filter)) {
this.delete(key);
}
});
}
}
resolve();
});
}
}
//# sourceMappingURL=LocalStorageDriver.js.map
{"version":3,"file":"LocalStorageDriver.js","sourceRoot":"","sources":["../../src/LocalStorageDriver.ts"],"names":[],"mappings":"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"}
export interface LocalStorageOptions {
namespace?: string;
chunkSize?: number;
compress?: boolean;
}
export {};
//# sourceMappingURL=LocalStorageOptions.js.map
{"version":3,"file":"LocalStorageOptions.js","sourceRoot":"","sources":["../../src/LocalStorageOptions.ts"],"names":[],"mappings":""}
import { DataSerializer, DataServiceDriver, FilterQuery, MemoryQueryEvaluator, FindOptions } from '@openhps/core';
import { compressToUTF16, decompressFromUTF16 } from 'lz-string';
import { LocalStorageOptions } from './LocalStorageOptions';
export class LocalStorageDriver<I, T> extends DataServiceDriver<I, T> {
protected options: LocalStorageOptions;
protected _indexKeys: string[] = [];
protected serialize: (obj: T) => any;
protected deserialize: (obj: any) => T;
protected prefix: string;
constructor(
dataType?: new () => T,
options?: LocalStorageOptions,
serializer: (obj: T) => any = (obj) => DataSerializer.serialize(obj),
deserializer: (obj: any) => T = (obj) => DataSerializer.deserialize(obj),
) {
super(dataType as unknown as new () => T);
this.options = options || {};
this.options.namespace = this.options.namespace || 'default';
this.options.chunkSize = this.options.chunkSize || 10;
this.prefix = `${this.options.namespace}.${dataType.name}`.toLowerCase();
this.serialize = serializer;
this.deserialize = deserializer;
if (typeof localStorage === 'undefined' || localStorage === null) {
// eslint-disable-next-line
var LocalStorage = require('node-localstorage').LocalStorage;
global.localStorage = new LocalStorage(this.options.namespace);
}
}
count(filter?: FilterQuery<T>): Promise<number> {
return new Promise((resolve) => {
const items: I[] = this._findAll();
if (filter) {
let count = 0;
for (let i = 0; i <= items.length; i += this.options.chunkSize) {
const keys = items.slice(i, i + this.options.chunkSize);
keys.forEach((key) => {
const value = this._findByUID(key);
if (MemoryQueryEvaluator.evaluate(value, filter)) {
count++;
}
});
}
resolve(count);
} else {
return items.length;
}
});
}
private _findAll(): I[] {
return JSON.parse(localStorage.getItem(`${this.prefix}_keys`)) || [];
}
private _findByUID(id: I): any {
const compressedStr = localStorage.getItem(`${this.prefix}.${id}`);
const jsonStr = this.options.compress ? decompressFromUTF16(compressedStr) : compressedStr;
if (jsonStr === null) {
return undefined;
}
return JSON.parse(jsonStr);
}
public findByUID(id: I): Promise<T> {
return new Promise((resolve, reject) => {
const serialized = this._findByUID(id);
if (serialized) {
const obj = DataSerializer.deserialize<T>(this._findByUID(id));
resolve(obj);
} else {
reject(`${this.dataType.name} with identifier #${id} not found!`);
}
});
}
public findOne(query?: FilterQuery<T>, options: FindOptions = {}): Promise<T> {
return new Promise<T>((resolve, reject) => {
this.findAll(query, {
limit: 1,
sort: options.sort,
})
.then((results) => {
if (results.length > 0) {
return resolve(results[0]);
} else {
resolve(undefined);
}
})
.catch(reject);
});
}
public findAll(query?: FilterQuery<T>, options: FindOptions = {}): Promise<T[]> {
return new Promise<T[]>((resolve) => {
const items: I[] = this._findAll();
options.limit = options.limit || items.length;
let data: T[] = [];
for (let i = 0; i <= items.length; i += this.options.chunkSize) {
const keys = items.slice(i, i + this.options.chunkSize);
keys.forEach((key) => {
const value = this._findByUID(key);
if (value && MemoryQueryEvaluator.evaluate(value, query)) {
data.push(value);
if (!options.sort && data.length >= options.limit) {
return;
}
}
});
}
if (options.sort) {
data = data
.sort((a, b) =>
options.sort
.map((s: any) => {
const res1 = MemoryQueryEvaluator.getValueFromPath(s[1] > 0 ? a : b, s[0])[1];
const res2 = MemoryQueryEvaluator.getValueFromPath(s[1] > 0 ? b : a, s[0])[1];
if (typeof res1 === 'number') {
return res1 - res2;
} else if (typeof res1 === 'string') {
return res1.localeCompare(res2);
} else {
return 0;
}
})
.reduce((a: number, b: number) => a + b),
)
.slice(0, options.limit);
}
data = data.map(this.deserialize);
resolve(data);
});
}
public insert(id: I, object: T): Promise<T> {
return new Promise<T>((resolve) => {
const serializedStr = JSON.stringify(DataSerializer.serialize(object));
const compressedStr = this.options.compress ? compressToUTF16(serializedStr) : serializedStr;
localStorage.setItem(`${this.prefix}.${id}`, compressedStr);
const items: I[] = this._findAll();
if (!items.includes(id)) {
items.push(id);
localStorage.setItem(`${this.prefix}_keys`, JSON.stringify(items));
}
resolve(object);
});
}
public delete(id: I): Promise<void> {
return new Promise<void>((resolve) => {
const items: I[] = this._findAll();
items.splice(items.indexOf(id), 1);
localStorage.setItem(`${this.prefix}_keys`, JSON.stringify(items));
localStorage.removeItem(`${this.prefix}.${id}`);
resolve();
});
}
public deleteAll(filter?: FilterQuery<T>): Promise<void> {
return new Promise((resolve, reject) => {
const items: I[] = this._findAll();
if (filter === undefined) {
Promise.all(items.map((item) => this.delete(item)))
.then(() => resolve())
.catch(reject);
} else {
for (let i = 0; i <= items.length; i += this.options.chunkSize) {
const keys = items.slice(i, i + this.options.chunkSize);
keys.forEach((key) => {
const value = this._findByUID(key);
if (MemoryQueryEvaluator.evaluate(value, filter)) {
this.delete(key);
}
});
}
}
resolve();
});
}
}
export interface LocalStorageOptions {
/**
* Namespace
*
* @default default
*/
namespace?: string;
/**
* Chunk size for querying
*
* @default 10
*/
chunkSize?: number;
/**
* Compress data using LZ-based compression
*
* @default false
*/
compress?: boolean;
}
+7
-0

@@ -5,4 +5,11 @@ # Changelog

## 0.1.0-alpha.3 (2021-05-19)
### Features
* release candidate ([78c8374](https://github.com/OpenHPS/openhps-localstorage/commit/78c8374fe140f3e64df607debfa8d191c0e0cc4d))
## [0.1.0-alpha.2](https://github.com/OpenHPS/openhps-localstorage/compare/v0.1.0-alpha.1...v0.1.0-alpha.2) (2021-01-10)
## 0.1.0-alpha.1 (2021-01-10)
+1
-1

@@ -1,1 +0,1 @@

export * from './service';
export * from './LocalStorageDriver';

@@ -13,3 +13,3 @@ "use strict";

Object.defineProperty(exports, "__esModule", { value: true });
__exportStar(require("./service"), exports);
__exportStar(require("./LocalStorageDriver"), exports);
//# sourceMappingURL=index.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,4CAA0B"}
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,uDAAqC"}

@@ -1,1 +0,1 @@

export * from './service';
export * from './LocalStorageDriver';

@@ -1,2 +0,2 @@

export * from './service';
export * from './LocalStorageDriver';
//# sourceMappingURL=index.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC"}
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC"}

@@ -99,6 +99,6 @@ (function webpackUniversalModuleDefinition(root, factory) {

/***/ "./dist/cjs/index.js":
/*!***************************!*\
!*** ./dist/cjs/index.js ***!
\***************************/
/***/ "./dist/cjs/LocalStorageDriver.js":
/*!****************************************!*\
!*** ./dist/cjs/LocalStorageDriver.js ***!
\****************************************/
/*! no static exports found */

@@ -109,28 +109,2 @@ /*! all exports used */

"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __exportStar = (this && this.__exportStar) || function(m, exports) {
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
};
Object.defineProperty(exports, "__esModule", { value: true });
__exportStar(__webpack_require__(/*! ./service */ "./dist/cjs/service/index.js"), exports);
//# sourceMappingURL=index.js.map
/***/ }),
/***/ "./dist/cjs/service/LocalStorageDriver.js":
/*!************************************************!*\
!*** ./dist/cjs/service/LocalStorageDriver.js ***!
\************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
/* WEBPACK VAR INJECTION */(function(global) {

@@ -142,57 +116,127 @@ Object.defineProperty(exports, "__esModule", { value: true });

class LocalStorageDriver extends core_1.DataServiceDriver {
constructor(dataType, namespace = 'default') {
constructor(dataType, options, serializer = (obj) => core_1.DataSerializer.serialize(obj), deserializer = (obj) => core_1.DataSerializer.deserialize(obj)) {
super(dataType);
this._indexKeys = [];
this.namespace = `${namespace}.${dataType.name}`.toLowerCase();
this.options = options || {};
this.options.namespace = this.options.namespace || 'default';
this.options.chunkSize = this.options.chunkSize || 10;
this.prefix = `${this.options.namespace}.${dataType.name}`.toLowerCase();
this.serialize = serializer;
this.deserialize = deserializer;
if (typeof localStorage === 'undefined' || localStorage === null) {
var LocalStorage = __webpack_require__(/*! node-localstorage */ 0).LocalStorage;
global.localStorage = new LocalStorage(namespace);
global.localStorage = new LocalStorage(this.options.namespace);
}
}
createIndex(index) {
count(filter) {
return new Promise((resolve) => {
this._indexKeys.push(index);
resolve();
const items = this._findAll();
if (filter) {
let count = 0;
for (let i = 0; i <= items.length; i += this.options.chunkSize) {
const keys = items.slice(i, i + this.options.chunkSize);
keys.forEach((key) => {
const value = this._findByUID(key);
if (core_1.MemoryQueryEvaluator.evaluate(value, filter)) {
count++;
}
});
}
resolve(count);
}
else {
return items.length;
}
});
}
_createIndexes(id, object) {
this._indexKeys.forEach((key) => {
localStorage.setItem(`${this.namespace}.${key}[]`, null);
});
_findAll() {
return JSON.parse(localStorage.getItem(`${this.prefix}_keys`)) || [];
}
_deleteIndexes(id) {
this._indexKeys.forEach((key) => {
const values = localStorage.getItem(`${this.namespace}.${key}`);
});
_findByUID(id) {
const compressedStr = localStorage.getItem(`${this.prefix}.${id}`);
const jsonStr = this.options.compress ? lz_string_1.decompressFromUTF16(compressedStr) : compressedStr;
if (jsonStr === null) {
return undefined;
}
return JSON.parse(jsonStr);
}
findByUID(id) {
return new Promise((resolve) => {
const compressedStr = localStorage.getItem(`${this.namespace}.uid.${id}`);
const jsonStr = lz_string_1.decompress(compressedStr);
const obj = core_1.DataSerializer.deserialize(JSON.parse(jsonStr));
resolve(obj);
return new Promise((resolve, reject) => {
const serialized = this._findByUID(id);
if (serialized) {
const obj = core_1.DataSerializer.deserialize(this._findByUID(id));
resolve(obj);
}
else {
reject(`${this.dataType.name} with identifier #${id} not found!`);
}
});
}
findOne(query) {
return new Promise((_, reject) => {
reject(new Error(`Not implemented!`));
});
}
findAll(query) {
findOne(query, options = {}) {
return new Promise((resolve, reject) => {
const items = JSON.parse(localStorage.getItem(`${this.namespace}_keys`)) || [];
Promise.all(items.map((item) => this.findByUID(item)))
.then((items) => {
resolve(items);
this.findAll(query, {
limit: 1,
sort: options.sort,
})
.then((results) => {
if (results.length > 0) {
return resolve(results[0]);
}
else {
resolve(undefined);
}
})
.catch(reject);
});
}
findAll(query, options = {}) {
return new Promise((resolve) => {
const items = this._findAll();
options.limit = options.limit || items.length;
let data = [];
for (let i = 0; i <= items.length; i += this.options.chunkSize) {
const keys = items.slice(i, i + this.options.chunkSize);
keys.forEach((key) => {
const value = this._findByUID(key);
if (value && core_1.MemoryQueryEvaluator.evaluate(value, query)) {
data.push(value);
if (!options.sort && data.length >= options.limit) {
return;
}
}
});
}
if (options.sort) {
data = data
.sort((a, b) => options.sort
.map((s) => {
const res1 = core_1.MemoryQueryEvaluator.getValueFromPath(s[1] > 0 ? a : b, s[0])[1];
const res2 = core_1.MemoryQueryEvaluator.getValueFromPath(s[1] > 0 ? b : a, s[0])[1];
if (typeof res1 === 'number') {
return res1 - res2;
}
else if (typeof res1 === 'string') {
return res1.localeCompare(res2);
}
else {
return 0;
}
})
.reduce((a, b) => a + b))
.slice(0, options.limit);
}
data = data.map(this.deserialize);
resolve(data);
});
}
insert(id, object) {
return new Promise((resolve) => {
const serializedStr = JSON.stringify(core_1.DataSerializer.serialize(object));
localStorage.setItem(`${this.namespace}.${id}`, lz_string_1.compress(serializedStr));
const items = JSON.parse(localStorage.getItem(`${this.namespace}_keys`)) || [];
items.push(id);
localStorage.setItem(`${this.namespace}_keys`, JSON.stringify(items));
const compressedStr = this.options.compress ? lz_string_1.compressToUTF16(serializedStr) : serializedStr;
localStorage.setItem(`${this.prefix}.${id}`, compressedStr);
const items = this._findAll();
if (!items.includes(id)) {
items.push(id);
localStorage.setItem(`${this.prefix}_keys`, JSON.stringify(items));
}
resolve(object);

@@ -203,14 +247,29 @@ });

return new Promise((resolve) => {
localStorage.removeItem(`${this.namespace}.${id}`);
const items = this._findAll();
items.splice(items.indexOf(id), 1);
localStorage.setItem(`${this.prefix}_keys`, JSON.stringify(items));
localStorage.removeItem(`${this.prefix}.${id}`);
resolve();
});
}
deleteAll() {
deleteAll(filter) {
return new Promise((resolve, reject) => {
const items = JSON.parse(localStorage.getItem(`${this.namespace}_keys`)) || [];
Promise.all(items.map((item) => this.delete(item)))
.then(() => {
resolve();
})
.catch(reject);
const items = this._findAll();
if (filter === undefined) {
Promise.all(items.map((item) => this.delete(item)))
.then(() => resolve())
.catch(reject);
}
else {
for (let i = 0; i <= items.length; i += this.options.chunkSize) {
const keys = items.slice(i, i + this.options.chunkSize);
keys.forEach((key) => {
const value = this._findByUID(key);
if (core_1.MemoryQueryEvaluator.evaluate(value, filter)) {
this.delete(key);
}
});
}
}
resolve();
});

@@ -221,10 +280,10 @@ }

//# sourceMappingURL=LocalStorageDriver.js.map
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../node_modules/webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js")))
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js")))
/***/ }),
/***/ "./dist/cjs/service/index.js":
/*!***********************************!*\
!*** ./dist/cjs/service/index.js ***!
\***********************************/
/***/ "./dist/cjs/index.js":
/*!***************************!*\
!*** ./dist/cjs/index.js ***!
\***************************/
/*! no static exports found */

@@ -247,3 +306,3 @@ /*! all exports used */

Object.defineProperty(exports, "__esModule", { value: true });
__exportStar(__webpack_require__(/*! ./LocalStorageDriver */ "./dist/cjs/service/LocalStorageDriver.js"), exports);
__exportStar(__webpack_require__(/*! ./LocalStorageDriver */ "./dist/cjs/LocalStorageDriver.js"), exports);
//# sourceMappingURL=index.js.map

@@ -250,0 +309,0 @@

@@ -1,1 +0,1 @@

{"version":3,"sources":["webpack://@openhps/localstorage/webpack/universalModuleDefinition","webpack://@openhps/localstorage/webpack/bootstrap","webpack://@openhps/localstorage/./dist/cjs/index.js","webpack://@openhps/localstorage/./dist/cjs/service/LocalStorageDriver.js","webpack://@openhps/localstorage/./dist/cjs/service/index.js","webpack://@openhps/localstorage/./node_modules/lz-string/libs/lz-string.js","webpack://@openhps/localstorage/(webpack)/buildin/global.js","webpack://@openhps/localstorage/node-localstorage (ignored)","webpack://@openhps/localstorage/external \"@openhps/core\""],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;QCVA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;;;QAGA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA,0CAA0C,gCAAgC;QAC1E;QACA;;QAEA;QACA;QACA;QACA,wDAAwD,kBAAkB;QAC1E;QACA,iDAAiD,cAAc;QAC/D;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA,yCAAyC,iCAAiC;QAC1E,gHAAgH,mBAAmB,EAAE;QACrI;QACA;;QAEA;QACA;QACA;QACA,2BAA2B,0BAA0B,EAAE;QACvD,iCAAiC,eAAe;QAChD;QACA;QACA;;QAEA;QACA,sDAAsD,+DAA+D;;QAErH;QACA;;;QAGA;QACA;;;;;;;;;;;;;;AClFa;AACb;AACA;AACA,kCAAkC,oCAAoC,aAAa,EAAE,EAAE;AACvF,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,8CAA8C,cAAc;AAC5D,aAAa,mBAAO,CAAC,8CAAW;AAChC,iC;;;;;;;;;;;;;ACbA,8CAAa;AACb,8CAA8C,cAAc;AAC5D;AACA,eAAe,mBAAO,CAAC,oCAAe;AACtC,oBAAoB,mBAAO,CAAC,6DAAW;AACvC;AACA;AACA;AACA;AACA,4BAA4B,UAAU,GAAG,cAAc;AACvD;AACA,+BAA+B,mBAAO,CAAC,0BAAmB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,oCAAoC,eAAe,GAAG,IAAI;AAC1D,SAAS;AACT;AACA;AACA;AACA,mDAAmD,eAAe,GAAG,IAAI;AACzE,SAAS;AACT;AACA;AACA;AACA,0DAA0D,eAAe,OAAO,GAAG;AACnF;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,6DAA6D,eAAe;AAC5E;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,oCAAoC,eAAe,GAAG,GAAG;AACzD,6DAA6D,eAAe;AAC5E;AACA,oCAAoC,eAAe;AACnD;AACA,SAAS;AACT;AACA;AACA;AACA,uCAAuC,eAAe,GAAG,GAAG;AAC5D;AACA,SAAS;AACT;AACA;AACA;AACA,6DAA6D,eAAe;AAC5E;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA,8C;;;;;;;;;;;;;;AClFa;AACb;AACA;AACA,kCAAkC,oCAAoC,aAAa,EAAE,EAAE;AACvF,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,8CAA8C,cAAc;AAC5D,aAAa,mBAAO,CAAC,sEAAsB;AAC3C,iC;;;;;;;;;;;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB,oBAAoB;AACtC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,uDAAuD,+BAA+B;AACtF,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,mEAAmE,wDAAwD,EAAE;AAC7H,GAAG;;AAEH;AACA;AACA,qDAAqD,gBAAgB;AACrE,GAAG;;AAEH;AACA;AACA;AACA,2EAA2E,0CAA0C,EAAE;AACvH,GAAG;;AAEH;AACA;AACA;AACA,gDAAgD;;AAEhD,6CAA6C,YAAY;AACzD;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,KAAK;AACL,+CAA+C;AAC/C,0CAA0C,YAAY;AACtD;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;;AAEA;;AAEA,GAAG;;;AAGH;AACA;AACA;AACA,oDAAoD,gCAAgC;AACpF,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,mEAAmE,yDAAyD,EAAE;AAC9H,GAAG;;AAEH;AACA,4DAA4D,aAAa;AACzE,GAAG;AACH;AACA;AACA;AACA,8BAA8B;AAC9B,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,0BAA0B;AAC1C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,sBAAsB,oBAAoB;AAC1C;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA,sBAAsB,MAAM;AAC5B;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,sBAAsB,oBAAoB;AAC1C;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA,sBAAsB,OAAO;AAC7B;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,oBAAoB,oBAAoB;AACxC;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,oBAAoB;AACxC;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,oBAAoB,MAAM;AAC1B;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,oBAAoB,oBAAoB;AACxC;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,kBAAkB,oBAAoB;AACtC;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc,oBAAoB;AAClC;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,2EAA2E,qCAAqC,EAAE;AAClH,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;;AAEhB,eAAe,OAAO;AACtB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;AAED,IAAI,IAA0C;AAC9C,EAAE,mCAAO,aAAa,iBAAiB,EAAE;AAAA,oGAAC;AAC1C,CAAC,MAAM,EAEN;;;;;;;;;;;;;ACpfD;;AAEA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;;AAEA;AACA;AACA,4CAA4C;;AAE5C;;;;;;;;;;;;;ACnBA,e;;;;;;;;;;;;ACAA,2D","file":"web/openhps-localstorage.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"@openhps/core\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"@openhps/localstorage\", [\"@openhps/core\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"@openhps/localstorage\"] = factory(require(\"@openhps/core\"));\n\telse\n\t\troot[\"@openhps/localstorage\"] = factory(root[\"@openhps/core\"]);\n})((typeof self !== 'undefined' ? self : this), function(__WEBPACK_EXTERNAL_MODULE__openhps_core__) {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./dist/cjs/index.js\");\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./service\"), exports);\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.LocalStorageDriver = void 0;\nconst core_1 = require(\"@openhps/core\");\nconst lz_string_1 = require(\"lz-string\");\nclass LocalStorageDriver extends core_1.DataServiceDriver {\n constructor(dataType, namespace = 'default') {\n super(dataType);\n this._indexKeys = [];\n this.namespace = `${namespace}.${dataType.name}`.toLowerCase();\n if (typeof localStorage === 'undefined' || localStorage === null) {\n var LocalStorage = require('node-localstorage').LocalStorage;\n global.localStorage = new LocalStorage(namespace);\n }\n }\n createIndex(index) {\n return new Promise((resolve) => {\n this._indexKeys.push(index);\n resolve();\n });\n }\n _createIndexes(id, object) {\n this._indexKeys.forEach((key) => {\n localStorage.setItem(`${this.namespace}.${key}[]`, null);\n });\n }\n _deleteIndexes(id) {\n this._indexKeys.forEach((key) => {\n const values = localStorage.getItem(`${this.namespace}.${key}`);\n });\n }\n findByUID(id) {\n return new Promise((resolve) => {\n const compressedStr = localStorage.getItem(`${this.namespace}.uid.${id}`);\n const jsonStr = lz_string_1.decompress(compressedStr);\n const obj = core_1.DataSerializer.deserialize(JSON.parse(jsonStr));\n resolve(obj);\n });\n }\n findOne(query) {\n return new Promise((_, reject) => {\n reject(new Error(`Not implemented!`));\n });\n }\n findAll(query) {\n return new Promise((resolve, reject) => {\n const items = JSON.parse(localStorage.getItem(`${this.namespace}_keys`)) || [];\n Promise.all(items.map((item) => this.findByUID(item)))\n .then((items) => {\n resolve(items);\n })\n .catch(reject);\n });\n }\n insert(id, object) {\n return new Promise((resolve) => {\n const serializedStr = JSON.stringify(core_1.DataSerializer.serialize(object));\n localStorage.setItem(`${this.namespace}.${id}`, lz_string_1.compress(serializedStr));\n const items = JSON.parse(localStorage.getItem(`${this.namespace}_keys`)) || [];\n items.push(id);\n localStorage.setItem(`${this.namespace}_keys`, JSON.stringify(items));\n resolve(object);\n });\n }\n delete(id) {\n return new Promise((resolve) => {\n localStorage.removeItem(`${this.namespace}.${id}`);\n resolve();\n });\n }\n deleteAll() {\n return new Promise((resolve, reject) => {\n const items = JSON.parse(localStorage.getItem(`${this.namespace}_keys`)) || [];\n Promise.all(items.map((item) => this.delete(item)))\n .then(() => {\n resolve();\n })\n .catch(reject);\n });\n }\n}\nexports.LocalStorageDriver = LocalStorageDriver;\n//# sourceMappingURL=LocalStorageDriver.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./LocalStorageDriver\"), exports);\n//# sourceMappingURL=index.js.map","// Copyright (c) 2013 Pieroxy <pieroxy@pieroxy.net>\n// This work is free. You can redistribute it and/or modify it\n// under the terms of the WTFPL, Version 2\n// For more information see LICENSE.txt or http://www.wtfpl.net/\n//\n// For more information, the home page:\n// http://pieroxy.net/blog/pages/lz-string/testing.html\n//\n// LZ-based compression algorithm, version 1.4.4\nvar LZString = (function() {\n\n// private property\nvar f = String.fromCharCode;\nvar keyStrBase64 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\nvar keyStrUriSafe = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-$\";\nvar baseReverseDic = {};\n\nfunction getBaseValue(alphabet, character) {\n if (!baseReverseDic[alphabet]) {\n baseReverseDic[alphabet] = {};\n for (var i=0 ; i<alphabet.length ; i++) {\n baseReverseDic[alphabet][alphabet.charAt(i)] = i;\n }\n }\n return baseReverseDic[alphabet][character];\n}\n\nvar LZString = {\n compressToBase64 : function (input) {\n if (input == null) return \"\";\n var res = LZString._compress(input, 6, function(a){return keyStrBase64.charAt(a);});\n switch (res.length % 4) { // To produce valid Base64\n default: // When could this happen ?\n case 0 : return res;\n case 1 : return res+\"===\";\n case 2 : return res+\"==\";\n case 3 : return res+\"=\";\n }\n },\n\n decompressFromBase64 : function (input) {\n if (input == null) return \"\";\n if (input == \"\") return null;\n return LZString._decompress(input.length, 32, function(index) { return getBaseValue(keyStrBase64, input.charAt(index)); });\n },\n\n compressToUTF16 : function (input) {\n if (input == null) return \"\";\n return LZString._compress(input, 15, function(a){return f(a+32);}) + \" \";\n },\n\n decompressFromUTF16: function (compressed) {\n if (compressed == null) return \"\";\n if (compressed == \"\") return null;\n return LZString._decompress(compressed.length, 16384, function(index) { return compressed.charCodeAt(index) - 32; });\n },\n\n //compress into uint8array (UCS-2 big endian format)\n compressToUint8Array: function (uncompressed) {\n var compressed = LZString.compress(uncompressed);\n var buf=new Uint8Array(compressed.length*2); // 2 bytes per character\n\n for (var i=0, TotalLen=compressed.length; i<TotalLen; i++) {\n var current_value = compressed.charCodeAt(i);\n buf[i*2] = current_value >>> 8;\n buf[i*2+1] = current_value % 256;\n }\n return buf;\n },\n\n //decompress from uint8array (UCS-2 big endian format)\n decompressFromUint8Array:function (compressed) {\n if (compressed===null || compressed===undefined){\n return LZString.decompress(compressed);\n } else {\n var buf=new Array(compressed.length/2); // 2 bytes per character\n for (var i=0, TotalLen=buf.length; i<TotalLen; i++) {\n buf[i]=compressed[i*2]*256+compressed[i*2+1];\n }\n\n var result = [];\n buf.forEach(function (c) {\n result.push(f(c));\n });\n return LZString.decompress(result.join(''));\n\n }\n\n },\n\n\n //compress into a string that is already URI encoded\n compressToEncodedURIComponent: function (input) {\n if (input == null) return \"\";\n return LZString._compress(input, 6, function(a){return keyStrUriSafe.charAt(a);});\n },\n\n //decompress from an output of compressToEncodedURIComponent\n decompressFromEncodedURIComponent:function (input) {\n if (input == null) return \"\";\n if (input == \"\") return null;\n input = input.replace(/ /g, \"+\");\n return LZString._decompress(input.length, 32, function(index) { return getBaseValue(keyStrUriSafe, input.charAt(index)); });\n },\n\n compress: function (uncompressed) {\n return LZString._compress(uncompressed, 16, function(a){return f(a);});\n },\n _compress: function (uncompressed, bitsPerChar, getCharFromInt) {\n if (uncompressed == null) return \"\";\n var i, value,\n context_dictionary= {},\n context_dictionaryToCreate= {},\n context_c=\"\",\n context_wc=\"\",\n context_w=\"\",\n context_enlargeIn= 2, // Compensate for the first entry which should not count\n context_dictSize= 3,\n context_numBits= 2,\n context_data=[],\n context_data_val=0,\n context_data_position=0,\n ii;\n\n for (ii = 0; ii < uncompressed.length; ii += 1) {\n context_c = uncompressed.charAt(ii);\n if (!Object.prototype.hasOwnProperty.call(context_dictionary,context_c)) {\n context_dictionary[context_c] = context_dictSize++;\n context_dictionaryToCreate[context_c] = true;\n }\n\n context_wc = context_w + context_c;\n if (Object.prototype.hasOwnProperty.call(context_dictionary,context_wc)) {\n context_w = context_wc;\n } else {\n if (Object.prototype.hasOwnProperty.call(context_dictionaryToCreate,context_w)) {\n if (context_w.charCodeAt(0)<256) {\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n }\n value = context_w.charCodeAt(0);\n for (i=0 ; i<8 ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n } else {\n value = 1;\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1) | value;\n if (context_data_position ==bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = 0;\n }\n value = context_w.charCodeAt(0);\n for (i=0 ; i<16 ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n delete context_dictionaryToCreate[context_w];\n } else {\n value = context_dictionary[context_w];\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n\n\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n // Add wc to the dictionary.\n context_dictionary[context_wc] = context_dictSize++;\n context_w = String(context_c);\n }\n }\n\n // Output the code for w.\n if (context_w !== \"\") {\n if (Object.prototype.hasOwnProperty.call(context_dictionaryToCreate,context_w)) {\n if (context_w.charCodeAt(0)<256) {\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n }\n value = context_w.charCodeAt(0);\n for (i=0 ; i<8 ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n } else {\n value = 1;\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1) | value;\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = 0;\n }\n value = context_w.charCodeAt(0);\n for (i=0 ; i<16 ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n delete context_dictionaryToCreate[context_w];\n } else {\n value = context_dictionary[context_w];\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n\n\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n }\n\n // Mark the end of the stream\n value = 2;\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n\n // Flush the last char\n while (true) {\n context_data_val = (context_data_val << 1);\n if (context_data_position == bitsPerChar-1) {\n context_data.push(getCharFromInt(context_data_val));\n break;\n }\n else context_data_position++;\n }\n return context_data.join('');\n },\n\n decompress: function (compressed) {\n if (compressed == null) return \"\";\n if (compressed == \"\") return null;\n return LZString._decompress(compressed.length, 32768, function(index) { return compressed.charCodeAt(index); });\n },\n\n _decompress: function (length, resetValue, getNextValue) {\n var dictionary = [],\n next,\n enlargeIn = 4,\n dictSize = 4,\n numBits = 3,\n entry = \"\",\n result = [],\n i,\n w,\n bits, resb, maxpower, power,\n c,\n data = {val:getNextValue(0), position:resetValue, index:1};\n\n for (i = 0; i < 3; i += 1) {\n dictionary[i] = i;\n }\n\n bits = 0;\n maxpower = Math.pow(2,2);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n\n switch (next = bits) {\n case 0:\n bits = 0;\n maxpower = Math.pow(2,8);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n c = f(bits);\n break;\n case 1:\n bits = 0;\n maxpower = Math.pow(2,16);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n c = f(bits);\n break;\n case 2:\n return \"\";\n }\n dictionary[3] = c;\n w = c;\n result.push(c);\n while (true) {\n if (data.index > length) {\n return \"\";\n }\n\n bits = 0;\n maxpower = Math.pow(2,numBits);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n\n switch (c = bits) {\n case 0:\n bits = 0;\n maxpower = Math.pow(2,8);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n\n dictionary[dictSize++] = f(bits);\n c = dictSize-1;\n enlargeIn--;\n break;\n case 1:\n bits = 0;\n maxpower = Math.pow(2,16);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n dictionary[dictSize++] = f(bits);\n c = dictSize-1;\n enlargeIn--;\n break;\n case 2:\n return result.join('');\n }\n\n if (enlargeIn == 0) {\n enlargeIn = Math.pow(2, numBits);\n numBits++;\n }\n\n if (dictionary[c]) {\n entry = dictionary[c];\n } else {\n if (c === dictSize) {\n entry = w + w.charAt(0);\n } else {\n return null;\n }\n }\n result.push(entry);\n\n // Add w+entry[0] to the dictionary.\n dictionary[dictSize++] = w + entry.charAt(0);\n enlargeIn--;\n\n w = entry;\n\n if (enlargeIn == 0) {\n enlargeIn = Math.pow(2, numBits);\n numBits++;\n }\n\n }\n }\n};\n return LZString;\n})();\n\nif (typeof define === 'function' && define.amd) {\n define(function () { return LZString; });\n} else if( typeof module !== 'undefined' && module != null ) {\n module.exports = LZString\n}\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","/* (ignored) */","module.exports = __WEBPACK_EXTERNAL_MODULE__openhps_core__;"],"sourceRoot":""}
{"version":3,"sources":["webpack://@openhps/localstorage/webpack/universalModuleDefinition","webpack://@openhps/localstorage/webpack/bootstrap","webpack://@openhps/localstorage/./dist/cjs/LocalStorageDriver.js","webpack://@openhps/localstorage/./dist/cjs/index.js","webpack://@openhps/localstorage/./node_modules/lz-string/libs/lz-string.js","webpack://@openhps/localstorage/(webpack)/buildin/global.js","webpack://@openhps/localstorage/node-localstorage (ignored)","webpack://@openhps/localstorage/external \"@openhps/core\""],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;QCVA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;;;QAGA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA,0CAA0C,gCAAgC;QAC1E;QACA;;QAEA;QACA;QACA;QACA,wDAAwD,kBAAkB;QAC1E;QACA,iDAAiD,cAAc;QAC/D;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA,yCAAyC,iCAAiC;QAC1E,gHAAgH,mBAAmB,EAAE;QACrI;QACA;;QAEA;QACA;QACA;QACA,2BAA2B,0BAA0B,EAAE;QACvD,iCAAiC,eAAe;QAChD;QACA;QACA;;QAEA;QACA,sDAAsD,+DAA+D;;QAErH;QACA;;;QAGA;QACA;;;;;;;;;;;;;;AClFA,8CAAa;AACb,8CAA8C,cAAc;AAC5D;AACA,eAAe,mBAAO,CAAC,oCAAe;AACtC,oBAAoB,mBAAO,CAAC,6DAAW;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,uBAAuB,GAAG,cAAc;AACjE;AACA;AACA;AACA,+BAA+B,mBAAO,CAAC,0BAAmB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,mBAAmB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,kDAAkD,YAAY;AAC9D;AACA;AACA,sDAAsD,YAAY,GAAG,GAAG;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,mBAAmB,oBAAoB,GAAG;AACpE;AACA,SAAS;AACT;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA,2BAA2B,mBAAmB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,oCAAoC,YAAY,GAAG,GAAG;AACtD;AACA;AACA;AACA,wCAAwC,YAAY;AACpD;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,oCAAoC,YAAY;AAChD,uCAAuC,YAAY,GAAG,GAAG;AACzD;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,mBAAmB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,8C;;;;;;;;;;;;;;ACvKa;AACb;AACA;AACA,kCAAkC,oCAAoC,aAAa,EAAE,EAAE;AACvF,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,8CAA8C,cAAc;AAC5D,aAAa,mBAAO,CAAC,8DAAsB;AAC3C,iC;;;;;;;;;;;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB,oBAAoB;AACtC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,uDAAuD,+BAA+B;AACtF,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,mEAAmE,wDAAwD,EAAE;AAC7H,GAAG;;AAEH;AACA;AACA,qDAAqD,gBAAgB;AACrE,GAAG;;AAEH;AACA;AACA;AACA,2EAA2E,0CAA0C,EAAE;AACvH,GAAG;;AAEH;AACA;AACA;AACA,gDAAgD;;AAEhD,6CAA6C,YAAY;AACzD;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,KAAK;AACL,+CAA+C;AAC/C,0CAA0C,YAAY;AACtD;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;;AAEA;;AAEA,GAAG;;;AAGH;AACA;AACA;AACA,oDAAoD,gCAAgC;AACpF,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,mEAAmE,yDAAyD,EAAE;AAC9H,GAAG;;AAEH;AACA,4DAA4D,aAAa;AACzE,GAAG;AACH;AACA;AACA;AACA,8BAA8B;AAC9B,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,0BAA0B;AAC1C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,sBAAsB,oBAAoB;AAC1C;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA,sBAAsB,MAAM;AAC5B;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,sBAAsB,oBAAoB;AAC1C;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA,sBAAsB,OAAO;AAC7B;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,oBAAoB,oBAAoB;AACxC;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,oBAAoB;AACxC;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,oBAAoB,MAAM;AAC1B;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,oBAAoB,oBAAoB;AACxC;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,kBAAkB,oBAAoB;AACtC;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc,oBAAoB;AAClC;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,2EAA2E,qCAAqC,EAAE;AAClH,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;;AAEhB,eAAe,OAAO;AACtB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;AAED,IAAI,IAA0C;AAC9C,EAAE,mCAAO,aAAa,iBAAiB,EAAE;AAAA,oGAAC;AAC1C,CAAC,MAAM,EAEN;;;;;;;;;;;;;ACpfD;;AAEA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;;AAEA;AACA;AACA,4CAA4C;;AAE5C;;;;;;;;;;;;;ACnBA,e;;;;;;;;;;;;ACAA,2D","file":"web/openhps-localstorage.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"@openhps/core\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"@openhps/localstorage\", [\"@openhps/core\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"@openhps/localstorage\"] = factory(require(\"@openhps/core\"));\n\telse\n\t\troot[\"@openhps/localstorage\"] = factory(root[\"@openhps/core\"]);\n})((typeof self !== 'undefined' ? self : this), function(__WEBPACK_EXTERNAL_MODULE__openhps_core__) {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./dist/cjs/index.js\");\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.LocalStorageDriver = void 0;\nconst core_1 = require(\"@openhps/core\");\nconst lz_string_1 = require(\"lz-string\");\nclass LocalStorageDriver extends core_1.DataServiceDriver {\n constructor(dataType, options, serializer = (obj) => core_1.DataSerializer.serialize(obj), deserializer = (obj) => core_1.DataSerializer.deserialize(obj)) {\n super(dataType);\n this._indexKeys = [];\n this.options = options || {};\n this.options.namespace = this.options.namespace || 'default';\n this.options.chunkSize = this.options.chunkSize || 10;\n this.prefix = `${this.options.namespace}.${dataType.name}`.toLowerCase();\n this.serialize = serializer;\n this.deserialize = deserializer;\n if (typeof localStorage === 'undefined' || localStorage === null) {\n var LocalStorage = require('node-localstorage').LocalStorage;\n global.localStorage = new LocalStorage(this.options.namespace);\n }\n }\n count(filter) {\n return new Promise((resolve) => {\n const items = this._findAll();\n if (filter) {\n let count = 0;\n for (let i = 0; i <= items.length; i += this.options.chunkSize) {\n const keys = items.slice(i, i + this.options.chunkSize);\n keys.forEach((key) => {\n const value = this._findByUID(key);\n if (core_1.MemoryQueryEvaluator.evaluate(value, filter)) {\n count++;\n }\n });\n }\n resolve(count);\n }\n else {\n return items.length;\n }\n });\n }\n _findAll() {\n return JSON.parse(localStorage.getItem(`${this.prefix}_keys`)) || [];\n }\n _findByUID(id) {\n const compressedStr = localStorage.getItem(`${this.prefix}.${id}`);\n const jsonStr = this.options.compress ? lz_string_1.decompressFromUTF16(compressedStr) : compressedStr;\n if (jsonStr === null) {\n return undefined;\n }\n return JSON.parse(jsonStr);\n }\n findByUID(id) {\n return new Promise((resolve, reject) => {\n const serialized = this._findByUID(id);\n if (serialized) {\n const obj = core_1.DataSerializer.deserialize(this._findByUID(id));\n resolve(obj);\n }\n else {\n reject(`${this.dataType.name} with identifier #${id} not found!`);\n }\n });\n }\n findOne(query, options = {}) {\n return new Promise((resolve, reject) => {\n this.findAll(query, {\n limit: 1,\n sort: options.sort,\n })\n .then((results) => {\n if (results.length > 0) {\n return resolve(results[0]);\n }\n else {\n resolve(undefined);\n }\n })\n .catch(reject);\n });\n }\n findAll(query, options = {}) {\n return new Promise((resolve) => {\n const items = this._findAll();\n options.limit = options.limit || items.length;\n let data = [];\n for (let i = 0; i <= items.length; i += this.options.chunkSize) {\n const keys = items.slice(i, i + this.options.chunkSize);\n keys.forEach((key) => {\n const value = this._findByUID(key);\n if (value && core_1.MemoryQueryEvaluator.evaluate(value, query)) {\n data.push(value);\n if (!options.sort && data.length >= options.limit) {\n return;\n }\n }\n });\n }\n if (options.sort) {\n data = data\n .sort((a, b) => options.sort\n .map((s) => {\n const res1 = core_1.MemoryQueryEvaluator.getValueFromPath(s[1] > 0 ? a : b, s[0])[1];\n const res2 = core_1.MemoryQueryEvaluator.getValueFromPath(s[1] > 0 ? b : a, s[0])[1];\n if (typeof res1 === 'number') {\n return res1 - res2;\n }\n else if (typeof res1 === 'string') {\n return res1.localeCompare(res2);\n }\n else {\n return 0;\n }\n })\n .reduce((a, b) => a + b))\n .slice(0, options.limit);\n }\n data = data.map(this.deserialize);\n resolve(data);\n });\n }\n insert(id, object) {\n return new Promise((resolve) => {\n const serializedStr = JSON.stringify(core_1.DataSerializer.serialize(object));\n const compressedStr = this.options.compress ? lz_string_1.compressToUTF16(serializedStr) : serializedStr;\n localStorage.setItem(`${this.prefix}.${id}`, compressedStr);\n const items = this._findAll();\n if (!items.includes(id)) {\n items.push(id);\n localStorage.setItem(`${this.prefix}_keys`, JSON.stringify(items));\n }\n resolve(object);\n });\n }\n delete(id) {\n return new Promise((resolve) => {\n const items = this._findAll();\n items.splice(items.indexOf(id), 1);\n localStorage.setItem(`${this.prefix}_keys`, JSON.stringify(items));\n localStorage.removeItem(`${this.prefix}.${id}`);\n resolve();\n });\n }\n deleteAll(filter) {\n return new Promise((resolve, reject) => {\n const items = this._findAll();\n if (filter === undefined) {\n Promise.all(items.map((item) => this.delete(item)))\n .then(() => resolve())\n .catch(reject);\n }\n else {\n for (let i = 0; i <= items.length; i += this.options.chunkSize) {\n const keys = items.slice(i, i + this.options.chunkSize);\n keys.forEach((key) => {\n const value = this._findByUID(key);\n if (core_1.MemoryQueryEvaluator.evaluate(value, filter)) {\n this.delete(key);\n }\n });\n }\n }\n resolve();\n });\n }\n}\nexports.LocalStorageDriver = LocalStorageDriver;\n//# sourceMappingURL=LocalStorageDriver.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./LocalStorageDriver\"), exports);\n//# sourceMappingURL=index.js.map","// Copyright (c) 2013 Pieroxy <pieroxy@pieroxy.net>\n// This work is free. You can redistribute it and/or modify it\n// under the terms of the WTFPL, Version 2\n// For more information see LICENSE.txt or http://www.wtfpl.net/\n//\n// For more information, the home page:\n// http://pieroxy.net/blog/pages/lz-string/testing.html\n//\n// LZ-based compression algorithm, version 1.4.4\nvar LZString = (function() {\n\n// private property\nvar f = String.fromCharCode;\nvar keyStrBase64 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\nvar keyStrUriSafe = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-$\";\nvar baseReverseDic = {};\n\nfunction getBaseValue(alphabet, character) {\n if (!baseReverseDic[alphabet]) {\n baseReverseDic[alphabet] = {};\n for (var i=0 ; i<alphabet.length ; i++) {\n baseReverseDic[alphabet][alphabet.charAt(i)] = i;\n }\n }\n return baseReverseDic[alphabet][character];\n}\n\nvar LZString = {\n compressToBase64 : function (input) {\n if (input == null) return \"\";\n var res = LZString._compress(input, 6, function(a){return keyStrBase64.charAt(a);});\n switch (res.length % 4) { // To produce valid Base64\n default: // When could this happen ?\n case 0 : return res;\n case 1 : return res+\"===\";\n case 2 : return res+\"==\";\n case 3 : return res+\"=\";\n }\n },\n\n decompressFromBase64 : function (input) {\n if (input == null) return \"\";\n if (input == \"\") return null;\n return LZString._decompress(input.length, 32, function(index) { return getBaseValue(keyStrBase64, input.charAt(index)); });\n },\n\n compressToUTF16 : function (input) {\n if (input == null) return \"\";\n return LZString._compress(input, 15, function(a){return f(a+32);}) + \" \";\n },\n\n decompressFromUTF16: function (compressed) {\n if (compressed == null) return \"\";\n if (compressed == \"\") return null;\n return LZString._decompress(compressed.length, 16384, function(index) { return compressed.charCodeAt(index) - 32; });\n },\n\n //compress into uint8array (UCS-2 big endian format)\n compressToUint8Array: function (uncompressed) {\n var compressed = LZString.compress(uncompressed);\n var buf=new Uint8Array(compressed.length*2); // 2 bytes per character\n\n for (var i=0, TotalLen=compressed.length; i<TotalLen; i++) {\n var current_value = compressed.charCodeAt(i);\n buf[i*2] = current_value >>> 8;\n buf[i*2+1] = current_value % 256;\n }\n return buf;\n },\n\n //decompress from uint8array (UCS-2 big endian format)\n decompressFromUint8Array:function (compressed) {\n if (compressed===null || compressed===undefined){\n return LZString.decompress(compressed);\n } else {\n var buf=new Array(compressed.length/2); // 2 bytes per character\n for (var i=0, TotalLen=buf.length; i<TotalLen; i++) {\n buf[i]=compressed[i*2]*256+compressed[i*2+1];\n }\n\n var result = [];\n buf.forEach(function (c) {\n result.push(f(c));\n });\n return LZString.decompress(result.join(''));\n\n }\n\n },\n\n\n //compress into a string that is already URI encoded\n compressToEncodedURIComponent: function (input) {\n if (input == null) return \"\";\n return LZString._compress(input, 6, function(a){return keyStrUriSafe.charAt(a);});\n },\n\n //decompress from an output of compressToEncodedURIComponent\n decompressFromEncodedURIComponent:function (input) {\n if (input == null) return \"\";\n if (input == \"\") return null;\n input = input.replace(/ /g, \"+\");\n return LZString._decompress(input.length, 32, function(index) { return getBaseValue(keyStrUriSafe, input.charAt(index)); });\n },\n\n compress: function (uncompressed) {\n return LZString._compress(uncompressed, 16, function(a){return f(a);});\n },\n _compress: function (uncompressed, bitsPerChar, getCharFromInt) {\n if (uncompressed == null) return \"\";\n var i, value,\n context_dictionary= {},\n context_dictionaryToCreate= {},\n context_c=\"\",\n context_wc=\"\",\n context_w=\"\",\n context_enlargeIn= 2, // Compensate for the first entry which should not count\n context_dictSize= 3,\n context_numBits= 2,\n context_data=[],\n context_data_val=0,\n context_data_position=0,\n ii;\n\n for (ii = 0; ii < uncompressed.length; ii += 1) {\n context_c = uncompressed.charAt(ii);\n if (!Object.prototype.hasOwnProperty.call(context_dictionary,context_c)) {\n context_dictionary[context_c] = context_dictSize++;\n context_dictionaryToCreate[context_c] = true;\n }\n\n context_wc = context_w + context_c;\n if (Object.prototype.hasOwnProperty.call(context_dictionary,context_wc)) {\n context_w = context_wc;\n } else {\n if (Object.prototype.hasOwnProperty.call(context_dictionaryToCreate,context_w)) {\n if (context_w.charCodeAt(0)<256) {\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n }\n value = context_w.charCodeAt(0);\n for (i=0 ; i<8 ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n } else {\n value = 1;\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1) | value;\n if (context_data_position ==bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = 0;\n }\n value = context_w.charCodeAt(0);\n for (i=0 ; i<16 ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n delete context_dictionaryToCreate[context_w];\n } else {\n value = context_dictionary[context_w];\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n\n\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n // Add wc to the dictionary.\n context_dictionary[context_wc] = context_dictSize++;\n context_w = String(context_c);\n }\n }\n\n // Output the code for w.\n if (context_w !== \"\") {\n if (Object.prototype.hasOwnProperty.call(context_dictionaryToCreate,context_w)) {\n if (context_w.charCodeAt(0)<256) {\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n }\n value = context_w.charCodeAt(0);\n for (i=0 ; i<8 ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n } else {\n value = 1;\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1) | value;\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = 0;\n }\n value = context_w.charCodeAt(0);\n for (i=0 ; i<16 ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n delete context_dictionaryToCreate[context_w];\n } else {\n value = context_dictionary[context_w];\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n\n\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n }\n\n // Mark the end of the stream\n value = 2;\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n\n // Flush the last char\n while (true) {\n context_data_val = (context_data_val << 1);\n if (context_data_position == bitsPerChar-1) {\n context_data.push(getCharFromInt(context_data_val));\n break;\n }\n else context_data_position++;\n }\n return context_data.join('');\n },\n\n decompress: function (compressed) {\n if (compressed == null) return \"\";\n if (compressed == \"\") return null;\n return LZString._decompress(compressed.length, 32768, function(index) { return compressed.charCodeAt(index); });\n },\n\n _decompress: function (length, resetValue, getNextValue) {\n var dictionary = [],\n next,\n enlargeIn = 4,\n dictSize = 4,\n numBits = 3,\n entry = \"\",\n result = [],\n i,\n w,\n bits, resb, maxpower, power,\n c,\n data = {val:getNextValue(0), position:resetValue, index:1};\n\n for (i = 0; i < 3; i += 1) {\n dictionary[i] = i;\n }\n\n bits = 0;\n maxpower = Math.pow(2,2);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n\n switch (next = bits) {\n case 0:\n bits = 0;\n maxpower = Math.pow(2,8);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n c = f(bits);\n break;\n case 1:\n bits = 0;\n maxpower = Math.pow(2,16);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n c = f(bits);\n break;\n case 2:\n return \"\";\n }\n dictionary[3] = c;\n w = c;\n result.push(c);\n while (true) {\n if (data.index > length) {\n return \"\";\n }\n\n bits = 0;\n maxpower = Math.pow(2,numBits);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n\n switch (c = bits) {\n case 0:\n bits = 0;\n maxpower = Math.pow(2,8);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n\n dictionary[dictSize++] = f(bits);\n c = dictSize-1;\n enlargeIn--;\n break;\n case 1:\n bits = 0;\n maxpower = Math.pow(2,16);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n dictionary[dictSize++] = f(bits);\n c = dictSize-1;\n enlargeIn--;\n break;\n case 2:\n return result.join('');\n }\n\n if (enlargeIn == 0) {\n enlargeIn = Math.pow(2, numBits);\n numBits++;\n }\n\n if (dictionary[c]) {\n entry = dictionary[c];\n } else {\n if (c === dictSize) {\n entry = w + w.charAt(0);\n } else {\n return null;\n }\n }\n result.push(entry);\n\n // Add w+entry[0] to the dictionary.\n dictionary[dictSize++] = w + entry.charAt(0);\n enlargeIn--;\n\n w = entry;\n\n if (enlargeIn == 0) {\n enlargeIn = Math.pow(2, numBits);\n numBits++;\n }\n\n }\n }\n};\n return LZString;\n})();\n\nif (typeof define === 'function' && define.amd) {\n define(function () { return LZString; });\n} else if( typeof module !== 'undefined' && module != null ) {\n module.exports = LZString\n}\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","/* (ignored) */","module.exports = __WEBPACK_EXTERNAL_MODULE__openhps_core__;"],"sourceRoot":""}

@@ -1,2 +0,2 @@

!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("@openhps/core")):"function"==typeof define&&define.amd?define("@openhps/localstorage",["@openhps/core"],t):"object"==typeof exports?exports["@openhps/localstorage"]=t(require("@openhps/core")):e["@openhps/localstorage"]=t(e["@openhps/core"])}("undefined"!=typeof self?self:this,(function(e){return function(e){var t={};function r(o){if(t[o])return t[o].exports;var n=t[o]={i:o,l:!1,exports:{}};return e[o].call(n.exports,n,n.exports,r),n.l=!0,n.exports}return r.m=e,r.c=t,r.d=function(e,t,o){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(r.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)r.d(o,n,function(t){return e[t]}.bind(null,n));return o},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=0)}([function(e,t,r){"use strict";var o=this&&this.__createBinding||(Object.create?function(e,t,r,o){void 0===o&&(o=r),Object.defineProperty(e,o,{enumerable:!0,get:function(){return t[r]}})}:function(e,t,r,o){void 0===o&&(o=r),e[o]=t[r]}),n=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||o(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),n(r(1),t)},function(e,t,r){"use strict";var o=this&&this.__createBinding||(Object.create?function(e,t,r,o){void 0===o&&(o=r),Object.defineProperty(e,o,{enumerable:!0,get:function(){return t[r]}})}:function(e,t,r,o){void 0===o&&(o=r),e[o]=t[r]}),n=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||o(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),n(r(2),t)},function(e,t,r){"use strict";(function(e){Object.defineProperty(t,"__esModule",{value:!0}),t.LocalStorageDriver=void 0;const o=r(4),n=r(5);class LocalStorageDriver extends o.DataServiceDriver{constructor(t,o="default"){if(super(t),this._indexKeys=[],this.namespace=`${o}.${t.name}`.toLowerCase(),"undefined"==typeof localStorage||null===localStorage){var n=r(6).LocalStorage;e.localStorage=new n(o)}}createIndex(e){return new Promise((t=>{this._indexKeys.push(e),t()}))}_createIndexes(e,t){this._indexKeys.forEach((e=>{localStorage.setItem(`${this.namespace}.${e}[]`,null)}))}_deleteIndexes(e){this._indexKeys.forEach((e=>{localStorage.getItem(`${this.namespace}.${e}`)}))}findByUID(e){return new Promise((t=>{const r=localStorage.getItem(`${this.namespace}.uid.${e}`),i=n.decompress(r);t(o.DataSerializer.deserialize(JSON.parse(i)))}))}findOne(e){return new Promise(((e,t)=>{t(new Error("Not implemented!"))}))}findAll(e){return new Promise(((e,t)=>{const r=JSON.parse(localStorage.getItem(`${this.namespace}_keys`))||[];Promise.all(r.map((e=>this.findByUID(e)))).then((t=>{e(t)})).catch(t)}))}insert(e,t){return new Promise((r=>{const i=JSON.stringify(o.DataSerializer.serialize(t));localStorage.setItem(`${this.namespace}.${e}`,n.compress(i));const s=JSON.parse(localStorage.getItem(`${this.namespace}_keys`))||[];s.push(e),localStorage.setItem(`${this.namespace}_keys`,JSON.stringify(s)),r(t)}))}delete(e){return new Promise((t=>{localStorage.removeItem(`${this.namespace}.${e}`),t()}))}deleteAll(){return new Promise(((e,t)=>{const r=JSON.parse(localStorage.getItem(`${this.namespace}_keys`))||[];Promise.all(r.map((e=>this.delete(e)))).then((()=>{e()})).catch(t)}))}}t.LocalStorageDriver=LocalStorageDriver}).call(this,r(3))},function(e,t){var r;r=function(){return this}();try{r=r||new Function("return this")()}catch(e){"object"==typeof window&&(r=window)}e.exports=r},function(t,r){t.exports=e},function(e,t,r){var o,n=function(){var e=String.fromCharCode,t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-$",o={};function n(e,t){if(!o[e]){o[e]={};for(var r=0;r<e.length;r++)o[e][e.charAt(r)]=r}return o[e][t]}var i={compressToBase64:function(e){if(null==e)return"";var r=i._compress(e,6,(function(e){return t.charAt(e)}));switch(r.length%4){default:case 0:return r;case 1:return r+"===";case 2:return r+"==";case 3:return r+"="}},decompressFromBase64:function(e){return null==e?"":""==e?null:i._decompress(e.length,32,(function(r){return n(t,e.charAt(r))}))},compressToUTF16:function(t){return null==t?"":i._compress(t,15,(function(t){return e(t+32)}))+" "},decompressFromUTF16:function(e){return null==e?"":""==e?null:i._decompress(e.length,16384,(function(t){return e.charCodeAt(t)-32}))},compressToUint8Array:function(e){for(var t=i.compress(e),r=new Uint8Array(2*t.length),o=0,n=t.length;o<n;o++){var s=t.charCodeAt(o);r[2*o]=s>>>8,r[2*o+1]=s%256}return r},decompressFromUint8Array:function(t){if(null==t)return i.decompress(t);for(var r=new Array(t.length/2),o=0,n=r.length;o<n;o++)r[o]=256*t[2*o]+t[2*o+1];var s=[];return r.forEach((function(t){s.push(e(t))})),i.decompress(s.join(""))},compressToEncodedURIComponent:function(e){return null==e?"":i._compress(e,6,(function(e){return r.charAt(e)}))},decompressFromEncodedURIComponent:function(e){return null==e?"":""==e?null:(e=e.replace(/ /g,"+"),i._decompress(e.length,32,(function(t){return n(r,e.charAt(t))})))},compress:function(t){return i._compress(t,16,(function(t){return e(t)}))},_compress:function(e,t,r){if(null==e)return"";var o,n,i,s={},a={},c="",u="",l="",p=2,f=3,h=2,d=[],m=0,v=0;for(i=0;i<e.length;i+=1)if(c=e.charAt(i),Object.prototype.hasOwnProperty.call(s,c)||(s[c]=f++,a[c]=!0),u=l+c,Object.prototype.hasOwnProperty.call(s,u))l=u;else{if(Object.prototype.hasOwnProperty.call(a,l)){if(l.charCodeAt(0)<256){for(o=0;o<h;o++)m<<=1,v==t-1?(v=0,d.push(r(m)),m=0):v++;for(n=l.charCodeAt(0),o=0;o<8;o++)m=m<<1|1&n,v==t-1?(v=0,d.push(r(m)),m=0):v++,n>>=1}else{for(n=1,o=0;o<h;o++)m=m<<1|n,v==t-1?(v=0,d.push(r(m)),m=0):v++,n=0;for(n=l.charCodeAt(0),o=0;o<16;o++)m=m<<1|1&n,v==t-1?(v=0,d.push(r(m)),m=0):v++,n>>=1}0==--p&&(p=Math.pow(2,h),h++),delete a[l]}else for(n=s[l],o=0;o<h;o++)m=m<<1|1&n,v==t-1?(v=0,d.push(r(m)),m=0):v++,n>>=1;0==--p&&(p=Math.pow(2,h),h++),s[u]=f++,l=String(c)}if(""!==l){if(Object.prototype.hasOwnProperty.call(a,l)){if(l.charCodeAt(0)<256){for(o=0;o<h;o++)m<<=1,v==t-1?(v=0,d.push(r(m)),m=0):v++;for(n=l.charCodeAt(0),o=0;o<8;o++)m=m<<1|1&n,v==t-1?(v=0,d.push(r(m)),m=0):v++,n>>=1}else{for(n=1,o=0;o<h;o++)m=m<<1|n,v==t-1?(v=0,d.push(r(m)),m=0):v++,n=0;for(n=l.charCodeAt(0),o=0;o<16;o++)m=m<<1|1&n,v==t-1?(v=0,d.push(r(m)),m=0):v++,n>>=1}0==--p&&(p=Math.pow(2,h),h++),delete a[l]}else for(n=s[l],o=0;o<h;o++)m=m<<1|1&n,v==t-1?(v=0,d.push(r(m)),m=0):v++,n>>=1;0==--p&&(p=Math.pow(2,h),h++)}for(n=2,o=0;o<h;o++)m=m<<1|1&n,v==t-1?(v=0,d.push(r(m)),m=0):v++,n>>=1;for(;;){if(m<<=1,v==t-1){d.push(r(m));break}v++}return d.join("")},decompress:function(e){return null==e?"":""==e?null:i._decompress(e.length,32768,(function(t){return e.charCodeAt(t)}))},_decompress:function(t,r,o){var n,i,s,a,c,u,l,p=[],f=4,h=4,d=3,m="",v=[],y={val:o(0),position:r,index:1};for(n=0;n<3;n+=1)p[n]=n;for(s=0,c=Math.pow(2,2),u=1;u!=c;)a=y.val&y.position,y.position>>=1,0==y.position&&(y.position=r,y.val=o(y.index++)),s|=(a>0?1:0)*u,u<<=1;switch(s){case 0:for(s=0,c=Math.pow(2,8),u=1;u!=c;)a=y.val&y.position,y.position>>=1,0==y.position&&(y.position=r,y.val=o(y.index++)),s|=(a>0?1:0)*u,u<<=1;l=e(s);break;case 1:for(s=0,c=Math.pow(2,16),u=1;u!=c;)a=y.val&y.position,y.position>>=1,0==y.position&&(y.position=r,y.val=o(y.index++)),s|=(a>0?1:0)*u,u<<=1;l=e(s);break;case 2:return""}for(p[3]=l,i=l,v.push(l);;){if(y.index>t)return"";for(s=0,c=Math.pow(2,d),u=1;u!=c;)a=y.val&y.position,y.position>>=1,0==y.position&&(y.position=r,y.val=o(y.index++)),s|=(a>0?1:0)*u,u<<=1;switch(l=s){case 0:for(s=0,c=Math.pow(2,8),u=1;u!=c;)a=y.val&y.position,y.position>>=1,0==y.position&&(y.position=r,y.val=o(y.index++)),s|=(a>0?1:0)*u,u<<=1;p[h++]=e(s),l=h-1,f--;break;case 1:for(s=0,c=Math.pow(2,16),u=1;u!=c;)a=y.val&y.position,y.position>>=1,0==y.position&&(y.position=r,y.val=o(y.index++)),s|=(a>0?1:0)*u,u<<=1;p[h++]=e(s),l=h-1,f--;break;case 2:return v.join("")}if(0==f&&(f=Math.pow(2,d),d++),p[l])m=p[l];else{if(l!==h)return null;m=i+i.charAt(0)}v.push(m),p[h++]=i+m.charAt(0),i=m,0==--f&&(f=Math.pow(2,d),d++)}}};return i}();void 0===(o=function(){return n}.call(t,r,t,e))||(e.exports=o)},function(e,t){}])}));
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("@openhps/core")):"function"==typeof define&&define.amd?define("@openhps/localstorage",["@openhps/core"],t):"object"==typeof exports?exports["@openhps/localstorage"]=t(require("@openhps/core")):e["@openhps/localstorage"]=t(e["@openhps/core"])}("undefined"!=typeof self?self:this,(function(e){return function(e){var t={};function o(r){if(t[r])return t[r].exports;var n=t[r]={i:r,l:!1,exports:{}};return e[r].call(n.exports,n,n.exports,o),n.l=!0,n.exports}return o.m=e,o.c=t,o.d=function(e,t,r){o.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},o.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o.t=function(e,t){if(1&t&&(e=o(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(o.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)o.d(r,n,function(t){return e[t]}.bind(null,n));return r},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,"a",t),t},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},o.p="",o(o.s=0)}([function(e,t,o){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,o,r){void 0===r&&(r=o),Object.defineProperty(e,r,{enumerable:!0,get:function(){return t[o]}})}:function(e,t,o,r){void 0===r&&(r=o),e[r]=t[o]}),n=this&&this.__exportStar||function(e,t){for(var o in e)"default"===o||Object.prototype.hasOwnProperty.call(t,o)||r(t,e,o)};Object.defineProperty(t,"__esModule",{value:!0}),n(o(1),t)},function(e,t,o){"use strict";(function(e){Object.defineProperty(t,"__esModule",{value:!0}),t.LocalStorageDriver=void 0;const r=o(3),n=o(4);class LocalStorageDriver extends r.DataServiceDriver{constructor(t,n,i=(e=>r.DataSerializer.serialize(e)),s=(e=>r.DataSerializer.deserialize(e))){if(super(t),this._indexKeys=[],this.options=n||{},this.options.namespace=this.options.namespace||"default",this.options.chunkSize=this.options.chunkSize||10,this.prefix=`${this.options.namespace}.${t.name}`.toLowerCase(),this.serialize=i,this.deserialize=s,"undefined"==typeof localStorage||null===localStorage){var a=o(5).LocalStorage;e.localStorage=new a(this.options.namespace)}}count(e){return new Promise((t=>{const o=this._findAll();if(!e)return o.length;{let n=0;for(let t=0;t<=o.length;t+=this.options.chunkSize){o.slice(t,t+this.options.chunkSize).forEach((t=>{const o=this._findByUID(t);r.MemoryQueryEvaluator.evaluate(o,e)&&n++}))}t(n)}}))}_findAll(){return JSON.parse(localStorage.getItem(`${this.prefix}_keys`))||[]}_findByUID(e){const t=localStorage.getItem(`${this.prefix}.${e}`),o=this.options.compress?n.decompressFromUTF16(t):t;if(null!==o)return JSON.parse(o)}findByUID(e){return new Promise(((t,o)=>{if(this._findByUID(e)){t(r.DataSerializer.deserialize(this._findByUID(e)))}else o(`${this.dataType.name} with identifier #${e} not found!`)}))}findOne(e,t={}){return new Promise(((o,r)=>{this.findAll(e,{limit:1,sort:t.sort}).then((e=>{if(e.length>0)return o(e[0]);o(void 0)})).catch(r)}))}findAll(e,t={}){return new Promise((o=>{const n=this._findAll();t.limit=t.limit||n.length;let i=[];for(let o=0;o<=n.length;o+=this.options.chunkSize){n.slice(o,o+this.options.chunkSize).forEach((o=>{const n=this._findByUID(o);n&&r.MemoryQueryEvaluator.evaluate(n,e)&&(i.push(n),!t.sort&&(i.length,t.limit))}))}t.sort&&(i=i.sort(((e,o)=>t.sort.map((t=>{const n=r.MemoryQueryEvaluator.getValueFromPath(t[1]>0?e:o,t[0])[1],i=r.MemoryQueryEvaluator.getValueFromPath(t[1]>0?o:e,t[0])[1];return"number"==typeof n?n-i:"string"==typeof n?n.localeCompare(i):0})).reduce(((e,t)=>e+t)))).slice(0,t.limit)),i=i.map(this.deserialize),o(i)}))}insert(e,t){return new Promise((o=>{const i=JSON.stringify(r.DataSerializer.serialize(t)),s=this.options.compress?n.compressToUTF16(i):i;localStorage.setItem(`${this.prefix}.${e}`,s);const a=this._findAll();a.includes(e)||(a.push(e),localStorage.setItem(`${this.prefix}_keys`,JSON.stringify(a))),o(t)}))}delete(e){return new Promise((t=>{const o=this._findAll();o.splice(o.indexOf(e),1),localStorage.setItem(`${this.prefix}_keys`,JSON.stringify(o)),localStorage.removeItem(`${this.prefix}.${e}`),t()}))}deleteAll(e){return new Promise(((t,o)=>{const n=this._findAll();if(void 0===e)Promise.all(n.map((e=>this.delete(e)))).then((()=>t())).catch(o);else for(let t=0;t<=n.length;t+=this.options.chunkSize){n.slice(t,t+this.options.chunkSize).forEach((t=>{const o=this._findByUID(t);r.MemoryQueryEvaluator.evaluate(o,e)&&this.delete(t)}))}t()}))}}t.LocalStorageDriver=LocalStorageDriver}).call(this,o(2))},function(e,t){var o;o=function(){return this}();try{o=o||new Function("return this")()}catch(e){"object"==typeof window&&(o=window)}e.exports=o},function(t,o){t.exports=e},function(e,t,o){var r,n=function(){var e=String.fromCharCode,t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-$",r={};function n(e,t){if(!r[e]){r[e]={};for(var o=0;o<e.length;o++)r[e][e.charAt(o)]=o}return r[e][t]}var i={compressToBase64:function(e){if(null==e)return"";var o=i._compress(e,6,(function(e){return t.charAt(e)}));switch(o.length%4){default:case 0:return o;case 1:return o+"===";case 2:return o+"==";case 3:return o+"="}},decompressFromBase64:function(e){return null==e?"":""==e?null:i._decompress(e.length,32,(function(o){return n(t,e.charAt(o))}))},compressToUTF16:function(t){return null==t?"":i._compress(t,15,(function(t){return e(t+32)}))+" "},decompressFromUTF16:function(e){return null==e?"":""==e?null:i._decompress(e.length,16384,(function(t){return e.charCodeAt(t)-32}))},compressToUint8Array:function(e){for(var t=i.compress(e),o=new Uint8Array(2*t.length),r=0,n=t.length;r<n;r++){var s=t.charCodeAt(r);o[2*r]=s>>>8,o[2*r+1]=s%256}return o},decompressFromUint8Array:function(t){if(null==t)return i.decompress(t);for(var o=new Array(t.length/2),r=0,n=o.length;r<n;r++)o[r]=256*t[2*r]+t[2*r+1];var s=[];return o.forEach((function(t){s.push(e(t))})),i.decompress(s.join(""))},compressToEncodedURIComponent:function(e){return null==e?"":i._compress(e,6,(function(e){return o.charAt(e)}))},decompressFromEncodedURIComponent:function(e){return null==e?"":""==e?null:(e=e.replace(/ /g,"+"),i._decompress(e.length,32,(function(t){return n(o,e.charAt(t))})))},compress:function(t){return i._compress(t,16,(function(t){return e(t)}))},_compress:function(e,t,o){if(null==e)return"";var r,n,i,s={},a={},l="",c="",u="",p=2,f=3,h=2,d=[],m=0,y=0;for(i=0;i<e.length;i+=1)if(l=e.charAt(i),Object.prototype.hasOwnProperty.call(s,l)||(s[l]=f++,a[l]=!0),c=u+l,Object.prototype.hasOwnProperty.call(s,c))u=c;else{if(Object.prototype.hasOwnProperty.call(a,u)){if(u.charCodeAt(0)<256){for(r=0;r<h;r++)m<<=1,y==t-1?(y=0,d.push(o(m)),m=0):y++;for(n=u.charCodeAt(0),r=0;r<8;r++)m=m<<1|1&n,y==t-1?(y=0,d.push(o(m)),m=0):y++,n>>=1}else{for(n=1,r=0;r<h;r++)m=m<<1|n,y==t-1?(y=0,d.push(o(m)),m=0):y++,n=0;for(n=u.charCodeAt(0),r=0;r<16;r++)m=m<<1|1&n,y==t-1?(y=0,d.push(o(m)),m=0):y++,n>>=1}0==--p&&(p=Math.pow(2,h),h++),delete a[u]}else for(n=s[u],r=0;r<h;r++)m=m<<1|1&n,y==t-1?(y=0,d.push(o(m)),m=0):y++,n>>=1;0==--p&&(p=Math.pow(2,h),h++),s[c]=f++,u=String(l)}if(""!==u){if(Object.prototype.hasOwnProperty.call(a,u)){if(u.charCodeAt(0)<256){for(r=0;r<h;r++)m<<=1,y==t-1?(y=0,d.push(o(m)),m=0):y++;for(n=u.charCodeAt(0),r=0;r<8;r++)m=m<<1|1&n,y==t-1?(y=0,d.push(o(m)),m=0):y++,n>>=1}else{for(n=1,r=0;r<h;r++)m=m<<1|n,y==t-1?(y=0,d.push(o(m)),m=0):y++,n=0;for(n=u.charCodeAt(0),r=0;r<16;r++)m=m<<1|1&n,y==t-1?(y=0,d.push(o(m)),m=0):y++,n>>=1}0==--p&&(p=Math.pow(2,h),h++),delete a[u]}else for(n=s[u],r=0;r<h;r++)m=m<<1|1&n,y==t-1?(y=0,d.push(o(m)),m=0):y++,n>>=1;0==--p&&(p=Math.pow(2,h),h++)}for(n=2,r=0;r<h;r++)m=m<<1|1&n,y==t-1?(y=0,d.push(o(m)),m=0):y++,n>>=1;for(;;){if(m<<=1,y==t-1){d.push(o(m));break}y++}return d.join("")},decompress:function(e){return null==e?"":""==e?null:i._decompress(e.length,32768,(function(t){return e.charCodeAt(t)}))},_decompress:function(t,o,r){var n,i,s,a,l,c,u,p=[],f=4,h=4,d=3,m="",y=[],v={val:r(0),position:o,index:1};for(n=0;n<3;n+=1)p[n]=n;for(s=0,l=Math.pow(2,2),c=1;c!=l;)a=v.val&v.position,v.position>>=1,0==v.position&&(v.position=o,v.val=r(v.index++)),s|=(a>0?1:0)*c,c<<=1;switch(s){case 0:for(s=0,l=Math.pow(2,8),c=1;c!=l;)a=v.val&v.position,v.position>>=1,0==v.position&&(v.position=o,v.val=r(v.index++)),s|=(a>0?1:0)*c,c<<=1;u=e(s);break;case 1:for(s=0,l=Math.pow(2,16),c=1;c!=l;)a=v.val&v.position,v.position>>=1,0==v.position&&(v.position=o,v.val=r(v.index++)),s|=(a>0?1:0)*c,c<<=1;u=e(s);break;case 2:return""}for(p[3]=u,i=u,y.push(u);;){if(v.index>t)return"";for(s=0,l=Math.pow(2,d),c=1;c!=l;)a=v.val&v.position,v.position>>=1,0==v.position&&(v.position=o,v.val=r(v.index++)),s|=(a>0?1:0)*c,c<<=1;switch(u=s){case 0:for(s=0,l=Math.pow(2,8),c=1;c!=l;)a=v.val&v.position,v.position>>=1,0==v.position&&(v.position=o,v.val=r(v.index++)),s|=(a>0?1:0)*c,c<<=1;p[h++]=e(s),u=h-1,f--;break;case 1:for(s=0,l=Math.pow(2,16),c=1;c!=l;)a=v.val&v.position,v.position>>=1,0==v.position&&(v.position=o,v.val=r(v.index++)),s|=(a>0?1:0)*c,c<<=1;p[h++]=e(s),u=h-1,f--;break;case 2:return y.join("")}if(0==f&&(f=Math.pow(2,d),d++),p[u])m=p[u];else{if(u!==h)return null;m=i+i.charAt(0)}y.push(m),p[h++]=i+m.charAt(0),i=m,0==--f&&(f=Math.pow(2,d),d++)}}};return i}();void 0===(r=function(){return n}.call(t,o,t,e))||(e.exports=r)},function(e,t){}])}));
//# sourceMappingURL=openhps-localstorage.min.js.map

@@ -1,1 +0,1 @@

{"version":3,"sources":["webpack://@openhps/localstorage/webpack/universalModuleDefinition","webpack://@openhps/localstorage/webpack/bootstrap","webpack://@openhps/localstorage/./dist/cjs/index.js","webpack://@openhps/localstorage/./dist/cjs/service/index.js","webpack://@openhps/localstorage/./dist/cjs/service/LocalStorageDriver.js","webpack://@openhps/localstorage/(webpack)/buildin/global.js","webpack://@openhps/localstorage/external \"@openhps/core\"","webpack://@openhps/localstorage/./node_modules/lz-string/libs/lz-string.js"],"names":["root","factory","exports","module","require","define","amd","self","this","__WEBPACK_EXTERNAL_MODULE__4__","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","__createBinding","k","k2","undefined","__exportStar","LocalStorageDriver","core_1","lz_string_1","DataServiceDriver","dataType","namespace","super","_indexKeys","toLowerCase","localStorage","LocalStorage","global","index","Promise","resolve","push","id","forEach","setItem","getItem","compressedStr","jsonStr","decompress","DataSerializer","deserialize","JSON","parse","query","_","reject","Error","items","all","map","item","findByUID","then","catch","serializedStr","stringify","serialize","compress","removeItem","delete","g","Function","e","window","LZString","f","String","fromCharCode","keyStrBase64","keyStrUriSafe","baseReverseDic","getBaseValue","alphabet","character","length","charAt","compressToBase64","input","res","_compress","a","decompressFromBase64","_decompress","compressToUTF16","decompressFromUTF16","compressed","charCodeAt","compressToUint8Array","uncompressed","buf","Uint8Array","TotalLen","current_value","decompressFromUint8Array","Array","result","join","compressToEncodedURIComponent","decompressFromEncodedURIComponent","replace","bitsPerChar","getCharFromInt","ii","context_dictionary","context_dictionaryToCreate","context_c","context_wc","context_w","context_enlargeIn","context_dictSize","context_numBits","context_data","context_data_val","context_data_position","Math","pow","resetValue","getNextValue","w","bits","resb","maxpower","power","dictionary","enlargeIn","dictSize","numBits","entry","data","val","position"],"mappings":"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","file":"web/openhps-localstorage.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"@openhps/core\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"@openhps/localstorage\", [\"@openhps/core\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"@openhps/localstorage\"] = factory(require(\"@openhps/core\"));\n\telse\n\t\troot[\"@openhps/localstorage\"] = factory(root[\"@openhps/core\"]);\n})((typeof self !== 'undefined' ? self : this), function(__WEBPACK_EXTERNAL_MODULE__4__) {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./service\"), exports);\n//# sourceMappingURL=index.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./LocalStorageDriver\"), exports);\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.LocalStorageDriver = void 0;\nconst core_1 = require(\"@openhps/core\");\nconst lz_string_1 = require(\"lz-string\");\nclass LocalStorageDriver extends core_1.DataServiceDriver {\n constructor(dataType, namespace = 'default') {\n super(dataType);\n this._indexKeys = [];\n this.namespace = `${namespace}.${dataType.name}`.toLowerCase();\n if (typeof localStorage === 'undefined' || localStorage === null) {\n var LocalStorage = require('node-localstorage').LocalStorage;\n global.localStorage = new LocalStorage(namespace);\n }\n }\n createIndex(index) {\n return new Promise((resolve) => {\n this._indexKeys.push(index);\n resolve();\n });\n }\n _createIndexes(id, object) {\n this._indexKeys.forEach((key) => {\n localStorage.setItem(`${this.namespace}.${key}[]`, null);\n });\n }\n _deleteIndexes(id) {\n this._indexKeys.forEach((key) => {\n const values = localStorage.getItem(`${this.namespace}.${key}`);\n });\n }\n findByUID(id) {\n return new Promise((resolve) => {\n const compressedStr = localStorage.getItem(`${this.namespace}.uid.${id}`);\n const jsonStr = lz_string_1.decompress(compressedStr);\n const obj = core_1.DataSerializer.deserialize(JSON.parse(jsonStr));\n resolve(obj);\n });\n }\n findOne(query) {\n return new Promise((_, reject) => {\n reject(new Error(`Not implemented!`));\n });\n }\n findAll(query) {\n return new Promise((resolve, reject) => {\n const items = JSON.parse(localStorage.getItem(`${this.namespace}_keys`)) || [];\n Promise.all(items.map((item) => this.findByUID(item)))\n .then((items) => {\n resolve(items);\n })\n .catch(reject);\n });\n }\n insert(id, object) {\n return new Promise((resolve) => {\n const serializedStr = JSON.stringify(core_1.DataSerializer.serialize(object));\n localStorage.setItem(`${this.namespace}.${id}`, lz_string_1.compress(serializedStr));\n const items = JSON.parse(localStorage.getItem(`${this.namespace}_keys`)) || [];\n items.push(id);\n localStorage.setItem(`${this.namespace}_keys`, JSON.stringify(items));\n resolve(object);\n });\n }\n delete(id) {\n return new Promise((resolve) => {\n localStorage.removeItem(`${this.namespace}.${id}`);\n resolve();\n });\n }\n deleteAll() {\n return new Promise((resolve, reject) => {\n const items = JSON.parse(localStorage.getItem(`${this.namespace}_keys`)) || [];\n Promise.all(items.map((item) => this.delete(item)))\n .then(() => {\n resolve();\n })\n .catch(reject);\n });\n }\n}\nexports.LocalStorageDriver = LocalStorageDriver;\n//# sourceMappingURL=LocalStorageDriver.js.map","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","module.exports = __WEBPACK_EXTERNAL_MODULE__4__;","// Copyright (c) 2013 Pieroxy <pieroxy@pieroxy.net>\n// This work is free. You can redistribute it and/or modify it\n// under the terms of the WTFPL, Version 2\n// For more information see LICENSE.txt or http://www.wtfpl.net/\n//\n// For more information, the home page:\n// http://pieroxy.net/blog/pages/lz-string/testing.html\n//\n// LZ-based compression algorithm, version 1.4.4\nvar LZString = (function() {\n\n// private property\nvar f = String.fromCharCode;\nvar keyStrBase64 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\nvar keyStrUriSafe = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-$\";\nvar baseReverseDic = {};\n\nfunction getBaseValue(alphabet, character) {\n if (!baseReverseDic[alphabet]) {\n baseReverseDic[alphabet] = {};\n for (var i=0 ; i<alphabet.length ; i++) {\n baseReverseDic[alphabet][alphabet.charAt(i)] = i;\n }\n }\n return baseReverseDic[alphabet][character];\n}\n\nvar LZString = {\n compressToBase64 : function (input) {\n if (input == null) return \"\";\n var res = LZString._compress(input, 6, function(a){return keyStrBase64.charAt(a);});\n switch (res.length % 4) { // To produce valid Base64\n default: // When could this happen ?\n case 0 : return res;\n case 1 : return res+\"===\";\n case 2 : return res+\"==\";\n case 3 : return res+\"=\";\n }\n },\n\n decompressFromBase64 : function (input) {\n if (input == null) return \"\";\n if (input == \"\") return null;\n return LZString._decompress(input.length, 32, function(index) { return getBaseValue(keyStrBase64, input.charAt(index)); });\n },\n\n compressToUTF16 : function (input) {\n if (input == null) return \"\";\n return LZString._compress(input, 15, function(a){return f(a+32);}) + \" \";\n },\n\n decompressFromUTF16: function (compressed) {\n if (compressed == null) return \"\";\n if (compressed == \"\") return null;\n return LZString._decompress(compressed.length, 16384, function(index) { return compressed.charCodeAt(index) - 32; });\n },\n\n //compress into uint8array (UCS-2 big endian format)\n compressToUint8Array: function (uncompressed) {\n var compressed = LZString.compress(uncompressed);\n var buf=new Uint8Array(compressed.length*2); // 2 bytes per character\n\n for (var i=0, TotalLen=compressed.length; i<TotalLen; i++) {\n var current_value = compressed.charCodeAt(i);\n buf[i*2] = current_value >>> 8;\n buf[i*2+1] = current_value % 256;\n }\n return buf;\n },\n\n //decompress from uint8array (UCS-2 big endian format)\n decompressFromUint8Array:function (compressed) {\n if (compressed===null || compressed===undefined){\n return LZString.decompress(compressed);\n } else {\n var buf=new Array(compressed.length/2); // 2 bytes per character\n for (var i=0, TotalLen=buf.length; i<TotalLen; i++) {\n buf[i]=compressed[i*2]*256+compressed[i*2+1];\n }\n\n var result = [];\n buf.forEach(function (c) {\n result.push(f(c));\n });\n return LZString.decompress(result.join(''));\n\n }\n\n },\n\n\n //compress into a string that is already URI encoded\n compressToEncodedURIComponent: function (input) {\n if (input == null) return \"\";\n return LZString._compress(input, 6, function(a){return keyStrUriSafe.charAt(a);});\n },\n\n //decompress from an output of compressToEncodedURIComponent\n decompressFromEncodedURIComponent:function (input) {\n if (input == null) return \"\";\n if (input == \"\") return null;\n input = input.replace(/ /g, \"+\");\n return LZString._decompress(input.length, 32, function(index) { return getBaseValue(keyStrUriSafe, input.charAt(index)); });\n },\n\n compress: function (uncompressed) {\n return LZString._compress(uncompressed, 16, function(a){return f(a);});\n },\n _compress: function (uncompressed, bitsPerChar, getCharFromInt) {\n if (uncompressed == null) return \"\";\n var i, value,\n context_dictionary= {},\n context_dictionaryToCreate= {},\n context_c=\"\",\n context_wc=\"\",\n context_w=\"\",\n context_enlargeIn= 2, // Compensate for the first entry which should not count\n context_dictSize= 3,\n context_numBits= 2,\n context_data=[],\n context_data_val=0,\n context_data_position=0,\n ii;\n\n for (ii = 0; ii < uncompressed.length; ii += 1) {\n context_c = uncompressed.charAt(ii);\n if (!Object.prototype.hasOwnProperty.call(context_dictionary,context_c)) {\n context_dictionary[context_c] = context_dictSize++;\n context_dictionaryToCreate[context_c] = true;\n }\n\n context_wc = context_w + context_c;\n if (Object.prototype.hasOwnProperty.call(context_dictionary,context_wc)) {\n context_w = context_wc;\n } else {\n if (Object.prototype.hasOwnProperty.call(context_dictionaryToCreate,context_w)) {\n if (context_w.charCodeAt(0)<256) {\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n }\n value = context_w.charCodeAt(0);\n for (i=0 ; i<8 ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n } else {\n value = 1;\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1) | value;\n if (context_data_position ==bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = 0;\n }\n value = context_w.charCodeAt(0);\n for (i=0 ; i<16 ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n delete context_dictionaryToCreate[context_w];\n } else {\n value = context_dictionary[context_w];\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n\n\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n // Add wc to the dictionary.\n context_dictionary[context_wc] = context_dictSize++;\n context_w = String(context_c);\n }\n }\n\n // Output the code for w.\n if (context_w !== \"\") {\n if (Object.prototype.hasOwnProperty.call(context_dictionaryToCreate,context_w)) {\n if (context_w.charCodeAt(0)<256) {\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n }\n value = context_w.charCodeAt(0);\n for (i=0 ; i<8 ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n } else {\n value = 1;\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1) | value;\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = 0;\n }\n value = context_w.charCodeAt(0);\n for (i=0 ; i<16 ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n delete context_dictionaryToCreate[context_w];\n } else {\n value = context_dictionary[context_w];\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n\n\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n }\n\n // Mark the end of the stream\n value = 2;\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n\n // Flush the last char\n while (true) {\n context_data_val = (context_data_val << 1);\n if (context_data_position == bitsPerChar-1) {\n context_data.push(getCharFromInt(context_data_val));\n break;\n }\n else context_data_position++;\n }\n return context_data.join('');\n },\n\n decompress: function (compressed) {\n if (compressed == null) return \"\";\n if (compressed == \"\") return null;\n return LZString._decompress(compressed.length, 32768, function(index) { return compressed.charCodeAt(index); });\n },\n\n _decompress: function (length, resetValue, getNextValue) {\n var dictionary = [],\n next,\n enlargeIn = 4,\n dictSize = 4,\n numBits = 3,\n entry = \"\",\n result = [],\n i,\n w,\n bits, resb, maxpower, power,\n c,\n data = {val:getNextValue(0), position:resetValue, index:1};\n\n for (i = 0; i < 3; i += 1) {\n dictionary[i] = i;\n }\n\n bits = 0;\n maxpower = Math.pow(2,2);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n\n switch (next = bits) {\n case 0:\n bits = 0;\n maxpower = Math.pow(2,8);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n c = f(bits);\n break;\n case 1:\n bits = 0;\n maxpower = Math.pow(2,16);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n c = f(bits);\n break;\n case 2:\n return \"\";\n }\n dictionary[3] = c;\n w = c;\n result.push(c);\n while (true) {\n if (data.index > length) {\n return \"\";\n }\n\n bits = 0;\n maxpower = Math.pow(2,numBits);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n\n switch (c = bits) {\n case 0:\n bits = 0;\n maxpower = Math.pow(2,8);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n\n dictionary[dictSize++] = f(bits);\n c = dictSize-1;\n enlargeIn--;\n break;\n case 1:\n bits = 0;\n maxpower = Math.pow(2,16);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n dictionary[dictSize++] = f(bits);\n c = dictSize-1;\n enlargeIn--;\n break;\n case 2:\n return result.join('');\n }\n\n if (enlargeIn == 0) {\n enlargeIn = Math.pow(2, numBits);\n numBits++;\n }\n\n if (dictionary[c]) {\n entry = dictionary[c];\n } else {\n if (c === dictSize) {\n entry = w + w.charAt(0);\n } else {\n return null;\n }\n }\n result.push(entry);\n\n // Add w+entry[0] to the dictionary.\n dictionary[dictSize++] = w + entry.charAt(0);\n enlargeIn--;\n\n w = entry;\n\n if (enlargeIn == 0) {\n enlargeIn = Math.pow(2, numBits);\n numBits++;\n }\n\n }\n }\n};\n return LZString;\n})();\n\nif (typeof define === 'function' && define.amd) {\n define(function () { return LZString; });\n} else if( typeof module !== 'undefined' && module != null ) {\n module.exports = LZString\n}\n"],"sourceRoot":""}
{"version":3,"sources":["webpack://@openhps/localstorage/webpack/universalModuleDefinition","webpack://@openhps/localstorage/webpack/bootstrap","webpack://@openhps/localstorage/./dist/cjs/index.js","webpack://@openhps/localstorage/./dist/cjs/LocalStorageDriver.js","webpack://@openhps/localstorage/(webpack)/buildin/global.js","webpack://@openhps/localstorage/external \"@openhps/core\"","webpack://@openhps/localstorage/./node_modules/lz-string/libs/lz-string.js"],"names":["root","factory","exports","module","require","define","amd","self","this","__WEBPACK_EXTERNAL_MODULE__3__","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","__createBinding","k","k2","undefined","__exportStar","LocalStorageDriver","core_1","lz_string_1","DataServiceDriver","dataType","options","serializer","obj","DataSerializer","serialize","deserializer","deserialize","super","_indexKeys","namespace","chunkSize","prefix","toLowerCase","localStorage","LocalStorage","global","filter","Promise","resolve","items","_findAll","length","count","slice","forEach","_findByUID","MemoryQueryEvaluator","evaluate","JSON","parse","getItem","id","compressedStr","jsonStr","compress","decompressFromUTF16","reject","query","findAll","limit","sort","then","results","catch","data","push","a","b","map","res1","getValueFromPath","res2","localeCompare","reduce","serializedStr","stringify","compressToUTF16","setItem","includes","splice","indexOf","removeItem","all","item","delete","g","Function","e","window","LZString","f","String","fromCharCode","keyStrBase64","keyStrUriSafe","baseReverseDic","getBaseValue","alphabet","character","charAt","compressToBase64","input","res","_compress","decompressFromBase64","_decompress","index","compressed","charCodeAt","compressToUint8Array","uncompressed","buf","Uint8Array","TotalLen","current_value","decompressFromUint8Array","decompress","Array","result","join","compressToEncodedURIComponent","decompressFromEncodedURIComponent","replace","bitsPerChar","getCharFromInt","ii","context_dictionary","context_dictionaryToCreate","context_c","context_wc","context_w","context_enlargeIn","context_dictSize","context_numBits","context_data","context_data_val","context_data_position","Math","pow","resetValue","getNextValue","w","bits","resb","maxpower","power","dictionary","enlargeIn","dictSize","numBits","entry","val","position"],"mappings":"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","file":"web/openhps-localstorage.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"@openhps/core\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"@openhps/localstorage\", [\"@openhps/core\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"@openhps/localstorage\"] = factory(require(\"@openhps/core\"));\n\telse\n\t\troot[\"@openhps/localstorage\"] = factory(root[\"@openhps/core\"]);\n})((typeof self !== 'undefined' ? self : this), function(__WEBPACK_EXTERNAL_MODULE__3__) {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./LocalStorageDriver\"), exports);\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.LocalStorageDriver = void 0;\nconst core_1 = require(\"@openhps/core\");\nconst lz_string_1 = require(\"lz-string\");\nclass LocalStorageDriver extends core_1.DataServiceDriver {\n constructor(dataType, options, serializer = (obj) => core_1.DataSerializer.serialize(obj), deserializer = (obj) => core_1.DataSerializer.deserialize(obj)) {\n super(dataType);\n this._indexKeys = [];\n this.options = options || {};\n this.options.namespace = this.options.namespace || 'default';\n this.options.chunkSize = this.options.chunkSize || 10;\n this.prefix = `${this.options.namespace}.${dataType.name}`.toLowerCase();\n this.serialize = serializer;\n this.deserialize = deserializer;\n if (typeof localStorage === 'undefined' || localStorage === null) {\n var LocalStorage = require('node-localstorage').LocalStorage;\n global.localStorage = new LocalStorage(this.options.namespace);\n }\n }\n count(filter) {\n return new Promise((resolve) => {\n const items = this._findAll();\n if (filter) {\n let count = 0;\n for (let i = 0; i <= items.length; i += this.options.chunkSize) {\n const keys = items.slice(i, i + this.options.chunkSize);\n keys.forEach((key) => {\n const value = this._findByUID(key);\n if (core_1.MemoryQueryEvaluator.evaluate(value, filter)) {\n count++;\n }\n });\n }\n resolve(count);\n }\n else {\n return items.length;\n }\n });\n }\n _findAll() {\n return JSON.parse(localStorage.getItem(`${this.prefix}_keys`)) || [];\n }\n _findByUID(id) {\n const compressedStr = localStorage.getItem(`${this.prefix}.${id}`);\n const jsonStr = this.options.compress ? lz_string_1.decompressFromUTF16(compressedStr) : compressedStr;\n if (jsonStr === null) {\n return undefined;\n }\n return JSON.parse(jsonStr);\n }\n findByUID(id) {\n return new Promise((resolve, reject) => {\n const serialized = this._findByUID(id);\n if (serialized) {\n const obj = core_1.DataSerializer.deserialize(this._findByUID(id));\n resolve(obj);\n }\n else {\n reject(`${this.dataType.name} with identifier #${id} not found!`);\n }\n });\n }\n findOne(query, options = {}) {\n return new Promise((resolve, reject) => {\n this.findAll(query, {\n limit: 1,\n sort: options.sort,\n })\n .then((results) => {\n if (results.length > 0) {\n return resolve(results[0]);\n }\n else {\n resolve(undefined);\n }\n })\n .catch(reject);\n });\n }\n findAll(query, options = {}) {\n return new Promise((resolve) => {\n const items = this._findAll();\n options.limit = options.limit || items.length;\n let data = [];\n for (let i = 0; i <= items.length; i += this.options.chunkSize) {\n const keys = items.slice(i, i + this.options.chunkSize);\n keys.forEach((key) => {\n const value = this._findByUID(key);\n if (value && core_1.MemoryQueryEvaluator.evaluate(value, query)) {\n data.push(value);\n if (!options.sort && data.length >= options.limit) {\n return;\n }\n }\n });\n }\n if (options.sort) {\n data = data\n .sort((a, b) => options.sort\n .map((s) => {\n const res1 = core_1.MemoryQueryEvaluator.getValueFromPath(s[1] > 0 ? a : b, s[0])[1];\n const res2 = core_1.MemoryQueryEvaluator.getValueFromPath(s[1] > 0 ? b : a, s[0])[1];\n if (typeof res1 === 'number') {\n return res1 - res2;\n }\n else if (typeof res1 === 'string') {\n return res1.localeCompare(res2);\n }\n else {\n return 0;\n }\n })\n .reduce((a, b) => a + b))\n .slice(0, options.limit);\n }\n data = data.map(this.deserialize);\n resolve(data);\n });\n }\n insert(id, object) {\n return new Promise((resolve) => {\n const serializedStr = JSON.stringify(core_1.DataSerializer.serialize(object));\n const compressedStr = this.options.compress ? lz_string_1.compressToUTF16(serializedStr) : serializedStr;\n localStorage.setItem(`${this.prefix}.${id}`, compressedStr);\n const items = this._findAll();\n if (!items.includes(id)) {\n items.push(id);\n localStorage.setItem(`${this.prefix}_keys`, JSON.stringify(items));\n }\n resolve(object);\n });\n }\n delete(id) {\n return new Promise((resolve) => {\n const items = this._findAll();\n items.splice(items.indexOf(id), 1);\n localStorage.setItem(`${this.prefix}_keys`, JSON.stringify(items));\n localStorage.removeItem(`${this.prefix}.${id}`);\n resolve();\n });\n }\n deleteAll(filter) {\n return new Promise((resolve, reject) => {\n const items = this._findAll();\n if (filter === undefined) {\n Promise.all(items.map((item) => this.delete(item)))\n .then(() => resolve())\n .catch(reject);\n }\n else {\n for (let i = 0; i <= items.length; i += this.options.chunkSize) {\n const keys = items.slice(i, i + this.options.chunkSize);\n keys.forEach((key) => {\n const value = this._findByUID(key);\n if (core_1.MemoryQueryEvaluator.evaluate(value, filter)) {\n this.delete(key);\n }\n });\n }\n }\n resolve();\n });\n }\n}\nexports.LocalStorageDriver = LocalStorageDriver;\n//# sourceMappingURL=LocalStorageDriver.js.map","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","module.exports = __WEBPACK_EXTERNAL_MODULE__3__;","// Copyright (c) 2013 Pieroxy <pieroxy@pieroxy.net>\n// This work is free. You can redistribute it and/or modify it\n// under the terms of the WTFPL, Version 2\n// For more information see LICENSE.txt or http://www.wtfpl.net/\n//\n// For more information, the home page:\n// http://pieroxy.net/blog/pages/lz-string/testing.html\n//\n// LZ-based compression algorithm, version 1.4.4\nvar LZString = (function() {\n\n// private property\nvar f = String.fromCharCode;\nvar keyStrBase64 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\nvar keyStrUriSafe = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-$\";\nvar baseReverseDic = {};\n\nfunction getBaseValue(alphabet, character) {\n if (!baseReverseDic[alphabet]) {\n baseReverseDic[alphabet] = {};\n for (var i=0 ; i<alphabet.length ; i++) {\n baseReverseDic[alphabet][alphabet.charAt(i)] = i;\n }\n }\n return baseReverseDic[alphabet][character];\n}\n\nvar LZString = {\n compressToBase64 : function (input) {\n if (input == null) return \"\";\n var res = LZString._compress(input, 6, function(a){return keyStrBase64.charAt(a);});\n switch (res.length % 4) { // To produce valid Base64\n default: // When could this happen ?\n case 0 : return res;\n case 1 : return res+\"===\";\n case 2 : return res+\"==\";\n case 3 : return res+\"=\";\n }\n },\n\n decompressFromBase64 : function (input) {\n if (input == null) return \"\";\n if (input == \"\") return null;\n return LZString._decompress(input.length, 32, function(index) { return getBaseValue(keyStrBase64, input.charAt(index)); });\n },\n\n compressToUTF16 : function (input) {\n if (input == null) return \"\";\n return LZString._compress(input, 15, function(a){return f(a+32);}) + \" \";\n },\n\n decompressFromUTF16: function (compressed) {\n if (compressed == null) return \"\";\n if (compressed == \"\") return null;\n return LZString._decompress(compressed.length, 16384, function(index) { return compressed.charCodeAt(index) - 32; });\n },\n\n //compress into uint8array (UCS-2 big endian format)\n compressToUint8Array: function (uncompressed) {\n var compressed = LZString.compress(uncompressed);\n var buf=new Uint8Array(compressed.length*2); // 2 bytes per character\n\n for (var i=0, TotalLen=compressed.length; i<TotalLen; i++) {\n var current_value = compressed.charCodeAt(i);\n buf[i*2] = current_value >>> 8;\n buf[i*2+1] = current_value % 256;\n }\n return buf;\n },\n\n //decompress from uint8array (UCS-2 big endian format)\n decompressFromUint8Array:function (compressed) {\n if (compressed===null || compressed===undefined){\n return LZString.decompress(compressed);\n } else {\n var buf=new Array(compressed.length/2); // 2 bytes per character\n for (var i=0, TotalLen=buf.length; i<TotalLen; i++) {\n buf[i]=compressed[i*2]*256+compressed[i*2+1];\n }\n\n var result = [];\n buf.forEach(function (c) {\n result.push(f(c));\n });\n return LZString.decompress(result.join(''));\n\n }\n\n },\n\n\n //compress into a string that is already URI encoded\n compressToEncodedURIComponent: function (input) {\n if (input == null) return \"\";\n return LZString._compress(input, 6, function(a){return keyStrUriSafe.charAt(a);});\n },\n\n //decompress from an output of compressToEncodedURIComponent\n decompressFromEncodedURIComponent:function (input) {\n if (input == null) return \"\";\n if (input == \"\") return null;\n input = input.replace(/ /g, \"+\");\n return LZString._decompress(input.length, 32, function(index) { return getBaseValue(keyStrUriSafe, input.charAt(index)); });\n },\n\n compress: function (uncompressed) {\n return LZString._compress(uncompressed, 16, function(a){return f(a);});\n },\n _compress: function (uncompressed, bitsPerChar, getCharFromInt) {\n if (uncompressed == null) return \"\";\n var i, value,\n context_dictionary= {},\n context_dictionaryToCreate= {},\n context_c=\"\",\n context_wc=\"\",\n context_w=\"\",\n context_enlargeIn= 2, // Compensate for the first entry which should not count\n context_dictSize= 3,\n context_numBits= 2,\n context_data=[],\n context_data_val=0,\n context_data_position=0,\n ii;\n\n for (ii = 0; ii < uncompressed.length; ii += 1) {\n context_c = uncompressed.charAt(ii);\n if (!Object.prototype.hasOwnProperty.call(context_dictionary,context_c)) {\n context_dictionary[context_c] = context_dictSize++;\n context_dictionaryToCreate[context_c] = true;\n }\n\n context_wc = context_w + context_c;\n if (Object.prototype.hasOwnProperty.call(context_dictionary,context_wc)) {\n context_w = context_wc;\n } else {\n if (Object.prototype.hasOwnProperty.call(context_dictionaryToCreate,context_w)) {\n if (context_w.charCodeAt(0)<256) {\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n }\n value = context_w.charCodeAt(0);\n for (i=0 ; i<8 ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n } else {\n value = 1;\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1) | value;\n if (context_data_position ==bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = 0;\n }\n value = context_w.charCodeAt(0);\n for (i=0 ; i<16 ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n delete context_dictionaryToCreate[context_w];\n } else {\n value = context_dictionary[context_w];\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n\n\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n // Add wc to the dictionary.\n context_dictionary[context_wc] = context_dictSize++;\n context_w = String(context_c);\n }\n }\n\n // Output the code for w.\n if (context_w !== \"\") {\n if (Object.prototype.hasOwnProperty.call(context_dictionaryToCreate,context_w)) {\n if (context_w.charCodeAt(0)<256) {\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n }\n value = context_w.charCodeAt(0);\n for (i=0 ; i<8 ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n } else {\n value = 1;\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1) | value;\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = 0;\n }\n value = context_w.charCodeAt(0);\n for (i=0 ; i<16 ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n delete context_dictionaryToCreate[context_w];\n } else {\n value = context_dictionary[context_w];\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n\n\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n }\n\n // Mark the end of the stream\n value = 2;\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n\n // Flush the last char\n while (true) {\n context_data_val = (context_data_val << 1);\n if (context_data_position == bitsPerChar-1) {\n context_data.push(getCharFromInt(context_data_val));\n break;\n }\n else context_data_position++;\n }\n return context_data.join('');\n },\n\n decompress: function (compressed) {\n if (compressed == null) return \"\";\n if (compressed == \"\") return null;\n return LZString._decompress(compressed.length, 32768, function(index) { return compressed.charCodeAt(index); });\n },\n\n _decompress: function (length, resetValue, getNextValue) {\n var dictionary = [],\n next,\n enlargeIn = 4,\n dictSize = 4,\n numBits = 3,\n entry = \"\",\n result = [],\n i,\n w,\n bits, resb, maxpower, power,\n c,\n data = {val:getNextValue(0), position:resetValue, index:1};\n\n for (i = 0; i < 3; i += 1) {\n dictionary[i] = i;\n }\n\n bits = 0;\n maxpower = Math.pow(2,2);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n\n switch (next = bits) {\n case 0:\n bits = 0;\n maxpower = Math.pow(2,8);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n c = f(bits);\n break;\n case 1:\n bits = 0;\n maxpower = Math.pow(2,16);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n c = f(bits);\n break;\n case 2:\n return \"\";\n }\n dictionary[3] = c;\n w = c;\n result.push(c);\n while (true) {\n if (data.index > length) {\n return \"\";\n }\n\n bits = 0;\n maxpower = Math.pow(2,numBits);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n\n switch (c = bits) {\n case 0:\n bits = 0;\n maxpower = Math.pow(2,8);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n\n dictionary[dictSize++] = f(bits);\n c = dictSize-1;\n enlargeIn--;\n break;\n case 1:\n bits = 0;\n maxpower = Math.pow(2,16);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n dictionary[dictSize++] = f(bits);\n c = dictSize-1;\n enlargeIn--;\n break;\n case 2:\n return result.join('');\n }\n\n if (enlargeIn == 0) {\n enlargeIn = Math.pow(2, numBits);\n numBits++;\n }\n\n if (dictionary[c]) {\n entry = dictionary[c];\n } else {\n if (c === dictSize) {\n entry = w + w.charAt(0);\n } else {\n return null;\n }\n }\n result.push(entry);\n\n // Add w+entry[0] to the dictionary.\n dictionary[dictSize++] = w + entry.charAt(0);\n enlargeIn--;\n\n w = entry;\n\n if (enlargeIn == 0) {\n enlargeIn = Math.pow(2, numBits);\n numBits++;\n }\n\n }\n }\n};\n return LZString;\n})();\n\nif (typeof define === 'function' && define.amd) {\n define(function () { return LZString; });\n} else if( typeof module !== 'undefined' && module != null ) {\n module.exports = LZString\n}\n"],"sourceRoot":""}
{
"name": "@openhps/localstorage",
"version": "0.1.0-alpha.2",
"version": "0.1.0-alpha.3",
"description": "Open Hybrid Positioning System",

@@ -57,3 +57,3 @@ "author": "Maxim Van de Wynckel",

"peerDependencies": {
"@openhps/core": ">=0.2.0-alpha.17",
"@openhps/core": ">=0.3.0-alpha.58",
"reflect-metadata": ">=0.1.13"

@@ -64,17 +64,17 @@ },

"@commitlint/config-conventional": "^11.0.0",
"@openhps/core": ">=0.2.0-alpha.17",
"@openhps/core": "^0.3.0-alpha.58",
"@purtuga/esm-webpack-plugin": "^1.5.0",
"@types/chai": "^4.2.14",
"@types/chai": "^4.2.18",
"@types/lz-string": "^1.3.34",
"@types/mocha": "^8.2.0",
"@types/node": "^12.19.9",
"@typescript-eslint/eslint-plugin": ">=4.10.0",
"@typescript-eslint/parser": ">=4.10.0",
"chai": "^4.2.0",
"eslint": ">=7.15.0",
"eslint-config-prettier": ">=7.0.0",
"eslint-plugin-import": ">=2.22.1",
"eslint-plugin-jsdoc": ">=30.7.8",
"eslint-plugin-prettier": ">=3.3.0",
"husky": "^4.3.6",
"@types/mocha": "^8.2.2",
"@types/node": "^12.20.13",
"@typescript-eslint/eslint-plugin": "^4.24.0",
"@typescript-eslint/parser": "^4.24.0",
"chai": "^4.3.4",
"eslint": "^7.26.0",
"eslint-config-prettier": "^8.3.0",
"eslint-plugin-import": "^2.23.2",
"eslint-plugin-jsdoc": "^34.8.1",
"eslint-plugin-prettier": "^3.4.0",
"husky": "^4.3.8",
"jenkins-mocha": "^8.0.0",

@@ -84,12 +84,12 @@ "mocha": "^6.2.3",

"nyc": "^15.1.0",
"prettier": "^2.2.1",
"prettier": "^2.3.0",
"reflect-metadata": ">=0.1.13",
"shx": "^0.3.3",
"standard-version": "^9.1.0",
"standard-version": "^9.3.0",
"terser-webpack-plugin": "^4.2.3",
"ts-node": ">=8.10.2",
"typedoc": ">=0.20.7",
"typescript": ">=4.1.3",
"webpack": "^4.45.0",
"webpack-cli": "^4.3.0"
"typedoc": "^0.20.36",
"typescript": "^4.2.4",
"webpack": "^4.46.0",
"webpack-cli": "^4.7.0"
},

@@ -96,0 +96,0 @@ "nyc": {

@@ -21,3 +21,3 @@ <h1 align="center">

<h3 align="center">
<a href="https://github.com/OpenHPS/openhps-core">@openhps/core</a> &mdash; <a href="https://openhps.org/docs/csv">API</a>
<a href="https://github.com/OpenHPS/openhps-core">@openhps/core</a> &mdash; <a href="https://openhps.org/docs/localstorage">API</a>
</h3>

@@ -27,4 +27,11 @@

This repository contains the [LocalStorage](https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage) component for OpenHPS (Open Source Hybrid Positioning System). It includes a data service that can be used to store data frames, objects and node data in a browser local strage.
OpenHPS is a data processing positioning framework. It is designed to support many different use cases ranging from simple positioning such as detecting the position of a pawn on a chessboard using RFID, to indoor positioning methods using multiple cameras.
## Features
- ```LocalStrageDriver``` that can be used to initialize a ```DataService``` or as a standalone data service.
## Getting Started
If you have [npm installed](https://www.npmjs.com/get-npm), start using @openhps/localstorage with the following command.
If you have [npm installed](https://www.npmjs.com/get-npm), start using @openhps/core with the following command.
```bash

@@ -34,2 +41,33 @@ npm install @openhps/localstorage --save

### Usage
You can use a ```LocalStorageDriver``` in a data service such as a ```DataObjectService``` to
use the driver to store data objects of a specific type.
```typescript
import { ModelBuilder, DataObjectService, DataObject, ReferenceSpace } from '@openhps/core';
import { LocalStorageDriver } from '@openhps/localstorage';
ModelBuilder.create()
.addService(new DataObjectService(new LocalStorageDriver(DataObject, {
namespace: 'myapp'
})))
.addService(new DataObjectService(new LocalStorageDriver(ReferenceSpace, {
namespace: 'myapp',
compress: true // Compress data
})))
.addShape(/* ... */)
.build().then(model => {
/* ... */
});
```
#### Driver Options
```typescript
{
compress: false, // Compress stored data with an LZ-based compression
chunkSize: 10, // Chunk size for querying
namespace: 'default' // Namespace used for storage
}
```
## Contributors

@@ -36,0 +74,0 @@ The framework is open source and is mainly developed by PhD Student Maxim Van de Wynckel as part of his research towards *Hybrid Positioning and Implicit Human-Computer Interaction* under the supervision of Prof. Dr. Beat Signer.

@@ -1,1 +0,1 @@

export * from './service';
export * from './LocalStorageDriver';
export * from './LocalStorageDriver';
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __exportStar = (this && this.__exportStar) || function(m, exports) {
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
};
Object.defineProperty(exports, "__esModule", { value: true });
__exportStar(require("./LocalStorageDriver"), exports);
//# sourceMappingURL=index.js.map
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/service/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,uDAAqC"}
import { DataServiceDriver, FilterQuery } from '@openhps/core';
export declare class LocalStorageDriver<I, T> extends DataServiceDriver<I, T> {
namespace: string;
protected _indexKeys: string[];
constructor(dataType: new () => T, namespace?: string);
createIndex(index: string): Promise<void>;
private _createIndexes;
private _deleteIndexes;
findByUID(id: I): Promise<T>;
findOne(query?: FilterQuery<T>): Promise<T>;
findAll(query?: FilterQuery<T>): Promise<T[]>;
insert(id: I, object: T): Promise<T>;
delete(id: I): Promise<void>;
deleteAll(): Promise<void>;
}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.LocalStorageDriver = void 0;
const core_1 = require("@openhps/core");
const lz_string_1 = require("lz-string");
class LocalStorageDriver extends core_1.DataServiceDriver {
constructor(dataType, namespace = 'default') {
super(dataType);
this._indexKeys = [];
this.namespace = `${namespace}.${dataType.name}`.toLowerCase();
if (typeof localStorage === 'undefined' || localStorage === null) {
var LocalStorage = require('node-localstorage').LocalStorage;
global.localStorage = new LocalStorage(namespace);
}
}
createIndex(index) {
return new Promise((resolve) => {
this._indexKeys.push(index);
resolve();
});
}
_createIndexes(id, object) {
this._indexKeys.forEach((key) => {
localStorage.setItem(`${this.namespace}.${key}[]`, null);
});
}
_deleteIndexes(id) {
this._indexKeys.forEach((key) => {
const values = localStorage.getItem(`${this.namespace}.${key}`);
});
}
findByUID(id) {
return new Promise((resolve) => {
const compressedStr = localStorage.getItem(`${this.namespace}.uid.${id}`);
const jsonStr = lz_string_1.decompress(compressedStr);
const obj = core_1.DataSerializer.deserialize(JSON.parse(jsonStr));
resolve(obj);
});
}
findOne(query) {
return new Promise((_, reject) => {
reject(new Error(`Not implemented!`));
});
}
findAll(query) {
return new Promise((resolve, reject) => {
const items = JSON.parse(localStorage.getItem(`${this.namespace}_keys`)) || [];
Promise.all(items.map((item) => this.findByUID(item)))
.then((items) => {
resolve(items);
})
.catch(reject);
});
}
insert(id, object) {
return new Promise((resolve) => {
const serializedStr = JSON.stringify(core_1.DataSerializer.serialize(object));
localStorage.setItem(`${this.namespace}.${id}`, lz_string_1.compress(serializedStr));
const items = JSON.parse(localStorage.getItem(`${this.namespace}_keys`)) || [];
items.push(id);
localStorage.setItem(`${this.namespace}_keys`, JSON.stringify(items));
resolve(object);
});
}
delete(id) {
return new Promise((resolve) => {
localStorage.removeItem(`${this.namespace}.${id}`);
resolve();
});
}
deleteAll() {
return new Promise((resolve, reject) => {
const items = JSON.parse(localStorage.getItem(`${this.namespace}_keys`)) || [];
Promise.all(items.map((item) => this.delete(item)))
.then(() => {
resolve();
})
.catch(reject);
});
}
}
exports.LocalStorageDriver = LocalStorageDriver;
//# sourceMappingURL=LocalStorageDriver.js.map
{"version":3,"file":"LocalStorageDriver.js","sourceRoot":"","sources":["../../../src/service/LocalStorageDriver.ts"],"names":[],"mappings":"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"}
export * from './LocalStorageDriver';
export * from './LocalStorageDriver';
//# sourceMappingURL=index.js.map
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/service/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC"}
import { DataServiceDriver, FilterQuery } from '@openhps/core';
export declare class LocalStorageDriver<I, T> extends DataServiceDriver<I, T> {
namespace: string;
protected _indexKeys: string[];
constructor(dataType: new () => T, namespace?: string);
createIndex(index: string): Promise<void>;
private _createIndexes;
private _deleteIndexes;
findByUID(id: I): Promise<T>;
findOne(query?: FilterQuery<T>): Promise<T>;
findAll(query?: FilterQuery<T>): Promise<T[]>;
insert(id: I, object: T): Promise<T>;
delete(id: I): Promise<void>;
deleteAll(): Promise<void>;
}
import { DataSerializer, DataServiceDriver } from '@openhps/core';
import { compress, decompress } from 'lz-string';
export class LocalStorageDriver extends DataServiceDriver {
constructor(dataType, namespace = 'default') {
super(dataType);
this._indexKeys = [];
this.namespace = `${namespace}.${dataType.name}`.toLowerCase();
if (typeof localStorage === 'undefined' || localStorage === null) {
var LocalStorage = require('node-localstorage').LocalStorage;
global.localStorage = new LocalStorage(namespace);
}
}
createIndex(index) {
return new Promise((resolve) => {
this._indexKeys.push(index);
resolve();
});
}
_createIndexes(id, object) {
this._indexKeys.forEach((key) => {
localStorage.setItem(`${this.namespace}.${key}[]`, null);
});
}
_deleteIndexes(id) {
this._indexKeys.forEach((key) => {
const values = localStorage.getItem(`${this.namespace}.${key}`);
});
}
findByUID(id) {
return new Promise((resolve) => {
const compressedStr = localStorage.getItem(`${this.namespace}.uid.${id}`);
const jsonStr = decompress(compressedStr);
const obj = DataSerializer.deserialize(JSON.parse(jsonStr));
resolve(obj);
});
}
findOne(query) {
return new Promise((_, reject) => {
reject(new Error(`Not implemented!`));
});
}
findAll(query) {
return new Promise((resolve, reject) => {
const items = JSON.parse(localStorage.getItem(`${this.namespace}_keys`)) || [];
Promise.all(items.map((item) => this.findByUID(item)))
.then((items) => {
resolve(items);
})
.catch(reject);
});
}
insert(id, object) {
return new Promise((resolve) => {
const serializedStr = JSON.stringify(DataSerializer.serialize(object));
localStorage.setItem(`${this.namespace}.${id}`, compress(serializedStr));
const items = JSON.parse(localStorage.getItem(`${this.namespace}_keys`)) || [];
items.push(id);
localStorage.setItem(`${this.namespace}_keys`, JSON.stringify(items));
resolve(object);
});
}
delete(id) {
return new Promise((resolve) => {
localStorage.removeItem(`${this.namespace}.${id}`);
resolve();
});
}
deleteAll() {
return new Promise((resolve, reject) => {
const items = JSON.parse(localStorage.getItem(`${this.namespace}_keys`)) || [];
Promise.all(items.map((item) => this.delete(item)))
.then(() => {
resolve();
})
.catch(reject);
});
}
}
//# sourceMappingURL=LocalStorageDriver.js.map
{"version":3,"file":"LocalStorageDriver.js","sourceRoot":"","sources":["../../../src/service/LocalStorageDriver.ts"],"names":[],"mappings":"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"}
export * from './LocalStorageDriver';
import { DataSerializer, DataServiceDriver, FilterQuery } from '@openhps/core';
import { compress, decompress } from 'lz-string';
export class LocalStorageDriver<I, T> extends DataServiceDriver<I, T> {
public namespace: string;
protected _indexKeys: string[] = [];
constructor(dataType: new () => T, namespace = 'default') {
super((dataType as unknown) as new () => T);
this.namespace = `${namespace}.${dataType.name}`.toLowerCase();
if (typeof localStorage === 'undefined' || localStorage === null) {
// eslint-disable-next-line
var LocalStorage = require('node-localstorage').LocalStorage;
global.localStorage = new LocalStorage(namespace);
}
}
public createIndex(index: string): Promise<void> {
return new Promise((resolve) => {
this._indexKeys.push(index);
resolve();
});
}
private _createIndexes(id: I, object: T): void {
this._indexKeys.forEach((key) => {
localStorage.setItem(`${this.namespace}.${key}[]`, null);
});
}
private _deleteIndexes(id: I): void {
this._indexKeys.forEach((key) => {
const values = localStorage.getItem(`${this.namespace}.${key}`);
});
}
public findByUID(id: I): Promise<T> {
return new Promise((resolve) => {
const compressedStr = localStorage.getItem(`${this.namespace}.uid.${id}`);
const jsonStr = decompress(compressedStr);
const obj = DataSerializer.deserialize<T>(JSON.parse(jsonStr));
resolve(obj);
});
}
public findOne(query?: FilterQuery<T>): Promise<T> {
return new Promise<T>((_, reject) => {
reject(new Error(`Not implemented!`));
});
}
public findAll(query?: FilterQuery<T>): Promise<T[]> {
return new Promise<T[]>((resolve, reject) => {
const items: I[] = JSON.parse(localStorage.getItem(`${this.namespace}_keys`)) || [];
Promise.all(items.map((item) => this.findByUID(item)))
.then((items) => {
resolve(items);
})
.catch(reject);
});
}
public insert(id: I, object: T): Promise<T> {
return new Promise<T>((resolve) => {
const serializedStr = JSON.stringify(DataSerializer.serialize(object));
localStorage.setItem(`${this.namespace}.${id}`, compress(serializedStr));
const items: I[] = JSON.parse(localStorage.getItem(`${this.namespace}_keys`)) || [];
items.push(id);
localStorage.setItem(`${this.namespace}_keys`, JSON.stringify(items));
resolve(object);
});
}
public delete(id: I): Promise<void> {
return new Promise<void>((resolve) => {
localStorage.removeItem(`${this.namespace}.${id}`);
resolve();
});
}
public deleteAll(): Promise<void> {
return new Promise<void>((resolve, reject) => {
const items: I[] = JSON.parse(localStorage.getItem(`${this.namespace}_keys`)) || [];
Promise.all(items.map((item) => this.delete(item)))
.then(() => {
resolve();
})
.catch(reject);
});
}
}