jaydata
Version:
Cross-platform HTML5 data-management, JavaScript Language Query (JSLQ) support for OData, SQLite, WebSQL, IndexedDB, YQL and Facebook (packaged for Node.JS)
16 lines (15 loc) • 21.4 kB
JavaScript
// JayData 1.5.10
// Dual licensed under MIT and GPL v2
// Copyright JayStack Technologies (http://jaydata.org/licensing)
//
// JayData is a standards-based, cross-platform Javascript library and a set of
// practices to access and manipulate data from various online and offline sources.
//
// Credits:
// Hajnalka Battancs, Dániel József, János Roden, László Horváth, Péter Nochta
// Péter Zentai, Róbert Bónay, Szabolcs Czinege, Viktor Borza, Viktor Lázár,
// Zoltán Gyebrovszki, Gábor Dolla
//
// More info: http://jaydata.org
!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define("jaydata/indexeddb",["jaydata/core"],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.$data=e()}}(function(){return function e(t,a,r){function o(i,u){if(!a[i]){if(!t[i]){var d="function"==typeof require&&require;if(!u&&d)return d(i,!0);if(n)return n(i,!0);var l=new Error("Cannot find module '"+i+"'");throw l.code="MODULE_NOT_FOUND",l}var s=a[i]={exports:{}};t[i][0].call(s.exports,function(e){var a=t[i][1][e];return o(a?a:e)},s,s.exports,e,t,a,r)}return a[i].exports}for(var n="function"==typeof require&&require,i=0;i<r.length;i++)o(r[i]);return o}({1:[function(e,t,a){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}var o=e("jaydata/core"),n=r(o);n["default"].IndexedDBConverter={fromDb:{"$data.Enum":function(e,t){return n["default"].Container.convertTo(e,t)},"$data.Byte":n["default"].Container.proxyConverter,"$data.SByte":n["default"].Container.proxyConverter,"$data.Decimal":n["default"].Container.proxyConverter,"$data.Float":n["default"].Container.proxyConverter,"$data.Int16":n["default"].Container.proxyConverter,"$data.Int64":n["default"].Container.proxyConverter,"$data.Integer":n["default"].Container.proxyConverter,"$data.Int32":n["default"].Container.proxyConverter,"$data.Number":n["default"].Container.proxyConverter,"$data.Date":n["default"].Container.proxyConverter,"$data.DateTimeOffset":n["default"].Container.proxyConverter,"$data.Duration":n["default"].Container.proxyConverter,"$data.Day":n["default"].Container.proxyConverter,"$data.Time":n["default"].Container.proxyConverter,"$data.String":n["default"].Container.proxyConverter,"$data.Boolean":n["default"].Container.proxyConverter,"$data.Blob":function(e){return e?n["default"].Container.convertTo(e,n["default"].Blob):e},"$data.Array":function(e){return void 0===e?new n["default"].Array:e},"$data.Object":n["default"].Container.proxyConverter,"$data.Guid":function(e){return e?n["default"].parseGuid(e).toString():e},"$data.GeographyPoint":function(e){return e?new n["default"].GeographyPoint(e):e},"$data.GeographyLineString":function(e){return e?new n["default"].GeographyLineString(e):e},"$data.GeographyPolygon":function(e){return e?new n["default"].GeographyPolygon(e):e},"$data.GeographyMultiPoint":function(e){return e?new n["default"].GeographyMultiPoint(e):e},"$data.GeographyMultiLineString":function(e){return e?new n["default"].GeographyMultiLineString(e):e},"$data.GeographyMultiPolygon":function(e){return e?new n["default"].GeographyMultiPolygon(e):e},"$data.GeographyCollection":function(e){return e?new n["default"].GeographyCollection(e):e},"$data.GeometryPoint":function(e){return e?new n["default"].GeometryPoint(e):e},"$data.GeometryLineString":function(e){return e?new n["default"].GeometryLineString(e):e},"$data.GeometryPolygon":function(e){return e?new n["default"].GeometryPolygon(e):e},"$data.GeometryMultiPoint":function(e){return e?new n["default"].GeometryMultiPoint(e):e},"$data.GeometryMultiLineString":function(e){return e?new n["default"].GeometryMultiLineString(e):e},"$data.GeometryMultiPolygon":function(e){return e?new n["default"].GeometryMultiPolygon(e):e},"$data.GeometryCollection":function(e){return e?new n["default"].GeometryCollection(e):e}},toDb:{"$data.Enum":n["default"].Container.proxyConverter,"$data.Byte":n["default"].Container.proxyConverter,"$data.SByte":n["default"].Container.proxyConverter,"$data.Decimal":n["default"].Container.proxyConverter,"$data.Float":n["default"].Container.proxyConverter,"$data.Int16":n["default"].Container.proxyConverter,"$data.Int64":n["default"].Container.proxyConverter,"$data.Integer":n["default"].Container.proxyConverter,"$data.Int32":n["default"].Container.proxyConverter,"$data.Number":n["default"].Container.proxyConverter,"$data.Date":n["default"].Container.proxyConverter,"$data.DateTimeOffset":n["default"].Container.proxyConverter,"$data.Duration":n["default"].Container.proxyConverter,"$data.Day":n["default"].Container.proxyConverter,"$data.Time":n["default"].Container.proxyConverter,"$data.String":n["default"].Container.proxyConverter,"$data.Boolean":n["default"].Container.proxyConverter,"$data.Blob":function(e){return e?n["default"].Blob.toString(e):e},"$data.Array":function(e){return e?JSON.parse(JSON.stringify(e)):e},"$data.Object":n["default"].Container.proxyConverter,"$data.Guid":function(e){return e?e.toString():e},"$data.GeographyPoint":function(e){return e?e:e},"$data.GeographyLineString":function(e){return e?e:e},"$data.GeographyPolygon":function(e){return e?e:e},"$data.GeographyMultiPoint":function(e){return e?e:e},"$data.GeographyMultiLineString":function(e){return e?e:e},"$data.GeographyMultiPolygon":function(e){return e?e:e},"$data.GeographyCollection":function(e){return e?e:e},"$data.GeometryPoint":function(e){return e?e:e},"$data.GeometryLineString":function(e){return e?e:e},"$data.GeometryPolygon":function(e){return e?e:e},"$data.GeometryMultiPoint":function(e){return e?e:e},"$data.GeometryMultiLineString":function(e){return e?e:e},"$data.GeometryMultiPolygon":function(e){return e?e:e},"$data.GeometryCollection":function(e){return e?e:e}}}},{"jaydata/core":"jaydata/core"}],2:[function(e,t,a){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}var o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e},n=e("jaydata/core"),i=r(n);i["default"].Class.define("$data.storageProviders.indexedDb.IndexedDBStorageProvider",i["default"].StorageProviderBase,null,{constructor:function(e,t){this.indexedDB=i["default"].__global.indexedDB||i["default"].__global.webkitIndexedDB||i["default"].__global.mozIndexedDB||i["default"].__global.msIndexedDB,this.IDBRequest=i["default"].__global.IDBRequest||i["default"].__global.webkitIDBRequest||i["default"].__global.mozIDBRequest||i["default"].__global.msIDBRequest,this.IDBTransaction=i["default"].__global.IDBTransaction||i["default"].__global.webkitIDBTransaction||i["default"].__global.mozIDBTransaction||i["default"].__global.msIDBTransaction,this.IDBTransactionType={READ_ONLY:"readonly",READ_WRITE:"readwrite",VERSIONCHANGE:"versionchange"},"undefined"!=typeof this.IDBTransaction.READ_ONLY&&"undefined"!=typeof this.IDBTransaction.READ_WRITE&&(this.IDBTransactionType.READ_ONLY=this.IDBTransaction.READ_ONLY,this.IDBTransactionType.READ_WRITE=this.IDBTransaction.READ_WRITE),this.IDBKeyRange=i["default"].__global.IDBKeyRange||i["default"].__global.webkitIDBKeyRange||i["default"].__global.mozIDBKeyRange||i["default"].__global.msIDBKeyRange,this.IDBDatabaseException=i["default"].__global.IDBDatabaseException||i["default"].__global.webkitIDBDatabaseException||i["default"].__global.mozIDBDatabaseException||i["default"].__global.msIDBDatabaseException,this.IDBOpenDBRequest=i["default"].__global.IDBOpenDBRequest||i["default"].__global.webkitIDBOpenDBRequest||i["default"].__global.mozIDBOpenDBRequest||i["default"].__global.msIDBOpenDBRequest,this.newVersionAPI=!(!i["default"].__global.IDBFactory||!IDBFactory.prototype.deleteDatabase),this.sequenceStore="__jayData_sequence",this.SqlCommands=[],this.context={},this.providerConfiguration=i["default"].typeSystem.extend({databaseName:i["default"].defaults.defaultDatabaseName,version:1,dbCreation:i["default"].storageProviders.DbCreationType.DropTableIfChanged,memoryOperations:!0},e),this._setupExtensionMethods(),t&&(this.originalContext=t.getType())},supportedBinaryOperators:{value:{equal:{mapTo:" == ",dataType:i["default"].Boolean},notEqual:{mapTo:" != ",dataType:i["default"].Boolean},equalTyped:{mapTo:" == ",dataType:i["default"].Boolean},notEqualTyped:{mapTo:" != ",dataType:i["default"].Boolean},greaterThan:{mapTo:" > ",dataType:i["default"].Boolean},greaterThanOrEqual:{mapTo:" >= ",dataType:i["default"].Boolean},lessThan:{mapTo:" < ",dataType:i["default"].Boolean},lessThenOrEqual:{mapTo:" <= ",dataType:i["default"].Boolean},or:{mapTo:" || ",dataType:i["default"].Boolean},and:{mapTo:" && ",dataType:i["default"].Boolean}}},supportedSetOperations:{value:{length:{},toArray:{},forEach:{}},enumerable:!0,writable:!0},supportedFieldOperations:{value:{},enumerable:!0,writable:!0},supportedUnaryOperators:{value:{},enumerable:!0,writable:!0},_setupExtensionMethods:function(){var e=this.IDBRequest,t=this.IDBTransaction,a=this.IDBOpenDBRequest,r=function(e){"object"!==("undefined"==typeof e?"undefined":o(e))&&n.Guard.raise(new n.Exception("Invalid callbackSettings",null,e));for(var t in e)"undefined"!=typeof this[t]&&"function"==typeof e[t]&&(this[t]=e[t]);return this};e&&"function"!=typeof e.prototype.setCallbacks&&(e.prototype.setCallbacks=r),t&&"function"!=typeof t.prototype.setCallbacks&&(t.prototype.setCallbacks=r),a&&"function"!=typeof a.prototype.setCallbacks&&(a.prototype.setCallbacks=r)},supportedDataTypes:{value:[i["default"].Integer,i["default"].Number,i["default"].Date,i["default"].String,i["default"].Boolean,i["default"].Blob,i["default"].Array,i["default"].Object,i["default"].Guid,i["default"].GeographyPoint,i["default"].GeographyLineString,i["default"].GeographyPolygon,i["default"].GeographyMultiPoint,i["default"].GeographyMultiLineString,i["default"].GeographyMultiPolygon,i["default"].GeographyCollection,i["default"].GeometryPoint,i["default"].GeometryLineString,i["default"].GeometryPolygon,i["default"].GeometryMultiPoint,i["default"].GeometryMultiLineString,i["default"].GeometryMultiPolygon,i["default"].GeometryCollection,i["default"].Byte,i["default"].SByte,i["default"].Decimal,i["default"].Float,i["default"].Int16,i["default"].Int32,i["default"].Int64,i["default"].Duration,i["default"].Day,i["default"].Time,i["default"].DateTimeOffset],writable:!1},fieldConverter:{value:i["default"].IndexedDBConverter},supportedAutoincrementKeys:{value:{"$data.Integer":!0,"$data.Int32":!0,"$data.Guid":function(){return i["default"].createGuid()}}},_getObjectStoreDefinition:function(e){var t={storeName:e.TableName},a=e.PhysicalType.memberDefinitions.getKeyProperties();if(0==a.length){var r=new Error("Entity must have a key field: "+t.storeName);throw r.name="KeyNotFoundError",r}a.length>2&&a.some(function(e){return e.computed})&&n.Guard.raise("With multiple keys the computed field is not allowed: "+t.storeName,"MultipleComputedKeyFieldError");for(var o=0;o<a.length;o++){var i=n.Container.resolveName(a[o].type);a[o].computed&&!this.supportedAutoincrementKeys[i]&&console.log("WARRNING! '"+i+"' not supported as computed Key!")}return t.keyFields=a,t},_getObjectStoreDefinitions:function(){var e=[],t=this;return t.context._storageModel.forEach(function(a){var r=t._getObjectStoreDefinition(a);e.push(r)}),e},_oldCreateDB:function(e,t,a){var r=this;e.db.onversionchange=function(e){return e.target.close()},r._createDB(e.db,t),e.oncomplete=a},_createDB:function(e,t){for(var a=0;a<t.length;a++)t[a].dropIfExists&&e.objectStoreNames.contains(t[a].storeName)&&e.deleteObjectStore(t[a].storeName);for(var a=0;a<t.length;a++){var r=t[a];if(!e.objectStoreNames.contains(r.storeName)){var o={};if(1==r.keyFields.length){o={keyPath:r.keyFields[0].name};var i=n.Container.resolveName(r.keyFields[0].type);o.autoIncrement=!!this.supportedAutoincrementKeys[i]}else{o.key=[];for(var a=0;a<r.keyFields.length;a++)o.key.push(r.keyFields[a].name)}e.createObjectStore(r.storeName,o)}}},_hasDbChanges:function(e,t,a){for(var r=!0,o=0;o<t.length;o++)r=r&&e.objectStoreNames.contains(t[o].storeName),a&&(t[o].dropIfExists=!0,r=!1);return!r},onupgradeneeded:function(e){var t=this;return function(a){var r=a.target.result;r.onversionchange=function(e){return e.target.close()};var o=t._hasDbChanges(r,e,t.providerConfiguration.dbCreation==i["default"].storageProviders.DbCreationType.DropAllExistingTables);o&&t._createDB(r,e)}},initializeStore:function(e){e=i["default"].PromiseHandlerBase.createCallbackSettings(e);var t=this;this.initializeMemoryStore({success:function(){var a;try{a=t._getObjectStoreDefinitions()}catch(r){return console.log(a),void e.error(r)}t.indexedDB.open(t.providerConfiguration.databaseName).setCallbacks({onsuccess:function(r){var o=r.target.result;o.onversionchange=function(e){return e.target.close()};var n=t._hasDbChanges(o,a,t.providerConfiguration.dbCreation==i["default"].storageProviders.DbCreationType.DropAllExistingTables);if(o.setVersion){if(""===o.version||n)return void o.setVersion((parseInt(o.version)||0)+1).setCallbacks({onsuccess:function(r){var o=r.target.result;t._oldCreateDB(o,a,function(a){t.db=a.target.db,e.success(t.context)})},onerror:function(){},onblocked:function(){}})}else if(n){o.close();var u=parseInt(o.version)+1;return void t.indexedDB.open(t.providerConfiguration.databaseName,u).setCallbacks({onsuccess:function(a){t.db=a.target.result,e.success(t.context)},onupgradeneeded:t.onupgradeneeded(a),onerror:e.error,onabort:e.error,onblocked:e.error})}t.db=o,e.success(t.context)},onupgradeneeded:t.onupgradeneeded(a),onerror:e.error,onabort:e.error,onblocked:e.error})},error:e.error})},initializeMemoryStore:function(e){e=i["default"].PromiseHandlerBase.createCallbackSettings(e);var t=this;t.originalContext&&t.providerConfiguration.memoryOperations?(t.operationProvider=new t.originalContext({name:"InMemory"}),t.operationProvider.onReady({success:function(){t.supportedBinaryOperators=t.operationProvider.storageProvider.supportedBinaryOperators,t.supportedSetOperations=t.operationProvider.storageProvider.supportedSetOperations,t.supportedFieldOperations=t.operationProvider.storageProvider.supportedFieldOperations,t.supportedUnaryOperators=t.operationProvider.storageProvider.supportedUnaryOperators,e.success()},error:e.error})):e.success()},_initializeStore:function(e){e=i["default"].PromiseHandlerBase.createCallbackSettings(e);var t=this,a=function(e){e.onversionchange=function(e){var t=e.target.close();return t};var a=[];return t.context._storageModel.forEach(function(r){function o(){var o={},n=t._getKeySettings(r);t.newVersionAPI?n.autoIncrement&&a.push(r.TableName):o.autoIncrement=n.autoIncrement,void 0!==n.keyPath&&(o.keyPath=n.keyPath),e.createObjectStore(r.TableName,o)}e.objectStoreNames.contains(r.TableName)?t.providerConfiguration.dbCreation===i["default"].storageProviders.DbCreationType.DropAllExistingTables&&(e.deleteObjectStore(r.TableName),o()):o()}),a.length>0&&!e.objectStoreNames.contains(t.sequenceStore)&&(e.createObjectStore(t.sequenceStore,{keyPath:"store"}),a=[]),a},r=null,o={onupgradeneeded:function(e){r=a(e.target.result)},onerror:e.error,onblocked:e.error,onsuccess:function(o){if(t.db=o.target.result,t.db.onversionchange=function(e){e.target.close()},t.newVersionAPI){if(r&&r.length>0){var n=t.db.transaction([t.sequenceStore],t.IDBTransactionType.READ_WRITE).setCallbacks({onerror:e.error,oncomplete:function(){e.success(t.context)}}).objectStore(t.sequenceStore);switch(t.providerConfiguration.dbCreation){case i["default"].storageProviders.DbCreationType.DropAllExistingTables:case i["default"].storageProviders.DbCreationType.DropTableIfChanged:n.clear();break;default:r.forEach(function(e){n["delete"](e)})}}e.success(t.context)}else var u=t.db.setVersion(t.providerConfiguration.version.toString()).setCallbacks({onerror:e.error,onblocked:e.error,onsuccess:function(r){a(t.db),u.result.oncomplete=function(a){e.success(t.context)}}})}};t.newVersionAPI?t.indexedDB.open(t.providerConfiguration.databaseName,parseInt(t.providerConfiguration.version,10)).setCallbacks(o):t.indexedDB.open(t.providerConfiguration.databaseName).setCallbacks(o)},executeQuery:function(e,t){t=i["default"].PromiseHandlerBase.createCallbackSettings(t);var a=this,r=e.context.getEntitySetFromElementType(e.defaultType),o=a.db.transaction([r.tableName],a.IDBTransactionType.READ_ONLY).setCallbacks({onerror:t.error,onabort:t.error,oncomplete:function(o){a.operationProvider?(a.operationProvider.storageProvider.dataSource[r.tableName]=e.rawDataList,a.operationProvider.storageProvider.executeQuery(e,{success:function(e){e.expression.nodeType===i["default"].Expressions.ExpressionType.Count&&(e.rawDataList[0]={cnt:e.rawDataList[0]}),t.success(e)},error:t.error})):t.success(e)}}).objectStore(r.tableName),u=n.Container.createModelBinderConfigCompiler(e,[]);if(u.Visit(e.expression),a.operationProvider)o.openCursor().onsuccess=function(t){var a=t.target.result;if(a){a.value;e.rawDataList.push(a.value),a["continue"]()}};else switch(e.expression.nodeType){case i["default"].Expressions.ExpressionType.Count:o.count().onsuccess=function(t){var a=t.target.result;e.rawDataList.push({cnt:a})};break;default:o.openCursor().onsuccess=function(t){var a=t.target.result;if(a){a.value;e.rawDataList.push(a.value),a["continue"]()}}}},_getKeySettings:function(e){var t=this,a={autoIncrement:!1},r=[];return e.PhysicalType.memberDefinitions.getPublicMappedProperties().forEach(function(e){if(e.key&&r.push(e.name),e.computed){e.key||n.Guard.raise(new n.Exception("Only key field can be a computed field!"));var o=n.Container.resolveName(e.type);t.supportedAutoincrementKeys[o]===!0&&(a.autoIncrement=!0)}}),r.length>1?(a.autoIncrement&&n.Guard.raise(new n.Exception("Auto increment is only valid for a single key!")),a.keys=r):1==r.length?a.keyPath=r[0]:n.Guard.raise(new n.Exception("No valid key found!")),a},saveChanges:function(e,t){function a(){if(0===o.length)e.success();else{var t=function(){var e={};this.getSettingsForItem=function(t){var a=t.data.getType().fullName;return e.hasOwnProperty(a)||(e[a]=r._getKeySettings(r.context._storageModel.getStorageModel(t.data.getType()))),e[a]}},u=o.shift(),d={},l=u.map(function(e){return d[e.entitySet.tableName]=!0,e.physicalData={},e.entitySet.elementType.memberDefinitions.getPublicMappedProperties().forEach(function(t){var a=n.Container.resolveName(t.type);if(t.key&&t.computed&&void 0==e.data[t.name]){if("function"!=typeof r.supportedAutoincrementKeys[a])return;var o=r.supportedAutoincrementKeys[a]();e.data[t.name]=r.fieldConverter.toDb[a](o)}if(!t.inverseProperty&&"undefined"==typeof t.concurrencyMode&&(t.key===!0||e.data.entityState===i["default"].EntityState.Added||e.data.changedProperties&&e.data.changedProperties.some(function(e){return e.name===t.name})))if(r.fieldConverter.toDb[a])e.physicalData[t.name]=r.fieldConverter.toDb[a](e.data[t.name]);else{var u=e.data[t.name];void 0!==u&&(u=JSON.parse(JSON.stringify(u))),e.physicalData[t.name]=u}}),e}),s=[];for(var c in d)s.push(c);var f=r.db.transaction(s,r.IDBTransactionType.READ_WRITE).setCallbacks({onerror:function(t){(!t.target||!r.IDBDatabaseException||t.target&&r.IDBDatabaseException&&t.target.errorCode!==r.IDBDatabaseException.ABORT_ERR)&&e.error(t)},oncomplete:function(e){a()}}),p=new t;l.forEach(function(t){var a=f.objectStore(t.entitySet.tableName),o=p.getSettingsForItem(t),u=o.keys&&o.keys.map(function(e){return t.physicalData[e]})||null;try{var d=function(i){var d=o.keyPath?t.physicalData[o.keyPath]:u,l=t.physicalData;a.openCursor(r.IDBKeyRange.only(d)).onsuccess=function(a){try{var r=a.target.result;r?i(r,d,l):n.Guard.raise(new n.Exception("Object not found",null,t))}catch(o){f.abort(),e.error(o)}}};switch(t.data.entityState){case i["default"].EntityState.Added:o.keyPath?a.add(t.physicalData).onsuccess=function(e){t.data[o.keyPath]=e.target.result}:a.add(t.physicalData,u);break;case i["default"].EntityState.Deleted:d(function(e){e["delete"]()});break;case i["default"].EntityState.Modified:d(function(e,t,a){e.update(i["default"].typeSystem.extend(e.value,a))});break;case i["default"].EntityState.Unchanged:break;default:n.Guard.raise(new n.Exception("Not supported entity state",null,t))}}catch(l){f.abort(),e.error(l)}})}}var r=this,o=r.buildIndependentBlocks(t);a()},_compile:function(e){var t=n.Container.createIndexedDBCompiler().compile(e);return t}},{isSupported:{get:function(){return!!(i["default"].__global.indexedDB||i["default"].__global.webkitIndexedDB||i["default"].__global.mozIndexedDB||i["default"].__global.msIndexedDB)},set:function(){}}}),i["default"].storageProviders.indexedDb.IndexedDBStorageProvider.isSupported&&i["default"].StorageProviderBase.registerProvider("indexedDb",i["default"].storageProviders.indexedDb.IndexedDBStorageProvider)},{"jaydata/core":"jaydata/core"}],3:[function(e,t,a){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(a,"__esModule",{value:!0});var o=e("jaydata/core"),n=r(o),i=e("./IndexedDBConverter.js"),u=(r(i),e("./IndexedDBStorageProvider.js"));r(u);a["default"]=n["default"],t.exports=a["default"]},{"./IndexedDBConverter.js":1,"./IndexedDBStorageProvider.js":2,"jaydata/core":"jaydata/core"}]},{},[3])(3)});
//# sourceMappingURL=IndexedDbProvider.min.js.map