1 |
- {"version":3,"file":"fesm5.js","sources":["../../src/serialiser/createBlob.ts","../../src/serialiser/index.ts","../../src/clone.ts","../../src/getKeyPrefix.ts","../../src/executeCallback.ts","../../src/getCallback.ts","../../src/dropInstanceCommon.ts","../../src/normaliseKey.ts","../../src/index.ts"],"sourcesContent":["declare const BlobBuilder: any;\ndeclare const MozBlobBuilder: any;\ndeclare const WebKitBlobBuilder: any;\n\n/**\n * Abstracts constructing a Blob object, so it also works in older\n * browsers that don't support the native Blob constructor. (i.e.\n * old QtWebKit versions, at least).\n * Abstracts constructing a Blob object, so it also works in older\n * browsers that don't support the native Blob constructor. (i.e.\n * old QtWebKit versions, at least).\n *\n * @param parts\n * @param properties\n */\nexport function createBlob(parts: any, properties: any): Blob {\n /* global BlobBuilder,MSBlobBuilder,MozBlobBuilder,WebKitBlobBuilder */\n parts = parts || [];\n properties = properties || {};\n try {\n return new Blob(parts, properties);\n } catch (e) {\n if (e.name !== 'TypeError') {\n throw e;\n }\n\n //tslint:disable-next-line:variable-name\n const Builder: any = typeof BlobBuilder !== 'undefined' ? BlobBuilder\n : typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder\n : typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder\n : WebKitBlobBuilder;\n\n const builder = new Builder();\n for (let i = 0; i < parts.length; i += 1) {\n builder.append(parts[i]);\n }\n\n return builder.getBlob(properties.type);\n }\n}\n","import {createBlob} from './createBlob';\n\n// Sadly, the best way to save binary data in WebSQL/localStorage is serializing\n// it to Base64, so this is how we store it to prevent very strange errors with less\n// verbose ways of binary <-> string data storage.\n\nconst enum Consts {\n BASE_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',\n BLOB_TYPE_PREFIX = '~~local_forage_type~',\n SERIALIZED_MARKER = '__lfsc__:',\n TYPE_ARRAYBUFFER = 'arbf',\n TYPE_BLOB = 'blob',\n TYPE_INT8ARRAY = 'si08',\n TYPE_UINT8ARRAY = 'ui08',\n TYPE_UINT8CLAMPEDARRAY = 'uic8',\n TYPE_INT16ARRAY = 'si16',\n TYPE_INT32ARRAY = 'si32',\n TYPE_UINT16ARRAY = 'ur16',\n TYPE_UINT32ARRAY = 'ui32',\n TYPE_FLOAT32ARRAY = 'fl32',\n TYPE_FLOAT64ARRAY = 'fl64'\n}\n\nconst BLOB_TYPE_PREFIX_REGEX = /^~~local_forage_type~([^~]+)~/;\nconst SERIALIZED_MARKER_LENGTH = Consts.SERIALIZED_MARKER.length;\nconst TYPE_SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER_LENGTH + Consts.TYPE_ARRAYBUFFER.length;\n\n//tslint:disable:no-magic-numbers no-bitwise prefer-switch no-unbound-method\n\nconst toString = Object.prototype.toString;\n\nexport function stringToBuffer(serializedString: string): ArrayBuffer {\n // Fill the string into a ArrayBuffer.\n let bufferLength = serializedString.length * 0.75;\n const len = serializedString.length;\n\n if (serializedString[serializedString.length - 1] === '=') {\n bufferLength--;\n if (serializedString[serializedString.length - 2] === '=') {\n bufferLength--;\n }\n }\n\n const buffer = new ArrayBuffer(bufferLength);\n const bytes = new Uint8Array(buffer);\n\n for (let i = 0, p = 0; i < len; i += 4) {\n const encoded1 = Consts.BASE_CHARS.indexOf(serializedString[i]);\n const encoded2 = Consts.BASE_CHARS.indexOf(serializedString[i + 1]);\n const encoded3 = Consts.BASE_CHARS.indexOf(serializedString[i + 2]);\n const encoded4 = Consts.BASE_CHARS.indexOf(serializedString[i + 3]);\n\n bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n }\n\n return buffer;\n}\n\n/**\n * Converts a buffer to a string to store, serialized, in the backend\n * storage library.\n */\nexport function bufferToString(buffer: ArrayBufferLike): string {\n // base64-arraybuffer\n const bytes = new Uint8Array(buffer);\n let base64String = '';\n\n for (let i = 0; i < bytes.length; i += 3) {\n /*jslint bitwise: true */\n base64String += Consts.BASE_CHARS[bytes[i] >> 2];\n base64String += Consts.BASE_CHARS[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n base64String +=\n Consts.BASE_CHARS[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n base64String += Consts.BASE_CHARS[bytes[i + 2] & 63];\n }\n\n if (bytes.length % 3 === 2) {\n base64String = base64String.substring(0, base64String.length - 1) + '=';\n } else if (bytes.length % 3 === 1) {\n base64String = base64String.substring(0, base64String.length - 2) + '==';\n }\n\n return base64String;\n}\n\n/**\n * Serialize a value, afterwards executing a callback (which usually\n * instructs the `setItem()` callback/promise to be executed). This is how\n * we store binary data with localStorage.\n * @param value\n * @param callback\n */\n\nexport function serialize(this: any, value: any, callback: any): void {\n let valueType = '';\n\n if (value) {\n valueType = toString.call(value);\n }\n\n // Cannot use `value instanceof ArrayBuffer` or such here, as these\n // checks fail when running the tests using casper.js...\n if (value && (valueType === '[object ArrayBuffer]' ||\n (value.buffer && toString.call(value.buffer) === '[object ArrayBuffer]'))) {\n // Convert binary arrays to a string and prefix the string with\n // a special marker.\n let buffer: ArrayBufferLike;\n let marker: string = Consts.SERIALIZED_MARKER;\n\n if (value instanceof ArrayBuffer) {\n buffer = value;\n marker += Consts.TYPE_ARRAYBUFFER;\n } else {\n buffer = value.buffer;\n\n if (valueType === '[object Int8Array]') {\n marker += Consts.TYPE_INT8ARRAY;\n } else if (valueType === '[object Uint8Array]') {\n marker += Consts.TYPE_UINT8ARRAY;\n } else if (valueType === '[object Uint8ClampedArray]') {\n marker += Consts.TYPE_UINT8CLAMPEDARRAY;\n } else if (valueType === '[object Int16Array]') {\n marker += Consts.TYPE_INT16ARRAY;\n } else if (valueType === '[object Uint16Array]') {\n marker += Consts.TYPE_UINT16ARRAY;\n } else if (valueType === '[object Int32Array]') {\n marker += Consts.TYPE_INT32ARRAY;\n } else if (valueType === '[object Uint32Array]') {\n marker += Consts.TYPE_UINT32ARRAY;\n } else if (valueType === '[object Float32Array]') {\n marker += Consts.TYPE_FLOAT32ARRAY;\n } else if (valueType === '[object Float64Array]') {\n marker += Consts.TYPE_FLOAT64ARRAY;\n } else {\n callback(new Error('Failed to get type for BinaryArray'));\n }\n }\n\n callback(marker + bufferToString(buffer));\n } else if (valueType === '[object Blob]') {\n // Convert the blob to a binaryArray and then to a string.\n const fileReader = new FileReader();\n\n fileReader.onload = function () {\n // Backwards-compatible prefix for the blob type.\n //tslint:disable-next-line:restrict-plus-operands\n const str = `${Consts.BLOB_TYPE_PREFIX + value.type}~${bufferToString(<ArrayBufferLike>this.result)}`;\n\n callback(Consts.SERIALIZED_MARKER + Consts.TYPE_BLOB + str);\n };\n\n fileReader.readAsArrayBuffer(value);\n } else {\n try {\n callback(JSON.stringify(value));\n } catch (e) {\n console.error('Couldn\\'t convert value into a JSON string: ', value);\n\n callback(null, e);\n }\n }\n}\n\n/**\n * Deserialize data we've inserted into a value column/field. We place\n * special markers into our strings to mark them as encoded; this isn't\n * as nice as a meta field, but it's the only sane thing we can do whilst\n * keeping localStorage support intact.\n *\n * Oftentimes this will just deserialize JSON content, but if we have a\n * special marker (SERIALIZED_MARKER, defined above), we will extract\n * some kind of arraybuffer/binary data/typed array out of the string.\n * @param value\n */\nexport function deserialize(value: string): any {\n // If we haven't marked this string as being specially serialized (i.e.\n // something other than serialized JSON), we can just return it and be\n // done with it.\n if (value.substring(0, SERIALIZED_MARKER_LENGTH) !== Consts.SERIALIZED_MARKER) {\n return JSON.parse(value);\n }\n\n // The following code deals with deserializing some kind of Blob or\n // TypedArray. First we separate out the type of data we're dealing\n // with from the data itself.\n let serializedString = value.substring(TYPE_SERIALIZED_MARKER_LENGTH);\n const type = value.substring(SERIALIZED_MARKER_LENGTH, TYPE_SERIALIZED_MARKER_LENGTH);\n\n let blobType: any;\n // Backwards-compatible blob type serialization strategy.\n // DBs created with older versions of localForage will simply not have the blob type.\n if (type === Consts.TYPE_BLOB && BLOB_TYPE_PREFIX_REGEX.test(serializedString)) {\n const matcher = <RegExpMatchArray>serializedString.match(BLOB_TYPE_PREFIX_REGEX);\n blobType = matcher[1];\n serializedString = serializedString.substring(matcher[0].length);\n }\n const buffer = stringToBuffer(serializedString);\n\n // Return the right type based on the code/type set during\n // serialization.\n switch (type) {\n case Consts.TYPE_ARRAYBUFFER:\n return buffer;\n case Consts.TYPE_BLOB:\n return createBlob([buffer], {type: blobType});\n case Consts.TYPE_INT8ARRAY:\n return new Int8Array(buffer);\n case Consts.TYPE_UINT8ARRAY:\n return new Uint8Array(buffer);\n case Consts.TYPE_UINT8CLAMPEDARRAY:\n return new Uint8ClampedArray(buffer);\n case Consts.TYPE_INT16ARRAY:\n return new Int16Array(buffer);\n case Consts.TYPE_UINT16ARRAY:\n return new Uint16Array(buffer);\n case Consts.TYPE_INT32ARRAY:\n return new Int32Array(buffer);\n case Consts.TYPE_UINT32ARRAY:\n return new Uint32Array(buffer);\n case Consts.TYPE_FLOAT32ARRAY:\n return new Float32Array(buffer);\n case Consts.TYPE_FLOAT64ARRAY:\n return new Float64Array(buffer);\n default:\n throw new Error('Unkown type: ' + type);\n }\n}\n","export function clone<T>(obj: T): T {\n if (obj === null || typeof(obj) !== 'object' || 'isActiveClone' in obj) {\n return obj;\n }\n\n const temp: any = obj instanceof Date ? new Date(<any>obj) : (obj.constructor());\n\n for (const key of Object.keys(obj)) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n obj['isActiveClone'] = null;\n temp[key] = clone(obj[key]);\n delete obj['isActiveClone'];\n }\n }\n\n return temp;\n}\n","import {LocalForageOptions} from './types';\n\nexport function getKeyPrefix(options: LocalForageOptions, defaultConfig: LocalForageOptions): string {\n return `${options.name || defaultConfig.name}/${options.storeName || defaultConfig.storeName}/`;\n}\n","export function executeCallback(promise: Promise<any>, callback?: any): void {\n if (callback) {\n promise.then(\n (result: any) => {\n callback(null, result);\n },\n (error: any) => {\n callback(error);\n }\n );\n }\n}\n","export function getCallback(..._args: any[]): any {\n if (arguments.length && typeof arguments[arguments.length - 1] === 'function') {\n return arguments[arguments.length - 1];\n }\n}\n","import {getCallback} from './getCallback';\nimport {getKeyPrefix} from './getKeyPrefix';\n\nexport interface DropInstanceCommonOutput {\n callback: any;\n\n promise: Promise<string>;\n}\n\n//tslint:disable-next-line:no-ignored-initial-value\nexport function dropInstanceCommon(this: any, options: any, callback?: any): DropInstanceCommonOutput {\n callback = getCallback.apply(this, arguments);\n\n options = (typeof options !== 'function' && options) || {};\n if (!options.name) {\n const currentConfig = this.config();\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n\n let promise: Promise<string>;\n if (!options.name) {\n promise = Promise.reject('Invalid arguments');\n } else {\n promise = new Promise<string>(resolve => {\n if (!options.storeName) {\n resolve(`${options.name}/`);\n } else {\n resolve(getKeyPrefix(options, this._defaultConfig));\n }\n });\n }\n\n return {promise, callback};\n}\n","export function normaliseKey(key: any): string {\n // Cast the key to a string, as that's all we can set as a key.\n if (typeof key !== 'string') {\n console.warn(`${key} used as a key, but it is not a string.`);\n key = String(key);\n }\n\n return key;\n}\n","import {bufferToString, deserialize, serialize, stringToBuffer} from './serialiser';\n\nexport {clone} from './clone';\nexport {getKeyPrefix} from './getKeyPrefix';\nexport {executeCallback} from './executeCallback';\nexport {LocalForageDbInstanceOptions, LocalForageOptions} from './types';\nexport {getCallback} from './getCallback';\nexport {dropInstanceCommon, DropInstanceCommonOutput} from './dropInstanceCommon';\nexport {normaliseKey} from './normaliseKey';\n\nexport const serialiser = {\n bufferToString,\n deserialize,\n serialize,\n stringToBuffer\n};\n"],"names":["tslib_1.__values"],"mappings":"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"}
|