LocalDatastore.js 44 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331
  1. "use strict";
  2. var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
  3. var _reverseInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/reverse");
  4. var _Promise2 = require("@babel/runtime-corejs3/core-js-stable/promise");
  5. var _Object$setPrototypeOf = require("@babel/runtime-corejs3/core-js-stable/object/set-prototype-of");
  6. var _typeof = require("@babel/runtime-corejs3/helpers/typeof");
  7. var _forEachInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/for-each");
  8. var _Object$getPrototypeOf = require("@babel/runtime-corejs3/core-js-stable/object/get-prototype-of");
  9. var _Object$create = require("@babel/runtime-corejs3/core-js-stable/object/create");
  10. var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
  11. var _Array$isArray2 = require("@babel/runtime-corejs3/core-js-stable/array/is-array");
  12. var _getIteratorMethod = require("@babel/runtime-corejs3/core-js/get-iterator-method");
  13. var _Symbol = require("@babel/runtime-corejs3/core-js-stable/symbol");
  14. var _Array$from2 = require("@babel/runtime-corejs3/core-js-stable/array/from");
  15. var _sliceInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/slice");
  16. var _find = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/find"));
  17. var _from = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/array/from"));
  18. var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map"));
  19. var _isArray = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/array/is-array"));
  20. var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs3/regenerator"));
  21. var _keys2 = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/keys"));
  22. var _startsWith = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/starts-with"));
  23. var _keys3 = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/keys"));
  24. var _includes = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/includes"));
  25. var _filter = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/filter"));
  26. var _concat = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/concat"));
  27. var _set = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/set"));
  28. var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/toConsumableArray"));
  29. var _promise = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/promise"));
  30. var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/slicedToArray"));
  31. var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/asyncToGenerator"));
  32. var _CoreManager = _interopRequireDefault(require("./CoreManager"));
  33. var _ParseQuery = _interopRequireDefault(require("./ParseQuery"));
  34. var _LocalDatastoreUtils = require("./LocalDatastoreUtils");
  35. function _regeneratorRuntime() {
  36. "use strict";
  37. /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */
  38. _regeneratorRuntime = function () {
  39. return exports;
  40. };
  41. var exports = {},
  42. Op = Object.prototype,
  43. hasOwn = Op.hasOwnProperty,
  44. $Symbol = "function" == typeof _Symbol ? _Symbol : {},
  45. iteratorSymbol = $Symbol.iterator || "@@iterator",
  46. asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator",
  47. toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag";
  48. function define(obj, key, value) {
  49. return _Object$defineProperty(obj, key, {
  50. value: value,
  51. enumerable: !0,
  52. configurable: !0,
  53. writable: !0
  54. }), obj[key];
  55. }
  56. try {
  57. define({}, "");
  58. } catch (err) {
  59. define = function (obj, key, value) {
  60. return obj[key] = value;
  61. };
  62. }
  63. function wrap(innerFn, outerFn, self, tryLocsList) {
  64. var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator,
  65. generator = _Object$create(protoGenerator.prototype),
  66. context = new Context(tryLocsList || []);
  67. return generator._invoke = function (innerFn, self, context) {
  68. var state = "suspendedStart";
  69. return function (method, arg) {
  70. if ("executing" === state) throw new Error("Generator is already running");
  71. if ("completed" === state) {
  72. if ("throw" === method) throw arg;
  73. return doneResult();
  74. }
  75. for (context.method = method, context.arg = arg;;) {
  76. var delegate = context.delegate;
  77. if (delegate) {
  78. var delegateResult = maybeInvokeDelegate(delegate, context);
  79. if (delegateResult) {
  80. if (delegateResult === ContinueSentinel) continue;
  81. return delegateResult;
  82. }
  83. }
  84. if ("next" === context.method) context.sent = context._sent = context.arg;else if ("throw" === context.method) {
  85. if ("suspendedStart" === state) throw state = "completed", context.arg;
  86. context.dispatchException(context.arg);
  87. } else "return" === context.method && context.abrupt("return", context.arg);
  88. state = "executing";
  89. var record = tryCatch(innerFn, self, context);
  90. if ("normal" === record.type) {
  91. if (state = context.done ? "completed" : "suspendedYield", record.arg === ContinueSentinel) continue;
  92. return {
  93. value: record.arg,
  94. done: context.done
  95. };
  96. }
  97. "throw" === record.type && (state = "completed", context.method = "throw", context.arg = record.arg);
  98. }
  99. };
  100. }(innerFn, self, context), generator;
  101. }
  102. function tryCatch(fn, obj, arg) {
  103. try {
  104. return {
  105. type: "normal",
  106. arg: fn.call(obj, arg)
  107. };
  108. } catch (err) {
  109. return {
  110. type: "throw",
  111. arg: err
  112. };
  113. }
  114. }
  115. exports.wrap = wrap;
  116. var ContinueSentinel = {};
  117. function Generator() {}
  118. function GeneratorFunction() {}
  119. function GeneratorFunctionPrototype() {}
  120. var IteratorPrototype = {};
  121. define(IteratorPrototype, iteratorSymbol, function () {
  122. return this;
  123. });
  124. var getProto = _Object$getPrototypeOf,
  125. NativeIteratorPrototype = getProto && getProto(getProto(values([])));
  126. NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype);
  127. var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = _Object$create(IteratorPrototype);
  128. function defineIteratorMethods(prototype) {
  129. var _context19;
  130. _forEachInstanceProperty(_context19 = ["next", "throw", "return"]).call(_context19, function (method) {
  131. define(prototype, method, function (arg) {
  132. return this._invoke(method, arg);
  133. });
  134. });
  135. }
  136. function AsyncIterator(generator, PromiseImpl) {
  137. function invoke(method, arg, resolve, reject) {
  138. var record = tryCatch(generator[method], generator, arg);
  139. if ("throw" !== record.type) {
  140. var result = record.arg,
  141. value = result.value;
  142. return value && "object" == _typeof(value) && hasOwn.call(value, "__await") ? PromiseImpl.resolve(value.__await).then(function (value) {
  143. invoke("next", value, resolve, reject);
  144. }, function (err) {
  145. invoke("throw", err, resolve, reject);
  146. }) : PromiseImpl.resolve(value).then(function (unwrapped) {
  147. result.value = unwrapped, resolve(result);
  148. }, function (error) {
  149. return invoke("throw", error, resolve, reject);
  150. });
  151. }
  152. reject(record.arg);
  153. }
  154. var previousPromise;
  155. this._invoke = function (method, arg) {
  156. function callInvokeWithMethodAndArg() {
  157. return new PromiseImpl(function (resolve, reject) {
  158. invoke(method, arg, resolve, reject);
  159. });
  160. }
  161. return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();
  162. };
  163. }
  164. function maybeInvokeDelegate(delegate, context) {
  165. var method = delegate.iterator[context.method];
  166. if (undefined === method) {
  167. if (context.delegate = null, "throw" === context.method) {
  168. if (delegate.iterator.return && (context.method = "return", context.arg = undefined, maybeInvokeDelegate(delegate, context), "throw" === context.method)) return ContinueSentinel;
  169. context.method = "throw", context.arg = new TypeError("The iterator does not provide a 'throw' method");
  170. }
  171. return ContinueSentinel;
  172. }
  173. var record = tryCatch(method, delegate.iterator, context.arg);
  174. if ("throw" === record.type) return context.method = "throw", context.arg = record.arg, context.delegate = null, ContinueSentinel;
  175. var info = record.arg;
  176. return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, "return" !== context.method && (context.method = "next", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = "throw", context.arg = new TypeError("iterator result is not an object"), context.delegate = null, ContinueSentinel);
  177. }
  178. function pushTryEntry(locs) {
  179. var entry = {
  180. tryLoc: locs[0]
  181. };
  182. 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry);
  183. }
  184. function resetTryEntry(entry) {
  185. var record = entry.completion || {};
  186. record.type = "normal", delete record.arg, entry.completion = record;
  187. }
  188. function Context(tryLocsList) {
  189. this.tryEntries = [{
  190. tryLoc: "root"
  191. }], _forEachInstanceProperty(tryLocsList).call(tryLocsList, pushTryEntry, this), this.reset(!0);
  192. }
  193. function values(iterable) {
  194. if (iterable) {
  195. var iteratorMethod = iterable[iteratorSymbol];
  196. if (iteratorMethod) return iteratorMethod.call(iterable);
  197. if ("function" == typeof iterable.next) return iterable;
  198. if (!isNaN(iterable.length)) {
  199. var i = -1,
  200. next = function next() {
  201. for (; ++i < iterable.length;) {
  202. if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next;
  203. }
  204. return next.value = undefined, next.done = !0, next;
  205. };
  206. return next.next = next;
  207. }
  208. }
  209. return {
  210. next: doneResult
  211. };
  212. }
  213. function doneResult() {
  214. return {
  215. value: undefined,
  216. done: !0
  217. };
  218. }
  219. return GeneratorFunction.prototype = GeneratorFunctionPrototype, define(Gp, "constructor", GeneratorFunctionPrototype), define(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"), exports.isGeneratorFunction = function (genFun) {
  220. var ctor = "function" == typeof genFun && genFun.constructor;
  221. return !!ctor && (ctor === GeneratorFunction || "GeneratorFunction" === (ctor.displayName || ctor.name));
  222. }, exports.mark = function (genFun) {
  223. return _Object$setPrototypeOf ? _Object$setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, "GeneratorFunction")), genFun.prototype = _Object$create(Gp), genFun;
  224. }, exports.awrap = function (arg) {
  225. return {
  226. __await: arg
  227. };
  228. }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () {
  229. return this;
  230. }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) {
  231. void 0 === PromiseImpl && (PromiseImpl = _Promise2);
  232. var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl);
  233. return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) {
  234. return result.done ? result.value : iter.next();
  235. });
  236. }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, "Generator"), define(Gp, iteratorSymbol, function () {
  237. return this;
  238. }), define(Gp, "toString", function () {
  239. return "[object Generator]";
  240. }), exports.keys = function (object) {
  241. var keys = [];
  242. for (var key in object) {
  243. keys.push(key);
  244. }
  245. return _reverseInstanceProperty(keys).call(keys), function next() {
  246. for (; keys.length;) {
  247. var key = keys.pop();
  248. if (key in object) return next.value = key, next.done = !1, next;
  249. }
  250. return next.done = !0, next;
  251. };
  252. }, exports.values = values, Context.prototype = {
  253. constructor: Context,
  254. reset: function (skipTempReset) {
  255. var _context20;
  256. if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = "next", this.arg = undefined, _forEachInstanceProperty(_context20 = this.tryEntries).call(_context20, resetTryEntry), !skipTempReset) for (var name in this) {
  257. "t" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+_sliceInstanceProperty(name).call(name, 1)) && (this[name] = undefined);
  258. }
  259. },
  260. stop: function () {
  261. this.done = !0;
  262. var rootRecord = this.tryEntries[0].completion;
  263. if ("throw" === rootRecord.type) throw rootRecord.arg;
  264. return this.rval;
  265. },
  266. dispatchException: function (exception) {
  267. if (this.done) throw exception;
  268. var context = this;
  269. function handle(loc, caught) {
  270. return record.type = "throw", record.arg = exception, context.next = loc, caught && (context.method = "next", context.arg = undefined), !!caught;
  271. }
  272. for (var i = this.tryEntries.length - 1; i >= 0; --i) {
  273. var entry = this.tryEntries[i],
  274. record = entry.completion;
  275. if ("root" === entry.tryLoc) return handle("end");
  276. if (entry.tryLoc <= this.prev) {
  277. var hasCatch = hasOwn.call(entry, "catchLoc"),
  278. hasFinally = hasOwn.call(entry, "finallyLoc");
  279. if (hasCatch && hasFinally) {
  280. if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0);
  281. if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc);
  282. } else if (hasCatch) {
  283. if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0);
  284. } else {
  285. if (!hasFinally) throw new Error("try statement without catch or finally");
  286. if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc);
  287. }
  288. }
  289. }
  290. },
  291. abrupt: function (type, arg) {
  292. for (var i = this.tryEntries.length - 1; i >= 0; --i) {
  293. var entry = this.tryEntries[i];
  294. if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) {
  295. var finallyEntry = entry;
  296. break;
  297. }
  298. }
  299. finallyEntry && ("break" === type || "continue" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null);
  300. var record = finallyEntry ? finallyEntry.completion : {};
  301. return record.type = type, record.arg = arg, finallyEntry ? (this.method = "next", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record);
  302. },
  303. complete: function (record, afterLoc) {
  304. if ("throw" === record.type) throw record.arg;
  305. return "break" === record.type || "continue" === record.type ? this.next = record.arg : "return" === record.type ? (this.rval = this.arg = record.arg, this.method = "return", this.next = "end") : "normal" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel;
  306. },
  307. finish: function (finallyLoc) {
  308. for (var i = this.tryEntries.length - 1; i >= 0; --i) {
  309. var entry = this.tryEntries[i];
  310. if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel;
  311. }
  312. },
  313. catch: function (tryLoc) {
  314. for (var i = this.tryEntries.length - 1; i >= 0; --i) {
  315. var entry = this.tryEntries[i];
  316. if (entry.tryLoc === tryLoc) {
  317. var record = entry.completion;
  318. if ("throw" === record.type) {
  319. var thrown = record.arg;
  320. resetTryEntry(entry);
  321. }
  322. return thrown;
  323. }
  324. }
  325. throw new Error("illegal catch attempt");
  326. },
  327. delegateYield: function (iterable, resultName, nextLoc) {
  328. return this.delegate = {
  329. iterator: values(iterable),
  330. resultName: resultName,
  331. nextLoc: nextLoc
  332. }, "next" === this.method && (this.arg = undefined), ContinueSentinel;
  333. }
  334. }, exports;
  335. }
  336. function _createForOfIteratorHelper(o, allowArrayLike) {
  337. var it = typeof _Symbol !== "undefined" && _getIteratorMethod(o) || o["@@iterator"];
  338. if (!it) {
  339. if (_Array$isArray2(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {
  340. if (it) o = it;
  341. var i = 0;
  342. var F = function () {};
  343. return {
  344. s: F,
  345. n: function () {
  346. if (i >= o.length) return {
  347. done: true
  348. };
  349. return {
  350. done: false,
  351. value: o[i++]
  352. };
  353. },
  354. e: function (_e) {
  355. throw _e;
  356. },
  357. f: F
  358. };
  359. }
  360. throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
  361. }
  362. var normalCompletion = true,
  363. didErr = false,
  364. err;
  365. return {
  366. s: function () {
  367. it = it.call(o);
  368. },
  369. n: function () {
  370. var step = it.next();
  371. normalCompletion = step.done;
  372. return step;
  373. },
  374. e: function (_e2) {
  375. didErr = true;
  376. err = _e2;
  377. },
  378. f: function () {
  379. try {
  380. if (!normalCompletion && it.return != null) it.return();
  381. } finally {
  382. if (didErr) throw err;
  383. }
  384. }
  385. };
  386. }
  387. function _unsupportedIterableToArray(o, minLen) {
  388. var _context18;
  389. if (!o) return;
  390. if (typeof o === "string") return _arrayLikeToArray(o, minLen);
  391. var n = _sliceInstanceProperty(_context18 = Object.prototype.toString.call(o)).call(_context18, 8, -1);
  392. if (n === "Object" && o.constructor) n = o.constructor.name;
  393. if (n === "Map" || n === "Set") return _Array$from2(o);
  394. if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
  395. }
  396. function _arrayLikeToArray(arr, len) {
  397. if (len == null || len > arr.length) len = arr.length;
  398. for (var i = 0, arr2 = new Array(len); i < len; i++) {
  399. arr2[i] = arr[i];
  400. }
  401. return arr2;
  402. }
  403. /**
  404. * Provides a local datastore which can be used to store and retrieve <code>Parse.Object</code>. <br />
  405. * To enable this functionality, call <code>Parse.enableLocalDatastore()</code>.
  406. *
  407. * Pin object to add to local datastore
  408. *
  409. * <pre>await object.pin();</pre>
  410. * <pre>await object.pinWithName('pinName');</pre>
  411. *
  412. * Query pinned objects
  413. *
  414. * <pre>query.fromLocalDatastore();</pre>
  415. * <pre>query.fromPin();</pre>
  416. * <pre>query.fromPinWithName();</pre>
  417. *
  418. * <pre>const localObjects = await query.find();</pre>
  419. *
  420. * @class Parse.LocalDatastore
  421. * @static
  422. */
  423. var LocalDatastore = {
  424. isEnabled: false,
  425. isSyncing: false,
  426. fromPinWithName: function (name
  427. /*: string*/
  428. )
  429. /*: Promise<Array<Object>>*/
  430. {
  431. var controller = _CoreManager.default.getLocalDatastoreController();
  432. return controller.fromPinWithName(name);
  433. },
  434. pinWithName: function (name
  435. /*: string*/
  436. , value
  437. /*: any*/
  438. )
  439. /*: Promise<void>*/
  440. {
  441. var controller = _CoreManager.default.getLocalDatastoreController();
  442. return controller.pinWithName(name, value);
  443. },
  444. unPinWithName: function (name
  445. /*: string*/
  446. )
  447. /*: Promise<void>*/
  448. {
  449. var controller = _CoreManager.default.getLocalDatastoreController();
  450. return controller.unPinWithName(name);
  451. },
  452. _getAllContents: function ()
  453. /*: Promise<Object>*/
  454. {
  455. var controller = _CoreManager.default.getLocalDatastoreController();
  456. return controller.getAllContents();
  457. },
  458. // Use for testing
  459. _getRawStorage: function ()
  460. /*: Promise<Object>*/
  461. {
  462. var controller = _CoreManager.default.getLocalDatastoreController();
  463. return controller.getRawStorage();
  464. },
  465. _clear: function ()
  466. /*: Promise<void>*/
  467. {
  468. var controller = _CoreManager.default.getLocalDatastoreController();
  469. return controller.clear();
  470. },
  471. // Pin the object and children recursively
  472. // Saves the object and children key to Pin Name
  473. _handlePinAllWithName: function (name
  474. /*: string*/
  475. , objects
  476. /*: Array<ParseObject>*/
  477. )
  478. /*: Promise<void>*/
  479. {
  480. var _this = this;
  481. return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
  482. var _context;
  483. var pinName, toPinPromises, objectKeys, _iterator, _step, parent, children, parentKey, json, objectKey, fromPinPromise, _yield$Promise$all, _yield$Promise$all2, pinned, toPin;
  484. return _regeneratorRuntime().wrap(function _callee$(_context2) {
  485. while (1) {
  486. switch (_context2.prev = _context2.next) {
  487. case 0:
  488. pinName = _this.getPinName(name);
  489. toPinPromises = [];
  490. objectKeys = [];
  491. _iterator = _createForOfIteratorHelper(objects);
  492. try {
  493. for (_iterator.s(); !(_step = _iterator.n()).done;) {
  494. parent = _step.value;
  495. children = _this._getChildren(parent);
  496. parentKey = _this.getKeyForObject(parent);
  497. json = parent._toFullJSON(undefined, true);
  498. if (parent._localId) {
  499. json._localId = parent._localId;
  500. }
  501. children[parentKey] = json;
  502. for (objectKey in children) {
  503. objectKeys.push(objectKey);
  504. toPinPromises.push(_this.pinWithName(objectKey, [children[objectKey]]));
  505. }
  506. }
  507. } catch (err) {
  508. _iterator.e(err);
  509. } finally {
  510. _iterator.f();
  511. }
  512. fromPinPromise = _this.fromPinWithName(pinName);
  513. _context2.next = 8;
  514. return _promise.default.all([fromPinPromise, toPinPromises]);
  515. case 8:
  516. _yield$Promise$all = _context2.sent;
  517. _yield$Promise$all2 = (0, _slicedToArray2.default)(_yield$Promise$all, 1);
  518. pinned = _yield$Promise$all2[0];
  519. toPin = (0, _toConsumableArray2.default)(new _set.default((0, _concat.default)(_context = []).call(_context, (0, _toConsumableArray2.default)(pinned || []), objectKeys)));
  520. return _context2.abrupt("return", _this.pinWithName(pinName, toPin));
  521. case 13:
  522. case "end":
  523. return _context2.stop();
  524. }
  525. }
  526. }, _callee);
  527. }))();
  528. },
  529. // Removes object and children keys from pin name
  530. // Keeps the object and children pinned
  531. _handleUnPinAllWithName: function _handleUnPinAllWithName(name
  532. /*: string*/
  533. , objects
  534. /*: Array<ParseObject>*/
  535. ) {
  536. var _this2 = this;
  537. return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {
  538. var localDatastore, pinName, promises, objectKeys, _iterator2, _step2, _objectKeys, _context3, parent, children, parentKey, pinned, _iterator3, _step3, objectKey, hasReference, key, pinnedObjects;
  539. return _regeneratorRuntime().wrap(function _callee2$(_context4) {
  540. while (1) {
  541. switch (_context4.prev = _context4.next) {
  542. case 0:
  543. _context4.next = 2;
  544. return _this2._getAllContents();
  545. case 2:
  546. localDatastore = _context4.sent;
  547. pinName = _this2.getPinName(name);
  548. promises = [];
  549. objectKeys = [];
  550. _iterator2 = _createForOfIteratorHelper(objects);
  551. try {
  552. for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
  553. parent = _step2.value;
  554. children = _this2._getChildren(parent);
  555. parentKey = _this2.getKeyForObject(parent);
  556. (_objectKeys = objectKeys).push.apply(_objectKeys, (0, _concat.default)(_context3 = [parentKey]).call(_context3, (0, _toConsumableArray2.default)((0, _keys3.default)(children))));
  557. }
  558. } catch (err) {
  559. _iterator2.e(err);
  560. } finally {
  561. _iterator2.f();
  562. }
  563. objectKeys = (0, _toConsumableArray2.default)(new _set.default(objectKeys));
  564. pinned = localDatastore[pinName] || [];
  565. pinned = (0, _filter.default)(pinned).call(pinned, function (item) {
  566. return !(0, _includes.default)(objectKeys).call(objectKeys, item);
  567. });
  568. if (pinned.length == 0) {
  569. promises.push(_this2.unPinWithName(pinName));
  570. delete localDatastore[pinName];
  571. } else {
  572. promises.push(_this2.pinWithName(pinName, pinned));
  573. localDatastore[pinName] = pinned;
  574. }
  575. _iterator3 = _createForOfIteratorHelper(objectKeys);
  576. _context4.prev = 13;
  577. _iterator3.s();
  578. case 15:
  579. if ((_step3 = _iterator3.n()).done) {
  580. _context4.next = 31;
  581. break;
  582. }
  583. objectKey = _step3.value;
  584. hasReference = false;
  585. _context4.t0 = (0, _keys2.default)(_regenerator.default).call(_regenerator.default, localDatastore);
  586. case 19:
  587. if ((_context4.t1 = _context4.t0()).done) {
  588. _context4.next = 28;
  589. break;
  590. }
  591. key = _context4.t1.value;
  592. if (!(key === _LocalDatastoreUtils.DEFAULT_PIN || (0, _startsWith.default)(key).call(key, _LocalDatastoreUtils.PIN_PREFIX))) {
  593. _context4.next = 26;
  594. break;
  595. }
  596. pinnedObjects = localDatastore[key] || [];
  597. if (!(0, _includes.default)(pinnedObjects).call(pinnedObjects, objectKey)) {
  598. _context4.next = 26;
  599. break;
  600. }
  601. hasReference = true;
  602. return _context4.abrupt("break", 28);
  603. case 26:
  604. _context4.next = 19;
  605. break;
  606. case 28:
  607. if (!hasReference) {
  608. promises.push(_this2.unPinWithName(objectKey));
  609. }
  610. case 29:
  611. _context4.next = 15;
  612. break;
  613. case 31:
  614. _context4.next = 36;
  615. break;
  616. case 33:
  617. _context4.prev = 33;
  618. _context4.t2 = _context4["catch"](13);
  619. _iterator3.e(_context4.t2);
  620. case 36:
  621. _context4.prev = 36;
  622. _iterator3.f();
  623. return _context4.finish(36);
  624. case 39:
  625. return _context4.abrupt("return", _promise.default.all(promises));
  626. case 40:
  627. case "end":
  628. return _context4.stop();
  629. }
  630. }
  631. }, _callee2, null, [[13, 33, 36, 39]]);
  632. }))();
  633. },
  634. // Retrieve all pointer fields from object recursively
  635. _getChildren: function _getChildren(object
  636. /*: ParseObject*/
  637. ) {
  638. var encountered = {};
  639. var json = object._toFullJSON(undefined, true);
  640. for (var key in json) {
  641. if (json[key] && json[key].__type && json[key].__type === 'Object') {
  642. this._traverse(json[key], encountered);
  643. }
  644. }
  645. return encountered;
  646. },
  647. _traverse: function _traverse(object
  648. /*: any*/
  649. , encountered
  650. /*: any*/
  651. ) {
  652. if (!object.objectId) {
  653. return;
  654. } else {
  655. var objectKey = this.getKeyForObject(object);
  656. if (encountered[objectKey]) {
  657. return;
  658. }
  659. encountered[objectKey] = object;
  660. }
  661. for (var key in object) {
  662. var json = object[key];
  663. if (!object[key]) {
  664. json = object;
  665. }
  666. if (json.__type && json.__type === 'Object') {
  667. this._traverse(json, encountered);
  668. }
  669. }
  670. },
  671. // Transform keys in pin name to objects
  672. _serializeObjectsFromPinName: function _serializeObjectsFromPinName(name
  673. /*: string*/
  674. ) {
  675. var _this3 = this;
  676. return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3() {
  677. var _context5, _concatInstanceProper, _context6;
  678. var localDatastore, allObjects, key, pinName, pinned, promises, objects;
  679. return _regeneratorRuntime().wrap(function _callee3$(_context7) {
  680. while (1) {
  681. switch (_context7.prev = _context7.next) {
  682. case 0:
  683. _context7.next = 2;
  684. return _this3._getAllContents();
  685. case 2:
  686. localDatastore = _context7.sent;
  687. allObjects = [];
  688. for (key in localDatastore) {
  689. if ((0, _startsWith.default)(key).call(key, _LocalDatastoreUtils.OBJECT_PREFIX)) {
  690. allObjects.push(localDatastore[key][0]);
  691. }
  692. }
  693. if (name) {
  694. _context7.next = 7;
  695. break;
  696. }
  697. return _context7.abrupt("return", allObjects);
  698. case 7:
  699. pinName = _this3.getPinName(name);
  700. pinned = localDatastore[pinName];
  701. if ((0, _isArray.default)(pinned)) {
  702. _context7.next = 11;
  703. break;
  704. }
  705. return _context7.abrupt("return", []);
  706. case 11:
  707. promises = (0, _map.default)(pinned).call(pinned, function (objectKey) {
  708. return _this3.fromPinWithName(objectKey);
  709. });
  710. _context7.next = 14;
  711. return _promise.default.all(promises);
  712. case 14:
  713. objects = _context7.sent;
  714. objects = (_concatInstanceProper = (0, _concat.default)(_context5 = [])).call.apply(_concatInstanceProper, (0, _concat.default)(_context6 = [_context5]).call(_context6, (0, _toConsumableArray2.default)(objects)));
  715. return _context7.abrupt("return", (0, _filter.default)(objects).call(objects, function (object) {
  716. return object != null;
  717. }));
  718. case 17:
  719. case "end":
  720. return _context7.stop();
  721. }
  722. }
  723. }, _callee3);
  724. }))();
  725. },
  726. // Replaces object pointers with pinned pointers
  727. // The object pointers may contain old data
  728. // Uses Breadth First Search Algorithm
  729. _serializeObject: function _serializeObject(objectKey
  730. /*: string*/
  731. , localDatastore
  732. /*: any*/
  733. ) {
  734. var _this4 = this;
  735. return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4() {
  736. var LDS, root, queue, meta, uniqueId, nodeId, subTreeRoot, field, value, key, pointer;
  737. return _regeneratorRuntime().wrap(function _callee4$(_context8) {
  738. while (1) {
  739. switch (_context8.prev = _context8.next) {
  740. case 0:
  741. LDS = localDatastore;
  742. if (LDS) {
  743. _context8.next = 5;
  744. break;
  745. }
  746. _context8.next = 4;
  747. return _this4._getAllContents();
  748. case 4:
  749. LDS = _context8.sent;
  750. case 5:
  751. if (!(!LDS[objectKey] || LDS[objectKey].length === 0)) {
  752. _context8.next = 7;
  753. break;
  754. }
  755. return _context8.abrupt("return", null);
  756. case 7:
  757. root = LDS[objectKey][0];
  758. queue = [];
  759. meta = {};
  760. uniqueId = 0;
  761. meta[uniqueId] = root;
  762. queue.push(uniqueId);
  763. while (queue.length !== 0) {
  764. nodeId = queue.shift();
  765. subTreeRoot = meta[nodeId];
  766. for (field in subTreeRoot) {
  767. value = subTreeRoot[field];
  768. if (value.__type && value.__type === 'Object') {
  769. key = _this4.getKeyForObject(value);
  770. if (LDS[key] && LDS[key].length > 0) {
  771. pointer = LDS[key][0];
  772. uniqueId++;
  773. meta[uniqueId] = pointer;
  774. subTreeRoot[field] = pointer;
  775. queue.push(uniqueId);
  776. }
  777. }
  778. }
  779. }
  780. return _context8.abrupt("return", root);
  781. case 15:
  782. case "end":
  783. return _context8.stop();
  784. }
  785. }
  786. }, _callee4);
  787. }))();
  788. },
  789. // Called when an object is save / fetched
  790. // Update object pin value
  791. _updateObjectIfPinned: function _updateObjectIfPinned(object
  792. /*: ParseObject*/
  793. )
  794. /*: Promise<void>*/
  795. {
  796. var _this5 = this;
  797. return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regeneratorRuntime().mark(function _callee5() {
  798. var objectKey, pinned;
  799. return _regeneratorRuntime().wrap(function _callee5$(_context9) {
  800. while (1) {
  801. switch (_context9.prev = _context9.next) {
  802. case 0:
  803. if (_this5.isEnabled) {
  804. _context9.next = 2;
  805. break;
  806. }
  807. return _context9.abrupt("return");
  808. case 2:
  809. objectKey = _this5.getKeyForObject(object);
  810. _context9.next = 5;
  811. return _this5.fromPinWithName(objectKey);
  812. case 5:
  813. pinned = _context9.sent;
  814. if (!(!pinned || pinned.length === 0)) {
  815. _context9.next = 8;
  816. break;
  817. }
  818. return _context9.abrupt("return");
  819. case 8:
  820. return _context9.abrupt("return", _this5.pinWithName(objectKey, [object._toFullJSON()]));
  821. case 9:
  822. case "end":
  823. return _context9.stop();
  824. }
  825. }
  826. }, _callee5);
  827. }))();
  828. },
  829. // Called when object is destroyed
  830. // Unpin object and remove all references from pin names
  831. // TODO: Destroy children?
  832. _destroyObjectIfPinned: function _destroyObjectIfPinned(object
  833. /*: ParseObject*/
  834. ) {
  835. var _this6 = this;
  836. return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regeneratorRuntime().mark(function _callee6() {
  837. var localDatastore, objectKey, pin, promises, key, pinned;
  838. return _regeneratorRuntime().wrap(function _callee6$(_context10) {
  839. while (1) {
  840. switch (_context10.prev = _context10.next) {
  841. case 0:
  842. if (_this6.isEnabled) {
  843. _context10.next = 2;
  844. break;
  845. }
  846. return _context10.abrupt("return");
  847. case 2:
  848. _context10.next = 4;
  849. return _this6._getAllContents();
  850. case 4:
  851. localDatastore = _context10.sent;
  852. objectKey = _this6.getKeyForObject(object);
  853. pin = localDatastore[objectKey];
  854. if (pin) {
  855. _context10.next = 9;
  856. break;
  857. }
  858. return _context10.abrupt("return");
  859. case 9:
  860. promises = [_this6.unPinWithName(objectKey)];
  861. delete localDatastore[objectKey];
  862. for (key in localDatastore) {
  863. if (key === _LocalDatastoreUtils.DEFAULT_PIN || (0, _startsWith.default)(key).call(key, _LocalDatastoreUtils.PIN_PREFIX)) {
  864. pinned = localDatastore[key] || [];
  865. if ((0, _includes.default)(pinned).call(pinned, objectKey)) {
  866. pinned = (0, _filter.default)(pinned).call(pinned, function (item) {
  867. return item !== objectKey;
  868. });
  869. if (pinned.length == 0) {
  870. promises.push(_this6.unPinWithName(key));
  871. delete localDatastore[key];
  872. } else {
  873. promises.push(_this6.pinWithName(key, pinned));
  874. localDatastore[key] = pinned;
  875. }
  876. }
  877. }
  878. }
  879. return _context10.abrupt("return", _promise.default.all(promises));
  880. case 13:
  881. case "end":
  882. return _context10.stop();
  883. }
  884. }
  885. }, _callee6);
  886. }))();
  887. },
  888. // Update pin and references of the unsaved object
  889. _updateLocalIdForObject: function _updateLocalIdForObject(localId
  890. /*: string*/
  891. , object
  892. /*: ParseObject*/
  893. ) {
  894. var _this7 = this;
  895. return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regeneratorRuntime().mark(function _callee7() {
  896. var _context11, _context12;
  897. var localKey, objectKey, unsaved, promises, localDatastore, key, pinned;
  898. return _regeneratorRuntime().wrap(function _callee7$(_context13) {
  899. while (1) {
  900. switch (_context13.prev = _context13.next) {
  901. case 0:
  902. if (_this7.isEnabled) {
  903. _context13.next = 2;
  904. break;
  905. }
  906. return _context13.abrupt("return");
  907. case 2:
  908. localKey = (0, _concat.default)(_context11 = (0, _concat.default)(_context12 = "".concat(_LocalDatastoreUtils.OBJECT_PREFIX)).call(_context12, object.className, "_")).call(_context11, localId);
  909. objectKey = _this7.getKeyForObject(object);
  910. _context13.next = 6;
  911. return _this7.fromPinWithName(localKey);
  912. case 6:
  913. unsaved = _context13.sent;
  914. if (!(!unsaved || unsaved.length === 0)) {
  915. _context13.next = 9;
  916. break;
  917. }
  918. return _context13.abrupt("return");
  919. case 9:
  920. promises = [_this7.unPinWithName(localKey), _this7.pinWithName(objectKey, unsaved)];
  921. _context13.next = 12;
  922. return _this7._getAllContents();
  923. case 12:
  924. localDatastore = _context13.sent;
  925. for (key in localDatastore) {
  926. if (key === _LocalDatastoreUtils.DEFAULT_PIN || (0, _startsWith.default)(key).call(key, _LocalDatastoreUtils.PIN_PREFIX)) {
  927. pinned = localDatastore[key] || [];
  928. if ((0, _includes.default)(pinned).call(pinned, localKey)) {
  929. pinned = (0, _filter.default)(pinned).call(pinned, function (item) {
  930. return item !== localKey;
  931. });
  932. pinned.push(objectKey);
  933. promises.push(_this7.pinWithName(key, pinned));
  934. localDatastore[key] = pinned;
  935. }
  936. }
  937. }
  938. return _context13.abrupt("return", _promise.default.all(promises));
  939. case 15:
  940. case "end":
  941. return _context13.stop();
  942. }
  943. }
  944. }, _callee7);
  945. }))();
  946. },
  947. /**
  948. * Updates Local Datastore from Server
  949. *
  950. * <pre>
  951. * await Parse.LocalDatastore.updateFromServer();
  952. * </pre>
  953. *
  954. * @function updateFromServer
  955. * @name Parse.LocalDatastore.updateFromServer
  956. * @static
  957. */
  958. updateFromServer: function updateFromServer() {
  959. var _this8 = this;
  960. return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regeneratorRuntime().mark(function _callee8() {
  961. var _context14;
  962. var localDatastore, keys, key, pointersHash, _i, _keys, _key, _key$split, _key$split2, className, objectId, queryPromises, responses, objects, pinPromises;
  963. return _regeneratorRuntime().wrap(function _callee8$(_context15) {
  964. while (1) {
  965. switch (_context15.prev = _context15.next) {
  966. case 0:
  967. if (!(!_this8.checkIfEnabled() || _this8.isSyncing)) {
  968. _context15.next = 2;
  969. break;
  970. }
  971. return _context15.abrupt("return");
  972. case 2:
  973. _context15.next = 4;
  974. return _this8._getAllContents();
  975. case 4:
  976. localDatastore = _context15.sent;
  977. keys = [];
  978. for (key in localDatastore) {
  979. if ((0, _startsWith.default)(key).call(key, _LocalDatastoreUtils.OBJECT_PREFIX)) {
  980. keys.push(key);
  981. }
  982. }
  983. if (!(keys.length === 0)) {
  984. _context15.next = 9;
  985. break;
  986. }
  987. return _context15.abrupt("return");
  988. case 9:
  989. _this8.isSyncing = true;
  990. pointersHash = {};
  991. _i = 0, _keys = keys;
  992. case 12:
  993. if (!(_i < _keys.length)) {
  994. _context15.next = 23;
  995. break;
  996. }
  997. _key = _keys[_i]; // Ignore the OBJECT_PREFIX
  998. _key$split = _key.split('_'), _key$split2 = (0, _slicedToArray2.default)(_key$split, 4), className = _key$split2[2], objectId = _key$split2[3]; // User key is split into [ 'Parse', 'LDS', '', 'User', 'objectId' ]
  999. if (_key.split('_').length === 5 && _key.split('_')[3] === 'User') {
  1000. className = '_User';
  1001. objectId = _key.split('_')[4];
  1002. }
  1003. if (!(0, _startsWith.default)(objectId).call(objectId, 'local')) {
  1004. _context15.next = 18;
  1005. break;
  1006. }
  1007. return _context15.abrupt("continue", 20);
  1008. case 18:
  1009. if (!(className in pointersHash)) {
  1010. pointersHash[className] = new _set.default();
  1011. }
  1012. pointersHash[className].add(objectId);
  1013. case 20:
  1014. _i++;
  1015. _context15.next = 12;
  1016. break;
  1017. case 23:
  1018. queryPromises = (0, _map.default)(_context14 = (0, _keys3.default)(pointersHash)).call(_context14, function (className) {
  1019. var objectIds = (0, _from.default)(pointersHash[className]);
  1020. var query = new _ParseQuery.default(className);
  1021. query.limit(objectIds.length);
  1022. if (objectIds.length === 1) {
  1023. query.equalTo('objectId', objectIds[0]);
  1024. } else {
  1025. query.containedIn('objectId', objectIds);
  1026. }
  1027. return (0, _find.default)(query).call(query);
  1028. });
  1029. _context15.prev = 24;
  1030. _context15.next = 27;
  1031. return _promise.default.all(queryPromises);
  1032. case 27:
  1033. responses = _context15.sent;
  1034. objects = (0, _concat.default)([]).apply([], responses);
  1035. pinPromises = (0, _map.default)(objects).call(objects, function (object) {
  1036. var objectKey = _this8.getKeyForObject(object);
  1037. return _this8.pinWithName(objectKey, object._toFullJSON());
  1038. });
  1039. _context15.next = 32;
  1040. return _promise.default.all(pinPromises);
  1041. case 32:
  1042. _this8.isSyncing = false;
  1043. _context15.next = 39;
  1044. break;
  1045. case 35:
  1046. _context15.prev = 35;
  1047. _context15.t0 = _context15["catch"](24);
  1048. console.error('Error syncing LocalDatastore: ', _context15.t0);
  1049. _this8.isSyncing = false;
  1050. case 39:
  1051. case "end":
  1052. return _context15.stop();
  1053. }
  1054. }
  1055. }, _callee8, null, [[24, 35]]);
  1056. }))();
  1057. },
  1058. getKeyForObject: function getKeyForObject(object
  1059. /*: any*/
  1060. ) {
  1061. var _context16, _context17;
  1062. var objectId = object.objectId || object._getId();
  1063. return (0, _concat.default)(_context16 = (0, _concat.default)(_context17 = "".concat(_LocalDatastoreUtils.OBJECT_PREFIX)).call(_context17, object.className, "_")).call(_context16, objectId);
  1064. },
  1065. getPinName: function getPinName(pinName
  1066. /*: ?string*/
  1067. ) {
  1068. if (!pinName || pinName === _LocalDatastoreUtils.DEFAULT_PIN) {
  1069. return _LocalDatastoreUtils.DEFAULT_PIN;
  1070. }
  1071. return _LocalDatastoreUtils.PIN_PREFIX + pinName;
  1072. },
  1073. checkIfEnabled: function checkIfEnabled() {
  1074. if (!this.isEnabled) {
  1075. console.error('Parse.enableLocalDatastore() must be called first');
  1076. }
  1077. return this.isEnabled;
  1078. }
  1079. };
  1080. module.exports = LocalDatastore;
  1081. _CoreManager.default.setLocalDatastoreController(require('./LocalDatastoreController'));
  1082. _CoreManager.default.setLocalDatastore(LocalDatastore);