From 95fdb2c8a4f91d748ea3e651d06d691101db17c8 Mon Sep 17 00:00:00 2001 From: Ewout Stortenbeker Date: Sat, 22 Oct 2022 22:50:59 +0200 Subject: [PATCH] chore: build --- dist/browser.js | 108 +++++++++++++++++++++++++++------------- dist/browser.min.js | 4 +- dist/cjs/api-web.js | 2 +- dist/cjs/api-web.js.map | 2 +- dist/types/api-web.d.ts | 3 +- 5 files changed, 79 insertions(+), 40 deletions(-) diff --git a/dist/browser.js b/dist/browser.js index 95afe3f..250c570 100644 --- a/dist/browser.js +++ b/dist/browser.js @@ -884,7 +884,7 @@ class WebApi extends acebase_core_1.Api { pathSubs.splice(pathSubs.indexOf(subscr), 1); if (this.hasCache) { // Events are also handled by cache db, also remove those - if (typeof subscr.cacheCallback !== 'undefined') { + if (typeof subscr.cacheCallback !== 'function') { throw new Error('DEV ERROR: When subscription was added, cacheCallback must have been set'); } this.cache.db.api.unsubscribe(acebase_core_1.PathInfo.getChildPath(`${this.dbname}/cache`, path), subscr.event, subscr.cacheCallback); @@ -5313,13 +5313,39 @@ const debug_1 = require("./debug"); const simple_colors_1 = require("./simple-colors"); class AceBaseBaseSettings { constructor(options) { + /** + * What level to use for console logging. + * @default 'log' + */ + this.logLevel = 'log'; + /** + * Whether to use colors in the console logs output + * @default true + */ + this.logColors = true; + /** + * @internal (for internal use) + */ + this.info = 'realtime database'; + /** + * You can turn this on if you are a sponsor. See https://github.com/appy-one/acebase/discussions/100 for more info + */ + this.sponsor = false; if (typeof options !== 'object') { options = {}; } - this.logLevel = options.logLevel || 'log'; - this.logColors = typeof options.logColors === 'boolean' ? options.logColors : true; - this.info = typeof options.info === 'string' ? options.info : undefined; - this.sponsor = typeof options.sponsor === 'boolean' ? options.sponsor : false; + if (typeof options.logLevel === 'string') { + this.logLevel = options.logLevel; + } + if (typeof options.logColors === 'boolean') { + this.logColors = options.logColors; + } + if (typeof options.info === 'string') { + this.info = options.info; + } + if (typeof options.sponsor === 'boolean') { + this.sponsor = options.sponsor; + } } } exports.AceBaseBaseSettings = AceBaseBaseSettings; @@ -5327,10 +5353,10 @@ class AceBaseBase extends simple_event_emitter_1.SimpleEventEmitter { /** * @param dbname Name of the database to open or create */ - constructor(dbname, options) { + constructor(dbname, options = {}) { super(); this._ready = false; - options = new AceBaseBaseSettings(options || {}); + options = new AceBaseBaseSettings(options); this.name = dbname; // Setup console logging this.debug = new debug_1.DebugLogger(options.logLevel, `[${dbname}]`); @@ -6992,7 +7018,20 @@ class DataReference { /** * The key or index of this node */ - get key() { return this[_private].key; } + get key() { + const key = this[_private].key; + return typeof key === 'number' ? `[${key}]` : key; + } + /** + * If the "key" is a number, it is an index! + */ + get index() { + const key = this[_private].key; + if (typeof key !== 'number') { + throw new Error(`"${key}" is not a number`); + } + return key; + } /** * Returns a new reference to this node's parent */ @@ -9779,33 +9818,34 @@ const deserialize2 = (data) => { // primitive value, not serialized return data; } - switch (data['.type']) { - case undefined: { - // No type given: this is a plain object or array - if (data instanceof Array) { - // Plain array, deserialize items into a copy - const copy = []; - const arr = data; - for (let i = 0; i < arr.length; i++) { - copy.push((0, exports.deserialize2)(arr[i])); - } - return copy; - } - else { - // Plain object, deserialize properties into a copy - const copy = {}; - const obj = data; - for (const prop in obj) { - copy[prop] = (0, exports.deserialize2)(obj[prop]); - } - return copy; + if (typeof data['.type'] === 'undefined') { + // No type given: this is a plain object or array + if (data instanceof Array) { + // Plain array, deserialize items into a copy + const copy = []; + const arr = data; + for (let i = 0; i < arr.length; i++) { + copy.push((0, exports.deserialize2)(arr[i])); } + return copy; } - case 'bigint': { + else { + // Plain object, deserialize properties into a copy + const copy = {}; + const obj = data; + for (const prop in obj) { + copy[prop] = (0, exports.deserialize2)(obj[prop]); + } + return copy; + } + } + else if (typeof data['.type'] === 'string') { + const dataType = data['.type'].toLowerCase(); + if (dataType === 'bigint') { const val = data['.val']; return BigInt(val); } - case 'array': { + else if (dataType === 'array') { // partial ("sparse") array, deserialize children into a copy const copy = {}; for (const index in data) { @@ -9814,21 +9854,21 @@ const deserialize2 = (data) => { delete copy['.type']; return new partial_array_1.PartialArray(copy); } - case 'date': { + else if (dataType === 'date') { // Date was serialized as a string (UTC) const val = data['.val']; return new Date(val); } - case 'binary': { + else if (dataType === 'binary') { // ascii85 encoded binary data const val = data['.val']; return ascii85_1.ascii85.decode(val); } - case 'reference': { + else if (dataType === 'reference') { const val = data['.val']; return new path_reference_1.PathReference(val); } - case 'regexp': { + else if (dataType === 'regexp') { const val = data['.val']; if (typeof val === 'string') { // serialized as '/(pattern)/flags' diff --git a/dist/browser.min.js b/dist/browser.min.js index b12d197..136552a 100644 --- a/dist/browser.min.js +++ b/dist/browser.min.js @@ -1,5 +1,5 @@ (function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.acebaseclient=f()}})((function(){var define,module,exports;return function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,(function(r){var n=e[i][1][r];return o(n||r)}),p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i{ready=true}));this.debug=new acebase_core_1.DebugLogger(settings.logLevel,`[${settings.dbname}]`.colorize(acebase_core_1.ColorStyle.blue));const synchronizeClocks=()=>__awaiter(this,void 0,void 0,(function*(){const info=yield this.api.getServerInfo();const now=Date.now(),bias=info.time-now;(0,server_date_1.setServerBias)(bias)}));this.on("connect",(()=>{if(cacheDb&&"settings"in cacheDb){cacheDb.settings.ipcEvents=false}synchronizeClocks()}));this.on("disconnect",(()=>{if(cacheDb&&"settings"in cacheDb){cacheDb.settings.ipcEvents=true}}));this.sync=()=>__awaiter(this,void 0,void 0,(function*(){const result=yield syncPendingChanges(true);return result}));let syncRunning=false,firstSync=true;const syncPendingChanges=(throwErrors=false)=>__awaiter(this,void 0,void 0,(function*(){if(syncRunning){if(throwErrors){throw new Error("sync already running")}return}if(!this.api.isConnected){if(throwErrors){throw new Error("not connected")}return}syncRunning=true;try{yield cacheReadyPromise;return yield this.api.sync({firstSync:firstSync,fetchFreshData:!firstSync,eventCallback:(eventName,args)=>{this.debug.log(eventName,args||"");this.emit(eventName,args)}})}catch(err){if(throwErrors){throw err}else{console.error(`Failed to synchronize:`,err)}}finally{syncRunning=false;firstSync=false}}));let syncTimeout;this.on("connect",(()=>{if(settings.sync.timing==="connect"||settings.sync.timing==="signin"&&this.auth.accessToken){syncPendingChanges()}else if(settings.sync.timing==="auto"){syncTimeout&&clearTimeout(syncTimeout);syncTimeout=setTimeout(syncPendingChanges,2500)}}));this.on("signin",(()=>{if(settings.sync.timing==="auto"){syncTimeout&&clearTimeout(syncTimeout)}if(["auto","signin"].includes(settings.sync.timing)){syncPendingChanges()}}));const emitClientReady=()=>__awaiter(this,void 0,void 0,(function*(){if(cacheDb){yield cacheDb.ready()}this.emit("ready")}));this.api=new api_web_1.WebApi(settings.dbname,{network:settings.network,sync:settings.sync,logLevel:settings.logLevel,autoConnect:settings.autoConnect,autoConnectDelay:settings.autoConnectDelay,cache:settings.cache,debug:this.debug,url:`http${settings.https?"s":""}://${settings.host}:${settings.port}`},((evt,data)=>{if(evt==="connect"){this.emit("connect");if(!ready){emitClientReady()}}else if(evt==="connect_error"){this.emit("connect_error",data);if(!ready&&cacheDb){emitClientReady()}}else if(evt==="disconnect"){this.emit("disconnect")}}));this.auth=new auth_1.AceBaseClientAuth(this,((event,arg)=>{this.emit(event,arg)}))}sync(){return __awaiter(this,void 0,void 0,(function*(){throw new Error("Must be set by constructor")}))}get connected(){return this.api.isConnected}get connectionState(){return this.api.connectionState}connect(){return this.api.connect()}disconnect(){this.api.disconnect()}close(){this.disconnect()}callExtension(method,path,data){return this.api.callExtension(method,path,data)}getCursor(){return this.api.getSyncCursor()}setCursor(cursor){this.api.setSyncCursor(cursor)}get cache(){const clear=(path="")=>__awaiter(this,void 0,void 0,(function*(){yield this.api.clearCache(path)}));const update=(path="",cursor)=>this.api.updateCache(path,cursor);const get=(path,cursor)=>__awaiter(this,void 0,void 0,(function*(){const options=Object.freeze(cursor?{cache_mode:"allow",cache_cursor:cursor}:{cache_mode:"force"});const snap=yield this.ref(path).get(options);return snap}));return{clear:clear,update:update,get:get}}}exports.AceBaseClient=AceBaseClient},{"./api-web":2,"./auth":3,"./server-date":12,"acebase-core":30}],2:[function(require,module,exports){"use strict";var __awaiter=this&&this.__awaiter||function(thisArg,_arguments,P,generator){function adopt(value){return value instanceof P?value:new P((function(resolve){resolve(value)}))}return new(P||(P=Promise))((function(resolve,reject){function fulfilled(value){try{step(generator.next(value))}catch(e){reject(e)}}function rejected(value){try{step(generator["throw"](value))}catch(e){reject(e)}}function step(result){result.done?resolve(result.value):adopt(result.value).then(fulfilled,rejected)}step((generator=generator.apply(thisArg,_arguments||[])).next())}))};Object.defineProperty(exports,"__esModule",{value:true});exports.WebApi=void 0;const acebase_core_1=require("acebase-core");const socket_io_client_1=require("socket.io-client");const Base64=require("./base64");const error_1=require("./request/error");const errors_1=require("./errors");const promise_timeout_1=require("./promise-timeout");const request_1=require("./request");const _websocketRequest=(socket,event,data,accessToken)=>{if(!socket){throw new Error(`Cannot send request because websocket connection is not open`)}const requestId=acebase_core_1.ID.generate();const request=Object.assign(Object.assign({},data),{req_id:requestId,access_token:accessToken});return new Promise(((resolve,reject)=>{if(!socket){return reject(new error_1.AceBaseRequestError(request,null,"websocket","No open websocket connection"))}let timeout;const send=(retry=0)=>{socket.emit(event,request);timeout=setTimeout((()=>{if(retry<2){return send(retry+1)}socket.off("result",handle);const err=new error_1.AceBaseRequestError(request,null,"timeout",`Server did not respond to "${event}" request after ${retry+1} tries`);reject(err)}),1e3)};const handle=response=>{if(response.req_id===requestId){clearTimeout(timeout);socket.off("result",handle);if(response.success){return resolve(response)}const code=typeof response.reason==="object"?response.reason.code:response.reason;const message=typeof response.reason==="object"?response.reason.message:`request failed: ${code}`;const err=new error_1.AceBaseRequestError(request,response,code,message);reject(err)}};socket.on("result",handle);send()}))};class EventSubscription{constructor(path,event,callback,settings){this.path=path;this.event=event;this.callback=callback;this.settings=settings;this.state="requested";this.added=Date.now();this.activated=0;this.lastEvent=0;this.lastSynced=0;this.cursor=null;this.cacheCallback=null}activate(){this.state="active";if(this.activated===0){this.activated=Date.now()}}cancel(reason){this.state="canceled";this.settings.cancelCallback(reason)}}const CONNECTION_STATE_DISCONNECTED="disconnected";const CONNECTION_STATE_CONNECTING="connecting";const CONNECTION_STATE_CONNECTED="connected";const CONNECTION_STATE_DISCONNECTING="disconnecting";const NOOP=()=>{};class WebApi extends acebase_core_1.Api{constructor(dbname="default",settings,callback){super();this.dbname=dbname;this.settings=settings;this._id=acebase_core_1.ID.generate();this.socket=null;this._serverVersion="unknown";this._cursor={current:null,sync:null};this._eventTimeline={init:Date.now(),connect:0,signIn:0,sync:0,disconnect:0};this._subscriptions={};this._realtimeQueries={};this.accessToken=null;this.manualConnectionMonitor=new acebase_core_1.SimpleEventEmitter;this._id=acebase_core_1.ID.generate();this._autoConnect=typeof settings.autoConnect==="boolean"?settings.autoConnect:true;this._autoConnectDelay=typeof settings.autoConnectDelay==="number"?settings.autoConnectDelay:0;this._connectionState=CONNECTION_STATE_DISCONNECTED;if(settings.cache.enabled!==false){this._cache={db:settings.cache.db,priority:settings.cache.priority}}if(settings.network.monitor){const interval=setInterval((()=>this.checkConnection()),settings.network.interval*1e3);interval.unref&&interval.unref()}this.debug=settings.debug;this.eventCallback=(event,...args)=>{if(event==="disconnect"){this._cursor.sync=this._cursor.current}callback&&callback(event,...args)};if(this._autoConnect){if(this._autoConnectDelay){setTimeout((()=>this.connect().catch(NOOP)),this._autoConnectDelay)}else{this.connect().catch(NOOP)}}}setSyncCursor(cursor){this._cursor.sync=cursor}getSyncCursor(){return this._cursor.sync}get url(){return this.settings.url}_updateCursor(cursor){return __awaiter(this,void 0,void 0,(function*(){if(!cursor||this._cursor.current&&cursor1?"s":""} for socket.io`);return new Promise(((resolve,reject)=>{var _a;if(!((_a=this.settings.network)===null||_a===void 0?void 0:_a.realtime)){this.manualConnectionMonitor.off("connect");this.manualConnectionMonitor.off("connect_error");this.manualConnectionMonitor.off("disconnect");this.manualConnectionMonitor.on("connect",(()=>{this._connectionState=CONNECTION_STATE_CONNECTED;this._eventTimeline.connect=Date.now();this.manualConnectionMonitor.off("connect_error");this.eventCallback("connect");resolve()}));this.manualConnectionMonitor.on("connect_error",(err=>{this.debug.error(`API connection error: ${err.message||err}`);this.eventCallback("connect_error",err);reject(err)}));this.manualConnectionMonitor.on("disconnect",(()=>{if(this._connectionState===CONNECTION_STATE_DISCONNECTING){this._connectionState=CONNECTION_STATE_DISCONNECTED;this.manualConnectionMonitor.off("connect");this.manualConnectionMonitor.off("disconnect");this.manualConnectionMonitor.off("connect_error")}else{this._connectionState=CONNECTION_STATE_CONNECTING;this._eventTimeline.disconnect=Date.now()}this.eventCallback("disconnect")}));this._connectionState=CONNECTION_STATE_CONNECTING;return setTimeout((()=>this.checkConnection()),0)}const socket=this.socket=(0,socket_io_client_1.connect)(this.url,{autoConnect:true,reconnection:true,reconnectionAttempts:Infinity,reconnectionDelay:1e3,reconnectionDelayMax:5e3,timeout:2e4,randomizationFactor:.5,transports:transports});socket.on("connect_error",(err=>{this.debug.error(`Websocket connection error: ${err}`);this.eventCallback("connect_error",err);reject(err)}));socket.on("connect",(()=>__awaiter(this,void 0,void 0,(function*(){this._connectionState=CONNECTION_STATE_CONNECTED;this._eventTimeline.connect=Date.now();if(this.accessToken){const isFirstSignIn=this._eventTimeline.signIn===0;try{yield this.signInWithToken(this.accessToken,isFirstSignIn)}catch(err){this.debug.error(`Could not automatically sign in user with access token upon reconnect: ${err.code||err.message}`)}}const subscribeTo=sub=>__awaiter(this,void 0,void 0,(function*(){const subs=this._subscriptions[sub.path].filter((s=>s.event===sub.event));try{const result=yield _websocketRequest(this.socket,"subscribe",{path:sub.path,event:sub.event},this.accessToken);subs.forEach((s=>s.activate()))}catch(err){if(err.code==="access_denied"&&!this.accessToken){this.debug.error(`Could not subscribe to event "${sub.event}" on path "${sub.path}" because you are not signed in. If you added this event while offline and have a user access token, you can prevent this by using client.auth.setAccessToken(token) to automatically try signing in after connecting`)}else{this.debug.error(err)}subs.forEach((s=>s.cancel(err)))}}));const subscribePromises=[];Object.keys(this._subscriptions).forEach((path=>{const events=[];this._subscriptions[path].forEach((sub=>{if(sub.event==="mutated"){return}const serverAlreadyNotifying=events.includes(sub.event);if(!serverAlreadyNotifying){events.push(sub.event);const promise=subscribeTo(sub);subscribePromises.push(promise)}}))}));const subscribeToMutatedEvents=()=>__awaiter(this,void 0,void 0,(function*(){let retry=false;const promises=Object.keys(this._subscriptions).filter((path=>this._subscriptions[path].some((sub=>sub.event==="mutated"&&sub.state!=="canceled")))).filter(((path,i,arr)=>!arr.some((otherPath=>acebase_core_1.PathInfo.get(otherPath).isAncestorOf(path))))).reduce(((topPaths,path)=>(topPaths.includes(path)||topPaths.push(path))&&topPaths),[]).map((topEventPath=>{const sub=this._subscriptions[topEventPath].find((s=>s.event==="mutated"));const promise=subscribeTo(sub).then((()=>{if(sub.state==="canceled"){retry=true}}));return promise}));yield Promise.all(promises);if(retry){yield subscribeToMutatedEvents()}}));subscribePromises.push(subscribeToMutatedEvents());yield Promise.all(subscribePromises);this.eventCallback("connect");resolve()}))));socket.on("disconnect",(reason=>{this.debug.warn(`Websocket disconnected: ${reason}`);if(this._connectionState===CONNECTION_STATE_DISCONNECTING){this._connectionState=CONNECTION_STATE_DISCONNECTED}else{this._connectionState=CONNECTION_STATE_CONNECTING;this._eventTimeline.disconnect=Date.now();if(reason==="io server disconnect"){this.socket=null;this.connect().catch((err=>{}))}}this.eventCallback("disconnect")}));socket.on("data-event",(data=>{var _a;const val=acebase_core_1.Transport.deserialize(data.val);const context=data.context||{};context.acebase_event_source="server";this._updateCursor(context.acebase_cursor);const causedByUs=((_a=context.acebase_mutation)===null||_a===void 0?void 0:_a.client_id)===this._id;const cacheEnabled=this.hasCache;//!!this._cache?.db; -const fireThisEvent=!causedByUs||!cacheEnabled;const updateCache=!causedByUs&&cacheEnabled;const fireCacheEvents=false;const pathSubs=this._subscriptions[data.subscr_path];if(!pathSubs&&data.event!=="mutated"){return}if(updateCache){if(data.path.startsWith("__")){}else if(data.event==="mutations"){const mutations=val.current;mutations.forEach((m=>{const path=m.target.reduce(((path,key)=>acebase_core_1.PathInfo.getChildPath(path,key)),acebase_core_1.PathInfo.getChildPath(`${this.dbname}/cache`,data.path));this.cache.db.api.set(path,m.val,{suppress_events:!fireCacheEvents,context:context})}))}else if(data.event==="notify_child_removed"){this.cache.db.api.set(acebase_core_1.PathInfo.getChildPath(`${this.dbname}/cache`,data.path),null,{suppress_events:!fireCacheEvents,context:context})}else if(!data.event.startsWith("notify_")){this.cache.db.api.set(acebase_core_1.PathInfo.getChildPath(`${this.dbname}/cache`,data.path),val.current,{suppress_events:!fireCacheEvents,context:context})}}if(!fireThisEvent){return}const targetSubs=data.event==="mutated"?Object.keys(this._subscriptions).filter((path=>{const pathInfo=acebase_core_1.PathInfo.get(path);return path===data.path||pathInfo.equals(data.subscr_path)||pathInfo.isAncestorOf(data.path)})).reduce(((subs,path)=>{const add=this._subscriptions[path].filter((sub=>sub.event==="mutated"));subs.push(...add);return subs}),[]):pathSubs.filter((sub=>sub.event===data.event));targetSubs.forEach((subscr=>{subscr.lastEvent=Date.now();subscr.cursor=context.acebase_cursor;subscr.callback(null,data.path,val.current,val.previous,context)}))}));socket.on("query-event",(data=>{data=acebase_core_1.Transport.deserialize(data);const query=this._realtimeQueries[data.query_id];let keepMonitoring=true;try{keepMonitoring=query.options.eventHandler(data)}catch(err){keepMonitoring=false}if(keepMonitoring===false){delete this._realtimeQueries[data.query_id];socket.emit("query-unsubscribe",{query_id:data.query_id})}}))}))}disconnect(){var _a;if(!((_a=this.settings.network)===null||_a===void 0?void 0:_a.realtime)){this._connectionState=CONNECTION_STATE_DISCONNECTING;this._eventTimeline.disconnect=Date.now();this.manualConnectionMonitor.emit("disconnect")}else if(this.socket!==null&&typeof this.socket==="object"){this._connectionState=CONNECTION_STATE_DISCONNECTING;this._eventTimeline.disconnect=Date.now();this.socket.disconnect();this.socket=null}}subscribe(path,event,callback,settings){var _a;return __awaiter(this,void 0,void 0,(function*(){if(!((_a=this.settings.network)===null||_a===void 0?void 0:_a.realtime)){throw new Error(`Cannot subscribe to realtime events because it has been disabled in the network settings`)}let pathSubs=this._subscriptions[path];if(!pathSubs){pathSubs=this._subscriptions[path]=[]}const serverAlreadyNotifying=pathSubs.some((sub=>sub.event===event))||event==="mutated"&&Object.keys(this._subscriptions).some((otherPath=>acebase_core_1.PathInfo.get(otherPath).isAncestorOf(path)&&this._subscriptions[otherPath].some((sub=>sub.event===event&&sub.state==="active"))));const subscr=new EventSubscription(path,event,callback,settings);pathSubs.push(subscr);if(this.hasCache){subscr.cacheCallback=(err,path,newValue,oldValue,context)=>subscr.callback(err,path.slice(`${this.dbname}/cache/`.length),newValue,oldValue,context);this.cache.db.api.subscribe(acebase_core_1.PathInfo.getChildPath(`${this.dbname}/cache`,path),event,subscr.cacheCallback)}if(serverAlreadyNotifying||!this.isConnected){return}if(event==="mutated"){Object.keys(this._subscriptions).filter((otherPath=>acebase_core_1.PathInfo.get(otherPath).isDescendantOf(path)&&this._subscriptions[otherPath].some((sub=>sub.event==="mutated")))).map((path=>_websocketRequest(this.socket,"unsubscribe",{path:path,event:"mutated"},this.accessToken))).map((promise=>promise.catch((err=>console.error(err)))))}const result=yield _websocketRequest(this.socket,"subscribe",{path:path,event:event},this.accessToken);subscr.activate()}))}unsubscribe(path,event,callback){var _a;return __awaiter(this,void 0,void 0,(function*(){if(!((_a=this.settings.network)===null||_a===void 0?void 0:_a.realtime)){throw new Error(`Cannot unsubscribe from realtime events because it has been disabled in the network settings`)}const pathSubs=this._subscriptions[path];if(!pathSubs){return Promise.resolve()}const unsubscribeFrom=subscriptions=>{subscriptions.forEach((subscr=>{pathSubs.splice(pathSubs.indexOf(subscr),1);if(this.hasCache){if(typeof subscr.cacheCallback!=="undefined"){throw new Error("DEV ERROR: When subscription was added, cacheCallback must have been set")}this.cache.db.api.unsubscribe(acebase_core_1.PathInfo.getChildPath(`${this.dbname}/cache`,path),subscr.event,subscr.cacheCallback)}}))};const hadMutatedEvents=pathSubs.some((sub=>sub.event==="mutated"));if(!event){unsubscribeFrom(pathSubs)}else if(!callback){const subscriptions=pathSubs.filter((subscr=>subscr.event===event));unsubscribeFrom(subscriptions)}else{const subscriptions=pathSubs.filter((subscr=>subscr.event===event&&subscr.callback===callback));unsubscribeFrom(subscriptions)}const hasMutatedEvents=pathSubs.some((sub=>sub.event==="mutated"));let promise=Promise.resolve();if(pathSubs.length===0){delete this._subscriptions[path];if(this.isConnected){promise=_websocketRequest(this.socket,"unsubscribe",{path:path,access_token:this.accessToken},this.accessToken).catch((err=>this.debug.error(`Failed to unsubscribe from event(s) on "${path}": ${err.message}`)))}}else if(this.isConnected&&!pathSubs.some((subscr=>subscr.event===event))){promise=_websocketRequest(this.socket,"unsubscribe",{path:path,event:event,access_token:this.accessToken},this.accessToken).catch((err=>this.debug.error(`Failed to unsubscribe from event "${event}" on "${path}": ${err.message}`)))}if(this.isConnected&&hadMutatedEvents&&!hasMutatedEvents){const promises=Object.keys(this._subscriptions).filter((otherPath=>acebase_core_1.PathInfo.get(otherPath).isDescendantOf(path)&&this._subscriptions[otherPath].some((sub=>sub.event==="mutated")))).map((path=>_websocketRequest(this.socket,"subscribe",{path:path,event:"mutated"},this.accessToken))).map((promise=>promise.catch((err=>this.debug.error(`Failed to subscribe to event "${event}" on path "${path}": ${err.message}`)))));promise=Promise.all([promise,...promises])}yield promise}))}transaction(path,callback,options={context:{}}){const id=acebase_core_1.ID.generate();options.context=options.context||{};options.context.acebase_mutation={client_id:this._id,id:id,op:"transaction",path:path,flow:"server"};const cachePath=acebase_core_1.PathInfo.getChildPath(`${this.dbname}/cache`,path);return new Promise(((resolve,reject)=>__awaiter(this,void 0,void 0,(function*(){var _a;let cacheUpdateVal;const handleSuccess=context=>__awaiter(this,void 0,void 0,(function*(){if(this.hasCache&&typeof cacheUpdateVal!=="undefined"){yield this.cache.db.api.set(cachePath,cacheUpdateVal)}resolve({cursor:context===null||context===void 0?void 0:context.acebase_cursor})}));if(this.isConnected&&((_a=this.settings.network)===null||_a===void 0?void 0:_a.realtime)){const socket=this.socket;const startedCallback=data=>__awaiter(this,void 0,void 0,(function*(){if(data.id===id){socket.off("tx_started",startedCallback);const currentValue=acebase_core_1.Transport.deserialize(data.value);let newValue=callback(currentValue);if(newValue instanceof Promise){newValue=yield newValue}socket.emit("transaction",{action:"finish",id:id,path:path,value:acebase_core_1.Transport.serialize(newValue),access_token:this.accessToken});if(this.hasCache){cacheUpdateVal=newValue}}}));const completedCallback=data=>{if(data.id===id){socket.off("tx_completed",completedCallback);socket.off("tx_error",errorCallback);handleSuccess(data.context)}};const errorCallback=data=>{if(data.id===id){socket.off("tx_started",startedCallback);socket.off("tx_completed",completedCallback);socket.off("tx_error",errorCallback);reject(new Error(data.reason))}};socket.on("tx_started",startedCallback);socket.on("tx_completed",completedCallback);socket.on("tx_error",errorCallback);socket.emit("transaction",{action:"start",id:id,path:path,access_token:this.accessToken,context:options.context})}else{const startData=JSON.stringify({path:path});try{const tx=yield this._request({ignoreConnectionState:true,method:"POST",url:`${this.url}/transaction/${this.dbname}/start`,data:startData,context:options.context});const id=tx.id;const currentValue=acebase_core_1.Transport.deserialize(tx.value);let newValue=callback(currentValue);if(newValue instanceof Promise){newValue=yield newValue}if(this.hasCache){cacheUpdateVal=newValue}const finishData=JSON.stringify({id:id,value:acebase_core_1.Transport.serialize(newValue)});const{context:context}=yield this._request({ignoreConnectionState:true,method:"POST",url:`${this.url}/transaction/${this.dbname}/finish`,data:finishData,context:options.context,includeContext:true});yield handleSuccess(context)}catch(err){if(["ETIMEDOUT","ENOTFOUND","ECONNRESET","ECONNREFUSED","EPIPE","fetch_failed"].includes(err.code)){err.message=error_1.NOT_CONNECTED_ERROR_MESSAGE}reject(err)}}}))))}_request(options){var _a;return __awaiter(this,void 0,void 0,(function*(){if(this.isConnected||options.ignoreConnectionState===true){const result=yield(()=>__awaiter(this,void 0,void 0,(function*(){try{return yield(0,request_1.default)(options.method||"GET",options.url,{data:options.data,accessToken:this.accessToken,dataReceivedCallback:options.dataReceivedCallback,dataRequestCallback:options.dataRequestCallback,context:options.context})}catch(err){if(this.isConnected&&err.isNetworkError){this.debug.warn(`A network error occurred loading ${options.url}`);this._handleDetectedDisconnect(err)}throw err}})))();if(result.context&&result.context.acebase_cursor){this._updateCursor(result.context.acebase_cursor)}if(options.includeContext===true){if(!result.context){result.context={}}return result}else{return result.data}}else{if(!this.isConnecting||!((_a=this.settings.network)===null||_a===void 0?void 0:_a.realtime)){throw new Error(error_1.NOT_CONNECTED_ERROR_MESSAGE)}const connectPromise=new Promise((resolve=>{var _a;return(_a=this.socket)===null||_a===void 0?void 0:_a.once("connect",resolve)}));yield(0,promise_timeout_1.promiseTimeout)(connectPromise,1e3,"Waiting for connection").catch((err=>{throw new Error(error_1.NOT_CONNECTED_ERROR_MESSAGE)}));return this._request(options)}}))}handleSignInResult(result,emitEvent=true){var _a;this._eventTimeline.signIn=Date.now();const details={user:result.user,accessToken:result.access_token,provider:result.provider||"acebase"};this.accessToken=details.accessToken;(_a=this.socket)===null||_a===void 0?void 0:_a.emit("signin",details.accessToken);emitEvent&&this.eventCallback("signin",details);return details}signIn(username,password){return __awaiter(this,void 0,void 0,(function*(){if(!this.isConnected){throw new Error(error_1.NOT_CONNECTED_ERROR_MESSAGE)}const result=yield this._request({method:"POST",url:`${this.url}/auth/${this.dbname}/signin`,data:{method:"account",username:username,password:password,client_id:this.socket&&this.socket.id}});return this.handleSignInResult(result)}))}signInWithEmail(email,password){return __awaiter(this,void 0,void 0,(function*(){if(!this.isConnected){throw new Error(error_1.NOT_CONNECTED_ERROR_MESSAGE)}const result=yield this._request({method:"POST",url:`${this.url}/auth/${this.dbname}/signin`,data:{method:"email",email:email,password:password,client_id:this.socket&&this.socket.id}});return this.handleSignInResult(result)}))}signInWithToken(token,emitEvent=true){return __awaiter(this,void 0,void 0,(function*(){if(!this.isConnected){throw new Error("Cannot sign in because client is not connected to the server. If you want to automatically sign in the user with this access token once a connection is established, use client.auth.setAccessToken(token)")}const result=yield this._request({method:"POST",url:`${this.url}/auth/${this.dbname}/signin`,data:{method:"token",access_token:token,client_id:this.socket&&this.socket.id}});return this.handleSignInResult(result,emitEvent)}))}setAccessToken(token){this.accessToken=token}startAuthProviderSignIn(providerName,callbackUrl,options){return __awaiter(this,void 0,void 0,(function*(){if(!this.isConnected){throw new Error(error_1.NOT_CONNECTED_ERROR_MESSAGE)}const optionParams=typeof options==="object"?"&"+Object.keys(options).map((key=>`option_${key}=${encodeURIComponent(options[key])}`)).join("&"):"";const result=yield this._request({url:`${this.url}/oauth2/${this.dbname}/init?provider=${providerName}&callbackUrl=${callbackUrl}${optionParams}`});return{redirectUrl:result.redirectUrl}}))}finishAuthProviderSignIn(callbackResult){return __awaiter(this,void 0,void 0,(function*(){let result;try{result=JSON.parse(Base64.decode(callbackResult))}catch(err){throw new Error(`Invalid result`)}if(!result.user){this.accessToken=result.access_token;const authState=yield this._request({url:`${this.url}/auth/${this.dbname}/state`});if(!authState.signed_in){this.accessToken=null;throw new Error(`Invalid access token received: not signed in`)}result.user=authState.user}return this.handleSignInResult(result)}))}refreshAuthProviderToken(providerName,refreshToken){return __awaiter(this,void 0,void 0,(function*(){if(!this.isConnected){throw new Error(error_1.NOT_CONNECTED_ERROR_MESSAGE)}const result=yield this._request({url:`${this.url}/oauth2/${this.dbname}/refresh?provider=${providerName}&refresh_token=${refreshToken}`});return result}))}signOut(options={everywhere:false,clearCache:false}){return __awaiter(this,void 0,void 0,(function*(){if(typeof options==="boolean"){options={everywhere:options}}else if(typeof options!=="object"){throw new TypeError("options must be an object")}if(typeof options.everywhere!=="boolean"){options.everywhere=false}if(typeof options.clearCache!=="boolean"){options.clearCache=false}if(!this.accessToken){return}if(!this.isConnected){throw new Error(error_1.NOT_CONNECTED_ERROR_MESSAGE)}const result=yield this._request({method:"POST",url:`${this.url}/auth/${this.dbname}/signout`,data:{client_id:this.socket&&this.socket.id,everywhere:options.everywhere}});this.socket&&this.socket.emit("signout",this.accessToken);this.accessToken=null;if(this.hasCache&&options.clearCache){this.clearCache().catch((err=>{console.error(`Could not clear cache:`,err)}))}this.eventCallback("signout")}))}changePassword(uid,currentPassword,newPassword){return __awaiter(this,void 0,void 0,(function*(){if(!this.accessToken){throw new Error(`not_signed_in`)}if(!this.isConnected){throw new Error(error_1.NOT_CONNECTED_ERROR_MESSAGE)}const result=yield this._request({method:"POST",url:`${this.url}/auth/${this.dbname}/change_password`,data:{uid:uid,password:currentPassword,new_password:newPassword}});this.accessToken=result.access_token;return{accessToken:this.accessToken}}))}forgotPassword(email){return __awaiter(this,void 0,void 0,(function*(){if(!this.isConnected){throw new Error(error_1.NOT_CONNECTED_ERROR_MESSAGE)}const result=yield this._request({method:"POST",url:`${this.url}/auth/${this.dbname}/forgot_password`,data:{email:email}});return result}))}verifyEmailAddress(verificationCode){return __awaiter(this,void 0,void 0,(function*(){if(!this.isConnected){throw new Error(error_1.NOT_CONNECTED_ERROR_MESSAGE)}const result=yield this._request({method:"POST",url:`${this.url}/auth/${this.dbname}/verify_email`,data:{code:verificationCode}});return result}))}resetPassword(resetCode,newPassword){return __awaiter(this,void 0,void 0,(function*(){if(!this.isConnected){throw new Error(error_1.NOT_CONNECTED_ERROR_MESSAGE)}const result=yield this._request({method:"POST",url:`${this.url}/auth/${this.dbname}/reset_password`,data:{code:resetCode,password:newPassword}});return result}))}signUp(details,signIn=true){return __awaiter(this,void 0,void 0,(function*(){if(!this.isConnected){throw new Error(error_1.NOT_CONNECTED_ERROR_MESSAGE)}const result=yield this._request({method:"POST",url:`${this.url}/auth/${this.dbname}/signup`,data:details});if(signIn){return this.handleSignInResult(result)}return{user:result.user,accessToken:this.accessToken}}))}updateUserDetails(details){return __awaiter(this,void 0,void 0,(function*(){if(!this.isConnected){throw new Error(error_1.NOT_CONNECTED_ERROR_MESSAGE)}const result=yield this._request({method:"POST",url:`${this.url}/auth/${this.dbname}/update`,data:details});return{user:result.user}}))}deleteAccount(uid,signOut=true){return __awaiter(this,void 0,void 0,(function*(){if(!this.isConnected){throw new Error(error_1.NOT_CONNECTED_ERROR_MESSAGE)}const result=yield this._request({method:"POST",url:`${this.url}/auth/${this.dbname}/delete`,data:{uid:uid}});if(signOut){this.socket&&this.socket.emit("signout",this.accessToken);this.accessToken=null;this.eventCallback("signout")}return true}))}get isConnected(){return this._connectionState===CONNECTION_STATE_CONNECTED}get isConnecting(){return this._connectionState===CONNECTION_STATE_CONNECTING}get connectionState(){return this._connectionState}stats(options=undefined){return this._request({url:`${this.url}/stats/${this.dbname}`})}sync(options={firstSync:false,fetchFreshData:true,eventCallback:null}){var _a,_b,_c;return __awaiter(this,void 0,void 0,(function*(){if(!this.isConnected){throw new Error(error_1.NOT_CONNECTED_ERROR_MESSAGE)}if(this.hasCache&&!this.cache.db.isReady){throw new Error(`cache database is not ready yet`)}this._eventTimeline.sync=Date.now();(_a=options.eventCallback)===null||_a===void 0?void 0:_a.call(options,"sync_start");const handleStatsUpdateError=err=>{this.debug.error(`Failed to update cache db stats:`,err)};try{let totalPendingChanges=0;const useCursor=((_b=this.settings.sync)===null||_b===void 0?void 0:_b.useCursor)!==false;const cursor=useCursor?this._cursor.sync:null;if(this.hasCache){const cacheApi=this.cache.db.api;const{value:value,context:context}=yield cacheApi.get(`${this.dbname}/pending`);const pendingChanges=value;cacheApi.set(`${this.dbname}/stats/last_sync_start`,new Date).catch(handleStatsUpdateError);try{const ids=Object.keys(pendingChanges||{}).sort();const compatibilityMode=ids.map((id=>pendingChanges[id])).some((m=>m.type==="update"));const mutations=compatibilityMode?ids.map((id=>{const mutation=pendingChanges[id];mutation.ids=[id];return mutation})):ids.reduce(((mutations,id)=>{const change=pendingChanges[id];console.assert(["set","remove"].includes(change.type),'Only "set" and "remove" mutations should be present');if(change.path===""){const rootUpdate=mutations.find((u=>u.path===""));if(rootUpdate){rootUpdate.data=change.data}else{change.ids=[id];mutations.push(change)}}else{const pathInfo=acebase_core_1.PathInfo.get(change.path);const parentPath=pathInfo.parentPath;const parentUpdate=mutations.find((u=>u.path===parentPath));const value=change.type==="remove"||change.data===null||typeof change.data==="undefined"?null:change.data;if(!parentUpdate){mutations.push({ids:[id],type:"update",path:parentPath,data:{[pathInfo.key]:value},context:change.context})}else{parentUpdate.data[pathInfo.key]=value;parentUpdate.ids.push(id)}}return mutations}),[]);for(const m of mutations){const ids=m.ids;this.debug.verbose(`SYNC pushing mutations ${ids.join(",")}: `,m);totalPendingChanges++;try{if(m.type==="update"){yield this.update(m.path,m.data,{allow_cache:false,context:m.context})}else if(m.type==="set"){if(!m.data){m.data=null}yield this.set(m.path,m.data,{allow_cache:false,context:m.context})}else if(m.type==="remove"){yield this.set(m.path,null,{allow_cache:false,context:m.context})}else{throw new Error(`unsupported mutation type "${m.type}"`)}this.debug.verbose(`SYNC mutation ${ids.join(",")} processed ok`);const updates=ids.reduce(((updates,id)=>(updates[id]=null,updates)),{});cacheApi.update(`${this.dbname}/pending`,updates)}catch(err){this.debug.error(`SYNC mutations ${ids.join(",")} failed: ${err.message}`);if(!this.isConnected){throw err}if(typeof err==="string"){err={code:"unknown",message:err,stack:"n/a"}}const errorReport={date:new Date,code:err.code||"unknown",message:err.message,stack:err.stack};ids.forEach((id=>{cacheApi.transaction(`${this.dbname}/pending/${id}`,(m=>{if(!m.error){m.error={first:errorReport,last:errorReport,retries:0}}else{m.error.last=errorReport;m.error.retries++}if(m.error.retries===3){cacheApi.set(`${this.dbname}/failed/${id}`,m);return null}return m}))}));cacheApi.set(`${this.dbname}/stats/last_sync_error`,errorReport).catch(handleStatsUpdateError);(_c=options.eventCallback)===null||_c===void 0?void 0:_c.call(options,"sync_change_error",{error:err,change:m})}}this.debug.verbose(`SYNC push done`);cacheApi.set(`${this.dbname}/stats/last_sync_end`,new Date).catch(handleStatsUpdateError)}catch(err){this.debug.error(`SYNC push error: ${err.message}`);if(typeof err==="string"){err={code:"unknown",message:err,stack:"n/a"}}cacheApi.set(`${this.dbname}/stats/last_sync_error`,{date:new Date,code:err.code||"unknown",message:err.message,stack:err.stack}).catch(handleStatsUpdateError);throw err}}let totalRemoteChanges=0,usedSyncMethod="reload";const subscriptionPaths=Object.keys(this._subscriptions);const subscriptions=subscriptionPaths.reduce(((subs,path)=>{this._subscriptions[path].forEach((sub=>subs.push(sub)));return subs}),[]);const subscriptionsFor=path=>subscriptions.filter((sub=>sub.path===path));if(this.hasCache){const cacheApi=this.cache.db.api;subscriptions.forEach((sub=>{sub.tempCallback=()=>{totalRemoteChanges++};cacheApi.subscribe(acebase_core_1.PathInfo.getChildPath(`${this.dbname}/cache`,sub.path),sub.event,sub.tempCallback)}));const strategy={reload:[],cursor:[],fallback:[],warn:[],noop:[]};const hasStaleValue=sub=>{const addedWhileOffline=sub.added>this._eventTimeline.disconnect&&sub.added{if(path.includes("*")||path.includes("$")){return false}return subscriptionsFor(path).some((sub=>{if(hasStaleValue(sub)){if(typeof sub.settings.syncFallback==="function"){return false}if(sub.settings.syncFallback==="reload"){return true}if(sub.event==="value"){return true}if(sub.event==="child_added"&&!sub.settings.newOnly){return true}}return false}))})).reduce(((reloadPaths,path)=>{!reloadPaths.some((p=>p===path||acebase_core_1.PathInfo.get(p).isAncestorOf(path)))&&reloadPaths.push(path);return reloadPaths}),[]);strategy.fallback=subscriptionPaths.filter((path=>!strategy.reload.some((p=>p===path||acebase_core_1.PathInfo.get(p).isAncestorOf(path))))).reduce(((fallbackItems,path)=>{subscriptionsFor(path).forEach((sub=>{if(hasStaleValue(sub)&&typeof sub.settings.syncFallback==="function"){fallbackItems.push(sub)}}));return fallbackItems}),[]);strategy.cursor=!cursor?[]:subscriptionPaths.filter((path=>!strategy.reload.some((p=>p===path||acebase_core_1.PathInfo.get(p).isAncestorOf(path))))).reduce(((cursorItems,path)=>{const subs=subscriptionsFor(path);const events=subs.filter((sub=>!hasStaleValue(sub)&&!strategy.fallback.includes(sub))).reduce(((events,sub)=>(events.includes(sub.event)||events.push(sub.event))&&events),[]);events.length>0&&cursorItems.push({path:path,events:events});return cursorItems}),[]);strategy.warn=subscriptionPaths.filter((path=>!strategy.reload.some((p=>p===path||acebase_core_1.PathInfo.get(p).isAncestorOf(path))))).reduce(((warnItems,path)=>{const subs=subscriptionsFor(path).filter((sub=>!strategy.fallback.includes(sub)));subs.forEach((sub=>{if(typeof sub.settings.syncFallback==="function"||sub.added>this._eventTimeline.connect){strategy.noop.push(sub)}else if(!strategy.cursor.some((item=>item.path===sub.path&&item.events.includes(sub.event)))){const item=warnItems.find((item=>item.path===sub.path));if(!item){warnItems.push({path:sub.path,events:[sub.event]})}else if(!item.events.includes(sub.event)){item.events.push(sub.event)}}}));return warnItems}),[]);console.log(`SYNC strategy`,strategy);const syncPromises=[];if(strategy.cursor.length>0){this.debug.log(`SYNC using cursor "${cursor}" for event(s) ${strategy.cursor.map((item=>`${item.events.join(", ")} on "/${item.path}"`)).join(", ")}`);const cursorPromise=(()=>__awaiter(this,void 0,void 0,(function*(){let remoteMutations;try{const result=yield this.getChanges({for:strategy.cursor,cursor:cursor});remoteMutations=result.changes;this._updateCursor(result.new_cursor)}catch(err){this.debug.error(`SYNC: Could not load remote changes`,err);options.eventCallback&&options.eventCallback("sync_cursor_error",err);if(err.code==="no_transaction_logging"){this._updateCursor(null)}strategy.cursor.forEach((item=>{if(item.events.includes("value")){strategy.reload.push(item.path)}else{strategy.warn.push(item)}}))}if(remoteMutations){usedSyncMethod="cursor";this.debug.log(`SYNC: Got ${remoteMutations.length} remote mutations`,remoteMutations);const promises=remoteMutations.map((m=>{const cachePath=`${this.dbname}/cache/${m.path}`;if(m.type==="update"){return cacheApi.update(cachePath,m.value,{context:m.context})}else if(m.type==="set"){return cacheApi.set(cachePath,m.value,{context:m.context})}}));yield Promise.all(promises)}})))();syncPromises.push(cursorPromise)}if(strategy.reload.length>0){this.debug.log(`SYNC reloading data for event paths ${strategy.reload.map((path=>`"/${path}"`)).join(", ")}`);const reloadPromise=(()=>__awaiter(this,void 0,void 0,(function*(){const promises=strategy.reload.map((path=>{this.debug.verbose(`SYNC: load "/${path}"`);return this.get(path,{cache_mode:"bypass"}).catch((err=>{this.debug.error(`SYNC: could not load "/${path}"`,err);options.eventCallback&&options.eventCallback("sync_pull_error",err)}))}));yield Promise.all(promises)})))();syncPromises.push(reloadPromise)}if(strategy.fallback.length>0){this.debug.log(`SYNC using fallback functions for event(s) ${strategy.fallback.map((sub=>`${sub.event} on "/${sub.path}"`)).join(", ")}`);const fallbackPromise=(()=>__awaiter(this,void 0,void 0,(function*(){const promises=strategy.fallback.map((sub=>__awaiter(this,void 0,void 0,(function*(){this.debug.verbose(`SYNC: running fallback for event ${sub.event} on "/${sub.path}"`);try{if(sub.settings.syncFallback==="reload"){throw new Error(`DEV ERROR: Not expecting "reload" as fallback`)}yield sub.settings.syncFallback()}catch(err){this.debug.error(`SYNC: error running fallback function for ${sub.event} on "/${sub.path}"`,err);options.eventCallback&&options.eventCallback("sync_fallback_error",err)}}))));yield Promise.all(promises)})))();syncPromises.push(fallbackPromise)}if(strategy.warn.length>0){this.debug.warn(`SYNC warning: unable to sync event(s) ${strategy.warn.map((item=>`${item.events.map((event=>`"${event}"`)).join(", ")} on "/${item.path}"`)).join(", ")}. To resolve this, provide syncFallback functions for these events`)}yield Promise.all(syncPromises);yield new Promise((resolve=>setTimeout(resolve,10)));subscriptions.forEach((sub=>{if(typeof sub.tempCallback!=="function"){throw new Error("DEV ERROR: tempCallback must be a function")}cacheApi.unsubscribe(acebase_core_1.PathInfo.getChildPath(`${this.dbname}/cache`,sub.path),sub.event,sub.tempCallback);delete sub.tempCallback}))}else if(!this._cache){const syncPromises=[];subscriptionPaths.forEach((path=>{const subs=subscriptionsFor(path);const warnEvents=[];subs.filter((sub=>sub.event!=="value")).forEach((sub=>{if(typeof sub.settings.syncFallback==="function"){syncPromises.push(sub.settings.syncFallback())}else{!warnEvents.includes(sub.event)&&warnEvents.push(sub.event)}}));if(warnEvents.length>0){this.debug.warn(`Subscriptions ${warnEvents.join(", ")} on path "${path}" might have missed events while offline. Data should be reloaded!`)}const valueSubscriptions=subs.filter((sub=>sub.event==="value"));if(valueSubscriptions.length>0){const p=this.get(path,{allow_cache:false}).then((value=>{valueSubscriptions.forEach((subscr=>subscr.callback(null,path,value)))}));syncPromises.push(p)}}));yield Promise.all(syncPromises)}subscriptions.forEach((sub=>sub.lastSynced=Date.now()));this.debug.verbose(`SYNC done`);const info={local:totalPendingChanges,remote:totalRemoteChanges,method:usedSyncMethod,cursor:cursor};options.eventCallback&&options.eventCallback("sync_done",info);return info}catch(err){this.debug.error(`SYNC error`,err);options.eventCallback&&options.eventCallback("sync_error",err);throw err}}))}getMutations(filter){var _a;return __awaiter(this,void 0,void 0,(function*(){if(typeof filter!=="object"){throw new Error("No filter specified")}if(typeof filter.cursor!=="string"&&typeof filter.timestamp!=="number"){throw new Error("No cursor or timestamp given")}const query=Object.keys(filter).map((key=>{let val=filter[key];if(key==="for"){val=encodeURIComponent(JSON.stringify(val))}return typeof val!=="undefined"?`${key}=${val}`:null})).filter((p=>p!=null)).join("&");const{data:data,context:context}=yield this._request({url:`${this.url}/sync/mutations/${this.dbname}?${query}`,includeContext:true});const mutations=acebase_core_1.Transport.deserialize2(data);return{used_cursor:(_a=filter.cursor)!==null&&_a!==void 0?_a:null,new_cursor:context.acebase_cursor,mutations:mutations}}))}getChanges(filter){var _a;return __awaiter(this,void 0,void 0,(function*(){if(typeof filter!=="object"){throw new Error("No filter specified")}if(typeof filter.cursor!=="string"&&typeof filter.timestamp!=="number"){throw new Error("No cursor or timestamp given")}const query=Object.keys(filter).map((key=>{let val=filter[key];if(key==="for"){val=encodeURIComponent(JSON.stringify(val))}return typeof val!=="undefined"?`${key}=${val}`:null})).filter((p=>p!=null)).join("&");const{data:data,context:context}=yield this._request({url:`${this.url}/sync/changes/${this.dbname}?${query}`,includeContext:true});const changes=acebase_core_1.Transport.deserialize2(data);return{used_cursor:(_a=filter.cursor)!==null&&_a!==void 0?_a:null,new_cursor:context.acebase_cursor,changes:changes}}))}_addCacheSetMutation(path,value,context){var _a,_b;return __awaiter(this,void 0,void 0,(function*(){const escapedPath=path.replace(/([.*+?\\$^\(\)\[\]\{\}])/g,"\\$1");const re=new RegExp(`^${escapedPath}(?:\\[|/|$)`);yield(_a=this._cache)===null||_a===void 0?void 0:_a.db.query(`${this.dbname}/pending`).filter("path","matches",re).remove();return(_b=this._cache)===null||_b===void 0?void 0:_b.db.api.set(`${this.dbname}/pending/${acebase_core_1.ID.generate()}`,{type:value!==null?"set":"remove",path:path,data:value,context:context})}))}set(path,value,options={allow_cache:true,context:{}}){var _a;if(!options.context){options.context={}}const useCache=this._cache&&options.allow_cache!==false;const useServer=this.isConnected;options.context.acebase_mutation=options.context.acebase_mutation||{client_id:this._id,id:acebase_core_1.ID.generate(),op:"set",path:path,flow:useCache?useServer?"parallel":"cache":"server"};const updateServer=()=>__awaiter(this,void 0,void 0,(function*(){const data=JSON.stringify(acebase_core_1.Transport.serialize(value));const{context:context}=yield this._request({method:"PUT",url:`${this.url}/data/${this.dbname}/${path}`,data:data,context:options.context,includeContext:true});Object.assign(options.context,context);const cursor=context===null||context===void 0?void 0:context.acebase_cursor;return{cursor:cursor}}));if(!useCache){return updateServer()}const cachePath=acebase_core_1.PathInfo.getChildPath(`${this.dbname}/cache`,path);let rollbackValue;const updateCache=()=>this.cache.db.api.transaction(cachePath,(currentValue=>{rollbackValue=currentValue;return value}),{context:options.context});const rollbackCache=()=>__awaiter(this,void 0,void 0,(function*(){yield cachePromise;return this.cache.db.api.set(cachePath,rollbackValue,{context:options.context})}));const addPendingTransaction=()=>__awaiter(this,void 0,void 0,(function*(){yield this._addCacheSetMutation(path,value,options.context)}));const cachePromise=updateCache();const tryCachePromise=cachePromise.then((()=>({success:true,error:null}))).catch((err=>({success:false,error:err})));const serverPromise=!useServer?null:updateServer();const tryServerPromise=!useServer?null:serverPromise.then((()=>({success:true,error:null}))).catch((err=>({success:false,error:err})));Promise.all([tryCachePromise,tryServerPromise]).then((([cacheResult,serverResult])=>{var _a;const networkError=serverPromise&&!(serverResult===null||serverResult===void 0?void 0:serverResult.success)&&((_a=serverResult===null||serverResult===void 0?void 0:serverResult.error)===null||_a===void 0?void 0:_a.isNetworkError)===true;if(serverPromise&&!networkError){if(serverResult===null||serverResult===void 0?void 0:serverResult.success){if(!cacheResult.success){this.debug.error(`Failed to set cache for "${path}". Error: `,cacheResult.error)}}else{if(cacheResult.success){this.debug.error(`Failed to set server value for "${path}", rolling back cache to previous value. Error:`,serverResult===null||serverResult===void 0?void 0:serverResult.error);rollbackCache().catch((err=>{this.debug.error(`Failed to roll back cache? Error:`,err)}))}}}else if(cacheResult.success){addPendingTransaction().catch((err=>{this.debug.error(`Failed to add pending sync action for "${path}", rolling back cache to previous value. Error:`,err);rollbackCache().catch((err=>{this.debug.error(`Failed to roll back cache? Error:`,err)}))}))}}));if(!useServer){return cachePromise}return((_a=this._cache)===null||_a===void 0?void 0:_a.priority)==="cache"?cachePromise:serverPromise}update(path,updates,options={allow_cache:true,context:{}}){var _a,_b;const useCache=this._cache&&options&&options.allow_cache!==false;const useServer=this.isConnected;options.context.acebase_mutation=options.context.acebase_mutation||{client_id:this._id,id:acebase_core_1.ID.generate(),op:"update",path:path,flow:useCache?useServer?"parallel":"cache":"server"};const updateServer=()=>__awaiter(this,void 0,void 0,(function*(){const data=JSON.stringify(acebase_core_1.Transport.serialize(updates));const{context:context}=yield this._request({method:"POST",url:`${this.url}/data/${this.dbname}/${path}`,data:data,context:options.context,includeContext:true});Object.assign(options.context,context);const cursor=context.acebase_cursor;return{cursor:cursor}}));if(!useCache){return updateServer()}const cacheApi=(_a=this._cache)===null||_a===void 0?void 0:_a.db.api;const cachePath=acebase_core_1.PathInfo.getChildPath(`${this.dbname}/cache`,path);let rollbackUpdates;const updateCache=()=>__awaiter(this,void 0,void 0,(function*(){const properties=Object.keys(updates);const result=yield cacheApi.get(cachePath,{include:properties});rollbackUpdates=result.value;properties.forEach((prop=>{if(!(prop in rollbackUpdates)&&updates[prop]!==null){rollbackUpdates[prop]=null}}));return cacheApi.update(cachePath,updates,{context:options.context})}));const rollbackCache=()=>__awaiter(this,void 0,void 0,(function*(){yield cachePromise;return cacheApi.update(cachePath,rollbackUpdates,{context:options.context})}));const addPendingTransaction=()=>__awaiter(this,void 0,void 0,(function*(){const pathInfo=acebase_core_1.PathInfo.get(path);const mutations=Object.keys(updates).map((prop=>{if(updates instanceof Array){prop=parseInt(prop)}return{path:pathInfo.childPath(prop),value:updates[prop]}}));const promises=mutations.map((m=>this._addCacheSetMutation(m.path,m.value,options.context)));yield Promise.all(promises)}));const cachePromise=updateCache();const tryCachePromise=cachePromise.then((()=>({success:true,error:null}))).catch((err=>({success:false,error:err})));const serverPromise=!useServer?null:updateServer();const tryServerPromise=!useServer?{executed:false,success:false,error:null}:serverPromise.then((()=>({executed:true,success:true,error:null}))).catch((err=>({executed:true,success:false,error:err})));Promise.all([tryCachePromise,tryServerPromise]).then((([cacheResult,serverResult])=>{const networkError=serverResult.executed&&!serverResult.success&&serverResult.error.isNetworkError===true;if(serverResult.executed&&!networkError){if(serverResult.success){if(!cacheResult.success){this.debug.error(`Failed to update cache for "${path}". Error: `,cacheResult.error)}}else{if(cacheResult.success){this.debug.error(`Failed to update server value for "${path}", rolling back cache to previous value. Error:`,serverResult.error);rollbackCache().catch((err=>{this.debug.error(`Failed to roll back cache? Error:`,err)}))}}}else if(cacheResult.success){addPendingTransaction().catch((err=>{this.debug.error(`Failed to add pending sync action for "${path}", rolling back cache to previous value. Error:`,err);rollbackCache().catch((err=>{this.debug.error(`Failed to roll back cache? Error:`,err)}))}))}}));if(!useServer){return cachePromise}return((_b=this._cache)===null||_b===void 0?void 0:_b.priority)==="cache"?cachePromise:serverPromise}get(path,options={cache_mode:"allow"}){var _a,_b;return __awaiter(this,void 0,void 0,(function*(){if(typeof options.cache_mode!=="string"){options.cache_mode="allow"}const useCache=this._cache&&options.cache_mode!=="bypass";const getServerValue=()=>__awaiter(this,void 0,void 0,(function*(){let url=`${this.url}/data/${this.dbname}/${path}`;let filtered=false;if(options){const query=[];if(options.exclude instanceof Array){query.push(`exclude=${options.exclude.join(",")}`)}if(options.include instanceof Array){query.push(`include=${options.include.join(",")}`)}if(typeof options.child_objects==="boolean"){query.push(`child_objects=${options.child_objects}`)}if(query.length>0){filtered=true;url+=`?${query.join("&")}`}}const result=yield this._request({url:url,includeContext:true});const context=result.context;const cursor=context&&context.acebase_cursor;const value=acebase_core_1.Transport.deserialize(result.data);if(this._cache){if(!filtered){const cachePath=acebase_core_1.PathInfo.getChildPath(`${this.dbname}/cache`,path);this._cache.db.api.set(cachePath,value,{context:{acebase_operation:"update_cache",acebase_server_context:context}}).catch((err=>{this.debug.error(`Error caching data for "/${path}"`,err)}))}}return{value:value,context:context,cursor:cursor}}));const getCacheValue=(throwOnNull=false)=>__awaiter(this,void 0,void 0,(function*(){if(!this._cache){throw new Error(`DEV ERROR: cannot get cached value if no cache is used!`)}const result=yield this._cache.db.api.get(acebase_core_1.PathInfo.getChildPath(`${this.dbname}/cache`,path),options);let{value:value,context:context}=result;if(!("value"in result&&"context"in result)){console.warn(`Missing context from cache results. Update your acebase package`);value=result,context={}}if(value===null&&throwOnNull){throw new errors_1.CachedValueUnavailableError(path)}delete context.acebase_cursor;return{value:value,context:context}}));if(options.cache_mode==="force"){const{value:value,context:context}=yield getCacheValue(false);context.acebase_origin="cache";return{value:value,context:context}}if(useCache&&typeof options.cache_cursor==="string"){let syncResult;try{syncResult=yield this.updateCache(path,options.cache_cursor)}catch(err){}const{value:value,context:context}=yield getCacheValue(false);if(syncResult){context.acebase_cursor=syncResult.new_cursor;context.acebase_origin="hybrid"}else{context.acebase_cursor=options.cache_cursor;context.acebase_origin="cache"}return{value:value,context:context,cursor:context.acebase_cursor}}if(!useCache){const{value:value,context:context,cursor:cursor}=yield getServerValue();context.acebase_origin="server";return{value:value,context:context,cursor:cursor}}if(!this.isConnected||((_a=this._cache)===null||_a===void 0?void 0:_a.priority)==="cache"){const throwOnNull=((_b=this._cache)===null||_b===void 0?void 0:_b.priority)!=="cache";const{value:value,context:context}=yield getCacheValue(throwOnNull);context.acebase_origin="cache";return{value:value,context:context}}return new Promise(((resolve,reject)=>{let wait=true,done=false;const gotValue=(source,val)=>{var _a;this.debug.verbose(`Got ${source} value of "${path}":`,val);if(done){return}const{value:value,context:context,cursor:cursor}=val;if(source==="server"){done=true;this.debug.verbose(`Using server value for "${path}"`);context.acebase_origin="server";resolve({value:value,context:context,cursor:cursor})}else if(value===null){if(!wait){const serverError=(_a=errors.find((e=>e.source==="server")))===null||_a===void 0?void 0:_a.error;if(serverError.isNetworkError){return reject(new errors_1.CachedValueUnavailableError(path))}const error=new errors_1.CachedValueUnavailableError(path,`Value for "${path}" not found in cache, and server value could not be loaded. See serverError for more details`);error.serverError=serverError;return reject(error)}}else if(!wait){done=true;this.debug.verbose(`Using cache value for "${path}"`);context.acebase_origin="cache";resolve({value:value,context:context})}else{setTimeout((()=>{if(done){return}this.debug.verbose(`Using (delayed) cache value for "${path}"`);done=true;context.acebase_origin="cache";resolve({value:value,context:context})}),1e3)}};const errors=[];const gotError=(source,error)=>{var _a;errors.push({source:source,error:error});if(errors.length===2){reject((_a=errors.find((e=>e.source==="server")))===null||_a===void 0?void 0:_a.error)}};getServerValue().then((val=>gotValue("server",val))).catch((err=>(wait=false,gotError("server",err))));getCacheValue(false).then((val=>gotValue("cache",val))).catch((err=>gotError("cache",err)))}))}))}exists(path,options={allow_cache:true}){const useCache=this._cache&&options.allow_cache!==false;const getCacheExists=()=>{if(!this._cache){throw new Error("DEV ERROR: no cache db available to check exists")}return this._cache.db.api.exists(acebase_core_1.PathInfo.getChildPath(`${this.dbname}/cache`,path))};const getServerExists=()=>this._request({url:`${this.url}/exists/${this.dbname}/${path}`}).then((res=>res.exists)).catch((err=>{throw err}));if(!useCache){return getServerExists()}else if(!this.isConnected){return getCacheExists()}else{return new Promise(((resolve,reject)=>{let wait=true,done=false;const gotExists=(source,exists)=>{if(done){return}if(source==="server"){done=true;resolve(exists)}else if(!wait){done=true;resolve(exists)}else{setTimeout((()=>{if(done){return}done=true;resolve(exists)}),1e3)}};const errors=[];const gotError=(source,error)=>{errors.push({source:source,error:error});if(errors.length===2){reject(errors.find((e=>e.source==="server")))}};getServerExists().then((exists=>gotExists("server",exists))).catch((err=>(wait=false,gotError("server",err))));getCacheExists().then((exists=>gotExists("cache",exists))).catch((err=>gotError("cache",err)))}))}}callExtension(method,path,data){method=method.toUpperCase();const postData=["PUT","POST"].includes(method)?data:null;let url=`${this.url}/ext/${this.dbname}/${path}`;if(data&&!["PUT","POST"].includes(method)){if(typeof data==="object"){data=Object.keys(data).filter((key=>typeof data[key]!=="undefined")).map((key=>key+"="+encodeURIComponent(JSON.stringify(data[key])))).join("&")}else if(typeof data!=="string"||!data.includes("=")){throw new Error('data must be an object, or a string with query parameters, like "index=3&name=Something"')}url+=`?`+data}return this._request({method:method,url:url,data:postData,ignoreConnectionState:true})}clearCache(path=""){return __awaiter(this,void 0,void 0,(function*(){if(this._cache){const value=path===""?{}:null;const cachePath=acebase_core_1.PathInfo.getChildPath(`${this.dbname}/cache`,path);return this._cache.db.api.set(cachePath,value,{suppress_events:true})}}))}updateCache(path="",cursor){return __awaiter(this,void 0,void 0,(function*(){if(!this._cache){throw new Error(`No cache database used`)}const cachePath=acebase_core_1.PathInfo.getChildPath(`${this.dbname}/cache`,path);const cacheApi=this._cache.db.api;const loadValue=cursor===null||typeof cursor==="undefined"||!(yield cacheApi.exists(cachePath));if(loadValue){const{value:value,context:context}=yield this.get(path,{cache_mode:"bypass"});return{path:path,used_cursor:cursor,new_cursor:context.acebase_cursor,loaded_value:true,changes:[]}}const{changes:changes,new_cursor:new_cursor}=yield this.getChanges({path:path,cursor:cursor});for(const ch of changes){const cachePath=acebase_core_1.PathInfo.getChildPath(`${this.dbname}/cache`,ch.path);const options={context:ch.context,suppress_events:false};if(ch.type==="update"){yield cacheApi.update(cachePath,ch.value,options)}else if(ch.type==="set"){yield cacheApi.set(cachePath,ch.value,options)}}return{path:path,used_cursor:cursor,new_cursor:new_cursor,loaded_value:false,changes:changes}}))}query(path,query,options={snapshots:false,cache_mode:"allow",monitor:{add:false,change:false,remove:false}}){return __awaiter(this,void 0,void 0,(function*(){const useCache=this.hasCache&&(options.cache_mode==="force"||options.cache_mode==="allow"&&!this.isConnected);if(useCache){const data=yield this.cache.db.api.query(acebase_core_1.PathInfo.getChildPath(`${this.dbname}/cache`,path),query,options);let{results:results,context:context}=data;const{stop:stop}=data;if(!("results"in data&&"context"in data)){console.warn(`Missing context from local query results. Update your acebase package`);results=data;context={}}context.acebase_origin="cache";delete context.acebase_cursor;return{results:results,context:context,stop:stop}}const request={query:query,options:options};if(options.monitor===true||typeof options.monitor==="object"&&(options.monitor.add||options.monitor.change||options.monitor.remove)){console.assert(typeof options.eventHandler==="function",`no eventHandler specified to handle realtime changes`);if(!this.socket){throw new Error(`Cannot create realtime query because websocket is not connected. Check your AceBaseClient network.realtime setting`)}request.query_id=acebase_core_1.ID.generate();request.client_id=this.socket.id;this._realtimeQueries[request.query_id]={query:query,options:options}}const reqData=JSON.stringify(acebase_core_1.Transport.serialize(request));try{const{data:data,context:context}=yield this._request({method:"POST",url:`${this.url}/query/${this.dbname}/${path}`,data:reqData,includeContext:true});const results=acebase_core_1.Transport.deserialize(data);context.acebase_origin="server";const stop=()=>__awaiter(this,void 0,void 0,(function*(){delete this._realtimeQueries[request.query_id];yield _websocketRequest(this.socket,"query-unsubscribe",{query_id:request.query_id},this.accessToken)}));return{results:results.list,context:context,stop:stop}}catch(err){throw err}}))}createIndex(path,key,options){return __awaiter(this,void 0,void 0,(function*(){if(options&&options.config&&Object.values(options.config).find((val=>typeof val==="function"))){throw new Error(`Cannot create an index with callback functions through a client. Move your code serverside`)}const version=this._serverVersion.split(".");if(version.length===3&&+version[0]>=1&&+version[1]>=10){const data=JSON.stringify({path:path,key:key,options:options});return yield this._request({method:"POST",url:`${this.url}/index/${this.dbname}/create`,data:data})}else{const data=JSON.stringify({action:"create",path:path,key:key,options:options});return yield this._request({method:"POST",url:`${this.url}/index/${this.dbname}`,data:data})}}))}getIndexes(){return this._request({url:`${this.url}/index/${this.dbname}`})}deleteIndex(fileName){return __awaiter(this,void 0,void 0,(function*(){const version=this._serverVersion.split(".");if(version.length===3&&+version[0]>=1&&+version[1]>=10){const data=JSON.stringify({fileName:fileName});return this._request({method:"POST",url:`${this.url}/index/${this.dbname}/delete`,data:data})}else{throw new Error(`not supported, requires acebase-server 1.10 or higher`)}}))}reflect(path,type,args){let url=`${this.url}/reflect/${this.dbname}/${path}?type=${type}`;if(typeof args==="object"){const query=Object.keys(args).map((key=>`${key}=${args[key]}`));if(query.length>0){url+=`&${query.join("&")}`}}return this._request({url:url})}export(path,write,options={format:"json",type_safe:true}){options.format="json";options.type_safe=options.type_safe!==false;const url=`${this.url}/export/${this.dbname}/${path}?format=${options.format}&type_safe=${options.type_safe?1:0}`;return this._request({url:url,dataReceivedCallback:chunk=>write(chunk)})}import(path,read,options={format:"json",suppress_events:false}){options.format="json";options.suppress_events=options.suppress_events===true;const url=`${this.url}/import/${this.dbname}/${path}?format=${options.format}&suppress_events=${options.suppress_events?1:0}`;return this._request({method:"POST",url:url,dataRequestCallback:length=>read(length)})}get serverPingUrl(){return`${this.url}/ping/${this.dbname}`}getServerInfo(){return __awaiter(this,void 0,void 0,(function*(){const info=yield this._request({url:`${this.url}/info/${this.dbname}`}).catch((err=>{if(!err.isNetworkError){this.debug.warn(`Could not get server info, update your acebase server version`)}return{version:"unknown",time:Date.now()}}));this._serverVersion=info.version;return info}))}setSchema(path,schema){if(schema!==null){schema=new acebase_core_1.SchemaDefinition(schema).text}const data=JSON.stringify({action:"set",path:path,schema:schema});return this._request({method:"POST",url:`${this.url}/schema/${this.dbname}`,data:data})}getSchema(path){return this._request({url:`${this.url}/schema/${this.dbname}/${path}`})}getSchemas(){return this._request({url:`${this.url}/schema/${this.dbname}`})}validateSchema(path,value,isUpdate){return __awaiter(this,void 0,void 0,(function*(){throw new Error(`Manual schema validation can only be used on standalone databases`)}))}}exports.WebApi=WebApi},{"./base64":4,"./errors":6,"./promise-timeout":9,"./request":10,"./request/error":11,"acebase-core":30,"socket.io-client":18}],3:[function(require,module,exports){"use strict";var __awaiter=this&&this.__awaiter||function(thisArg,_arguments,P,generator){function adopt(value){return value instanceof P?value:new P((function(resolve){resolve(value)}))}return new(P||(P=Promise))((function(resolve,reject){function fulfilled(value){try{step(generator.next(value))}catch(e){reject(e)}}function rejected(value){try{step(generator["throw"](value))}catch(e){reject(e)}}function step(result){result.done?resolve(result.value):adopt(result.value).then(fulfilled,rejected)}step((generator=generator.apply(thisArg,_arguments||[])).next())}))};Object.defineProperty(exports,"__esModule",{value:true});exports.AceBaseClientAuth=void 0;const user_1=require("./user");class AceBaseClientAuth{constructor(client,eventCallback){this.client=client;this.eventCallback=eventCallback;this.user=null;this.accessToken=null}signIn(username,password){return __awaiter(this,void 0,void 0,(function*(){if(!this.client.isReady){yield this.client.ready()}const details=yield this.client.api.signIn(username,password);if(this.user){this.eventCallback("signout",{source:"signin",user:this.user})}this.accessToken=details.accessToken;this.user=new user_1.AceBaseUser(details.user);this.eventCallback("signin",{source:"signin",user:this.user,accessToken:this.accessToken});return{user:this.user,accessToken:this.accessToken}}))}signInWithEmail(email,password){return __awaiter(this,void 0,void 0,(function*(){if(!this.client.isReady){yield this.client.ready()}const details=yield this.client.api.signInWithEmail(email,password);if(this.user){this.eventCallback("signout",{source:"email_signin",user:this.user})}this.accessToken=details.accessToken;this.user=new user_1.AceBaseUser(details.user);this.eventCallback("signin",{source:"email_signin",user:this.user,accessToken:this.accessToken});return{user:this.user,accessToken:this.accessToken}}))}signInWithToken(accessToken){return __awaiter(this,void 0,void 0,(function*(){if(!this.client.isReady){yield this.client.ready()}const details=yield this.client.api.signInWithToken(accessToken);if(this.user){this.eventCallback("signout",{source:"token_signin",user:this.user})}this.accessToken=details.accessToken;this.user=new user_1.AceBaseUser(details.user);this.eventCallback("signin",{source:"token_signin",user:this.user,accessToken:this.accessToken});return{user:this.user,accessToken:this.accessToken}}))}setAccessToken(accessToken){this.client.api.setAccessToken(accessToken)}startAuthProviderSignIn(providerName,callbackUrl,options){return __awaiter(this,void 0,void 0,(function*(){if(!this.client.isReady){yield this.client.ready()}const details=yield this.client.api.startAuthProviderSignIn(providerName,callbackUrl,options);return details.redirectUrl}))}finishAuthProviderSignIn(callbackResult){return __awaiter(this,void 0,void 0,(function*(){if(!this.client.isReady){yield this.client.ready()}const details=yield this.client.api.finishAuthProviderSignIn(callbackResult);const isOtherUser=!this.user||this.user.uid!==details.user.uid;isOtherUser&&this.eventCallback("signout",{source:"oauth_signin",user:this.user});this.accessToken=details.accessToken;this.user=new user_1.AceBaseUser(details.user);isOtherUser&&this.eventCallback("signin",{source:"oauth_signin",user:this.user,accessToken:this.accessToken});return{user:this.user,accessToken:this.accessToken,provider:details.provider}}))}refreshAuthProviderToken(providerName,refreshToken){return __awaiter(this,void 0,void 0,(function*(){if(!this.client.isReady){yield this.client.ready()}const details=yield this.client.api.refreshAuthProviderToken(providerName,refreshToken);return{provider:details.provider}}))}signInWithRedirect(providerName){return __awaiter(this,void 0,void 0,(function*(){if(typeof window==="undefined"){throw new Error(`signInWithRedirect can only be used within a browser context`)}const redirectUrl=yield this.startAuthProviderSignIn(providerName,window.location.href);window.location.href=redirectUrl}))}getRedirectResult(){return __awaiter(this,void 0,void 0,(function*(){if(typeof window==="undefined"){throw new Error(`getRedirectResult can only be used within a browser context`)}const match=window.location.search.match(/[?&]result=(.*?)(?:&|$)/);const callbackResult=match&&decodeURIComponent(match[1]);if(!callbackResult){return null}return yield this.finishAuthProviderSignIn(callbackResult)}))}signOut(options){return __awaiter(this,void 0,void 0,(function*(){if(!this.client.isReady){yield this.client.ready()}else if(!this.user){throw{code:"not_signed_in",message:"Not signed in!"}}if(this.client.connected){yield this.client.api.signOut(options)}this.accessToken=null;const user=this.user;this.user=null;this.eventCallback("signout",{source:"signout",user:user})}))}changePassword(oldPassword,newPassword){return __awaiter(this,void 0,void 0,(function*(){if(!this.client.isReady){yield this.client.ready()}if(!this.user){throw{code:"not_signed_in",message:"Not signed in!"}}const result=yield this.client.api.changePassword(this.user.uid,oldPassword,newPassword);this.accessToken=result.accessToken;this.eventCallback("signin",{source:"password_change",user:this.user,accessToken:this.accessToken});return{accessToken:result.accessToken}}))}forgotPassword(email){return __awaiter(this,void 0,void 0,(function*(){if(!this.client.isReady){yield this.client.ready()}yield this.client.api.forgotPassword(email)}))}resetPassword(resetCode,newPassword){return __awaiter(this,void 0,void 0,(function*(){if(!this.client.isReady){yield this.client.ready()}yield this.client.api.resetPassword(resetCode,newPassword)}))}verifyEmailAddress(verificationCode){return __awaiter(this,void 0,void 0,(function*(){if(!this.client.isReady){yield this.client.ready()}yield this.client.api.verifyEmailAddress(verificationCode)}))}updateUserDetails(details){return __awaiter(this,void 0,void 0,(function*(){if(!this.client.isReady){yield this.client.ready()}if(!this.user){throw{code:"not_signed_in",message:"Not signed in!"}}if(typeof details!=="object"){throw{code:"invalid_details",message:"details must be an object"}}const result=yield this.client.api.updateUserDetails(details);if(!this.user){return{user:null}}for(const key of Object.keys(result.user)){this.user[key]=result.user[key]}return{user:this.user}}))}changeUsername(newUsername){return __awaiter(this,void 0,void 0,(function*(){return this.updateUserDetails({username:newUsername})}))}changeDisplayName(newName){return __awaiter(this,void 0,void 0,(function*(){return this.updateUserDetails({display_name:newName})}))}changeEmail(newEmail){return __awaiter(this,void 0,void 0,(function*(){return this.updateUserDetails({email:newEmail})}))}changePicture(newPicture){return __awaiter(this,void 0,void 0,(function*(){return yield this.updateUserDetails({picture:newPicture})}))}updateUserSettings(settings){return __awaiter(this,void 0,void 0,(function*(){return yield this.updateUserDetails({settings:settings})}))}signUp(details){return __awaiter(this,void 0,void 0,(function*(){if(!details.username&&!details.email){throw{code:"invalid_details",message:"No username or email set"}}if(!details.password){throw{code:"invalid_details",message:"No password given"}}if(!this.client.isReady){yield this.client.ready()}const isAdmin=this.user&&this.user.uid==="admin";if(this.user&&!isAdmin){const user=this.user;this.user=null;this.eventCallback("signout",{source:"signup",user:user})}const result=yield this.client.api.signUp(details,!isAdmin);if(isAdmin){return{user:result.user}}else{this.accessToken=result.accessToken;this.user=new user_1.AceBaseUser(result.user);this.eventCallback("signin",{source:"signup",user:this.user,accessToken:this.accessToken});return{user:this.user,accessToken:this.accessToken}}}))}deleteAccount(uid){return __awaiter(this,void 0,void 0,(function*(){if(!this.client.isReady){yield this.client.ready()}if(!this.user){throw{code:"not_signed_in",message:"Not signed in!"}}if(uid&&this.user.uid!=="admin"){throw{code:"not_admin",message:"Cannot remove other accounts than signed into account, unless you are admin"}}const deleteUid=uid||this.user.uid;if(deleteUid==="admin"){throw{code:"not_allowed",message:"Cannot remove admin user"}}const signOut=this.user.uid!=="admin";const result=yield this.client.api.deleteAccount(deleteUid,signOut);if(signOut){this.accessToken=null;const user=this.user;this.user=null;this.eventCallback("signout",{source:"delete_account",user:user})}}))}}exports.AceBaseClientAuth=AceBaseClientAuth},{"./user":13}],4:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.decode=exports.encode=void 0;function encode(str){return btoa(unescape(encodeURIComponent(str)))}exports.encode=encode;function decode(base64){return decodeURIComponent(escape(atob(base64)))}exports.decode=decode},{}],5:[function(require,module,exports){"use strict";var __createBinding=this&&this.__createBinding||(Object.create?function(o,m,k,k2){if(k2===undefined)k2=k;var desc=Object.getOwnPropertyDescriptor(m,k);if(!desc||("get"in desc?!m.__esModule:desc.writable||desc.configurable)){desc={enumerable:true,get:function(){return m[k]}}}Object.defineProperty(o,k2,desc)}: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});const acebaseclient=require("./index");window.acebaseclient=acebaseclient;window.AceBaseClient=acebaseclient.AceBaseClient;__exportStar(require("./index"),exports)},{"./index":7}],6:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.CachedValueUnavailableError=void 0;class CachedValueUnavailableError extends Error{constructor(path,message){super(message||`Value for path "/${path}" is not available in cache`);this.path=path}}exports.CachedValueUnavailableError=CachedValueUnavailableError},{}],7:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.CachedValueUnavailableError=exports.ServerDate=exports.AceBaseClient=exports.Transport=exports.PartialArray=exports.ObjectCollection=exports.proxyAccess=exports.ID=exports.TypeMappings=exports.PathReference=exports.EventSubscription=exports.DataSnapshot=exports.DataReference=void 0;var acebase_core_1=require("acebase-core");Object.defineProperty(exports,"DataReference",{enumerable:true,get:function(){return acebase_core_1.DataReference}});Object.defineProperty(exports,"DataSnapshot",{enumerable:true,get:function(){return acebase_core_1.DataSnapshot}});Object.defineProperty(exports,"EventSubscription",{enumerable:true,get:function(){return acebase_core_1.EventSubscription}});Object.defineProperty(exports,"PathReference",{enumerable:true,get:function(){return acebase_core_1.PathReference}});Object.defineProperty(exports,"TypeMappings",{enumerable:true,get:function(){return acebase_core_1.TypeMappings}});Object.defineProperty(exports,"ID",{enumerable:true,get:function(){return acebase_core_1.ID}});Object.defineProperty(exports,"proxyAccess",{enumerable:true,get:function(){return acebase_core_1.proxyAccess}});Object.defineProperty(exports,"ObjectCollection",{enumerable:true,get:function(){return acebase_core_1.ObjectCollection}});Object.defineProperty(exports,"PartialArray",{enumerable:true,get:function(){return acebase_core_1.PartialArray}});Object.defineProperty(exports,"Transport",{enumerable:true,get:function(){return acebase_core_1.Transport}});var acebase_client_1=require("./acebase-client");Object.defineProperty(exports,"AceBaseClient",{enumerable:true,get:function(){return acebase_client_1.AceBaseClient}});var server_date_1=require("./server-date");Object.defineProperty(exports,"ServerDate",{enumerable:true,get:function(){return server_date_1.ServerDate}});var errors_1=require("./errors");Object.defineProperty(exports,"CachedValueUnavailableError",{enumerable:true,get:function(){return errors_1.CachedValueUnavailableError}})},{"./acebase-client":1,"./errors":6,"./server-date":12,"acebase-core":30}],8:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.default=performance},{}],9:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.promiseTimeout=exports.PromiseTimeoutError=void 0;class PromiseTimeoutError extends Error{}exports.PromiseTimeoutError=PromiseTimeoutError;function promiseTimeout(promise,ms,comment){return new Promise(((resolve,reject)=>{const timeout=setTimeout((()=>reject(new PromiseTimeoutError(`Promise ${comment?`"${comment}" `:""}timed out after ${ms}ms`))),ms);function success(result){clearTimeout(timeout);resolve(result)}promise.then(success).catch(reject)}))}exports.promiseTimeout=promiseTimeout},{}],10:[function(require,module,exports){"use strict";var __awaiter=this&&this.__awaiter||function(thisArg,_arguments,P,generator){function adopt(value){return value instanceof P?value:new P((function(resolve){resolve(value)}))}return new(P||(P=Promise))((function(resolve,reject){function fulfilled(value){try{step(generator.next(value))}catch(e){reject(e)}}function rejected(value){try{step(generator["throw"](value))}catch(e){reject(e)}}function step(result){result.done?resolve(result.value):adopt(result.value).then(fulfilled,rejected)}step((generator=generator.apply(thisArg,_arguments||[])).next())}))};Object.defineProperty(exports,"__esModule",{value:true});const error_1=require("./error");function request(method,url,options={accessToken:null,data:null,dataReceivedCallback:null,dataRequestCallback:null,context:null}){var _a;return __awaiter(this,void 0,void 0,(function*(){let postData=options.data;if(typeof postData==="undefined"||postData===null){postData=""}else if(typeof postData==="object"){postData=JSON.stringify(postData)}const headers={"AceBase-Context":JSON.stringify(options.context||null)};const init={method:method,headers:headers,body:undefined};if(typeof options.dataRequestCallback==="function"){headers["Content-Type"]="text/plain";const supportsStreaming=false;if(supportsStreaming){let canceled=false;init.body=new ReadableStream({pull(controller){var _a;return __awaiter(this,void 0,void 0,(function*(){const chunkSize=controller.desiredSize||1024*16;const chunk=yield(_a=options.dataRequestCallback)===null||_a===void 0?void 0:_a.call(options,chunkSize);if(canceled||[null,""].includes(chunk)){controller.close()}else{controller.enqueue(chunk)}}))},start(controller){return __awaiter(this,void 0,void 0,(function*(){}))},cancel(){canceled=true}})}else{postData="";const chunkSize=1024*512;let chunk;while(chunk=yield options.dataRequestCallback(chunkSize)){postData+=chunk}init.body=postData}}else if(postData.length>0){headers["Content-Type"]="application/json";init.body=postData}if(options.accessToken){headers["Authorization"]=`Bearer ${options.accessToken}`}const request={url:url,method:method,headers:headers,body:undefined};const res=yield fetch(request.url,init).catch((err=>{throw new error_1.AceBaseRequestError(request,null,"fetch_failed",err.message)}));let data="";if(typeof options.dataReceivedCallback==="function"){const reader=(_a=res.body)===null||_a===void 0?void 0:_a.getReader();yield new Promise(((resolve,reject)=>{(function readNext(){var _a;return __awaiter(this,void 0,void 0,(function*(){try{const result=yield reader===null||reader===void 0?void 0:reader.read();(_a=options.dataReceivedCallback)===null||_a===void 0?void 0:_a.call(options,result===null||result===void 0?void 0:result.value);if(result===null||result===void 0?void 0:result.done){return resolve()}readNext()}catch(err){reader===null||reader===void 0?void 0:reader.cancel("error");reject(err)}}))})()}))}else{data=yield res.text()}const isJSON=data[0]==="{"||data[0]==="[";if(res.status===200){const contextHeader=res.headers.get("AceBase-Context");let context;if(contextHeader&&contextHeader[0]==="{"){context=JSON.parse(contextHeader)}else{context={}}if(isJSON){data=JSON.parse(data)}return{context:context,data:data}}else{request.body=postData;const response={statusCode:res.status,statusMessage:res.statusText,headers:res.headers,body:data};let code=res.status,message=res.statusText;if(isJSON){const err=JSON.parse(data);if(err.code){code=err.code}if(err.message){message=err.message}}throw new error_1.AceBaseRequestError(request,response,code,message)}}))}exports.default=request},{"./error":11}],11:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.NOT_CONNECTED_ERROR_MESSAGE=exports.AceBaseRequestError=void 0;class AceBaseRequestError extends Error{constructor(request,response,code,message="unknown error"){super(message);this.request=request;this.response=response;this.code=code;this.message=message}get isNetworkError(){return this.response===null}}exports.AceBaseRequestError=AceBaseRequestError;exports.NOT_CONNECTED_ERROR_MESSAGE="remote database is not connected"},{}],12:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.ServerDate=exports.setServerBias=void 0;const acebase_core_1=require("acebase-core");const performance_1=require("./performance");const time={serverBias:0,localBias:0,lastTime:Date.now(),lastPerf:performance_1.default.now(),get bias(){return this.serverBias+this.localBias}};function biasChanged(){console.log(`Bias changed. server bias = ${time.serverBias}ms, local bias = ${time.localBias}ms`);acebase_core_1.ID.timeBias=time.bias}const interval=1e4;function checkLocalTime(){const now=Date.now(),perf=performance_1.default.now(),msPassed=perf-time.lastPerf,expected=time.lastTime+Math.round(msPassed),diff=expected-now;if(Math.abs(diff)>1){console.log(`Local time changed. diff = ${diff}ms`);time.localBias+=diff;biasChanged()}time.lastTime=now;time.lastPerf=perf;scheduleLocalTimeCheck()}function scheduleLocalTimeCheck(){const timeout=setTimeout(checkLocalTime,interval);timeout.unref&&timeout.unref()}scheduleLocalTimeCheck();function setServerBias(bias){if(typeof bias==="number"){time.serverBias=bias;time.localBias=0;biasChanged()}}exports.setServerBias=setServerBias;class ServerDate extends Date{constructor(){const biasedTime=Date.now()+time.bias;super(biasedTime)}}exports.ServerDate=ServerDate},{"./performance":8,"acebase-core":30}],13:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.AceBaseUser=void 0;class AceBaseUser{constructor(user){var _a,_b,_c;Object.assign(this,user);if(!user.uid){throw new Error("User details is missing required uid field")}this.uid=user.uid;this.displayName=(_a=user.displayName)!==null&&_a!==void 0?_a:"unknown";this.created=(_b=user.created)!==null&&_b!==void 0?_b:new Date(0);this.settings=(_c=user.settings)!==null&&_c!==void 0?_c:{}}}exports.AceBaseUser=AceBaseUser},{}],14:[function(require,module,exports){"use strict";exports.byteLength=byteLength;exports.toByteArray=toByteArray;exports.fromByteArray=fromByteArray;var lookup=[];var revLookup=[];var Arr=typeof Uint8Array!=="undefined"?Uint8Array:Array;var code="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";for(var i=0,len=code.length;i0){throw new Error("Invalid string. Length must be a multiple of 4")}var validLen=b64.indexOf("=");if(validLen===-1)validLen=len;var placeHoldersLen=validLen===len?0:4-validLen%4;return[validLen,placeHoldersLen]}function byteLength(b64){var lens=getLens(b64);var validLen=lens[0];var placeHoldersLen=lens[1];return(validLen+placeHoldersLen)*3/4-placeHoldersLen}function _byteLength(b64,validLen,placeHoldersLen){return(validLen+placeHoldersLen)*3/4-placeHoldersLen}function toByteArray(b64){var tmp;var lens=getLens(b64);var validLen=lens[0];var placeHoldersLen=lens[1];var arr=new Arr(_byteLength(b64,validLen,placeHoldersLen));var curByte=0;var len=placeHoldersLen>0?validLen-4:validLen;var i;for(i=0;i>16&255;arr[curByte++]=tmp>>8&255;arr[curByte++]=tmp&255}if(placeHoldersLen===2){tmp=revLookup[b64.charCodeAt(i)]<<2|revLookup[b64.charCodeAt(i+1)]>>4;arr[curByte++]=tmp&255}if(placeHoldersLen===1){tmp=revLookup[b64.charCodeAt(i)]<<10|revLookup[b64.charCodeAt(i+1)]<<4|revLookup[b64.charCodeAt(i+2)]>>2;arr[curByte++]=tmp>>8&255;arr[curByte++]=tmp&255}return arr}function tripletToBase64(num){return lookup[num>>18&63]+lookup[num>>12&63]+lookup[num>>6&63]+lookup[num&63]}function encodeChunk(uint8,start,end){var tmp;var output=[];for(var i=start;ilen2?len2:i+maxChunkLength))}if(extraBytes===1){tmp=uint8[len-1];parts.push(lookup[tmp>>2]+lookup[tmp<<4&63]+"==")}else if(extraBytes===2){tmp=(uint8[len-2]<<8)+uint8[len-1];parts.push(lookup[tmp>>10]+lookup[tmp>>4&63]+lookup[tmp<<2&63]+"=")}return parts.join("")}},{}],15:[function(require,module,exports){},{}],16:[function(require,module,exports){(function(Buffer){(function(){ +const fireThisEvent=!causedByUs||!cacheEnabled;const updateCache=!causedByUs&&cacheEnabled;const fireCacheEvents=false;const pathSubs=this._subscriptions[data.subscr_path];if(!pathSubs&&data.event!=="mutated"){return}if(updateCache){if(data.path.startsWith("__")){}else if(data.event==="mutations"){const mutations=val.current;mutations.forEach((m=>{const path=m.target.reduce(((path,key)=>acebase_core_1.PathInfo.getChildPath(path,key)),acebase_core_1.PathInfo.getChildPath(`${this.dbname}/cache`,data.path));this.cache.db.api.set(path,m.val,{suppress_events:!fireCacheEvents,context:context})}))}else if(data.event==="notify_child_removed"){this.cache.db.api.set(acebase_core_1.PathInfo.getChildPath(`${this.dbname}/cache`,data.path),null,{suppress_events:!fireCacheEvents,context:context})}else if(!data.event.startsWith("notify_")){this.cache.db.api.set(acebase_core_1.PathInfo.getChildPath(`${this.dbname}/cache`,data.path),val.current,{suppress_events:!fireCacheEvents,context:context})}}if(!fireThisEvent){return}const targetSubs=data.event==="mutated"?Object.keys(this._subscriptions).filter((path=>{const pathInfo=acebase_core_1.PathInfo.get(path);return path===data.path||pathInfo.equals(data.subscr_path)||pathInfo.isAncestorOf(data.path)})).reduce(((subs,path)=>{const add=this._subscriptions[path].filter((sub=>sub.event==="mutated"));subs.push(...add);return subs}),[]):pathSubs.filter((sub=>sub.event===data.event));targetSubs.forEach((subscr=>{subscr.lastEvent=Date.now();subscr.cursor=context.acebase_cursor;subscr.callback(null,data.path,val.current,val.previous,context)}))}));socket.on("query-event",(data=>{data=acebase_core_1.Transport.deserialize(data);const query=this._realtimeQueries[data.query_id];let keepMonitoring=true;try{keepMonitoring=query.options.eventHandler(data)}catch(err){keepMonitoring=false}if(keepMonitoring===false){delete this._realtimeQueries[data.query_id];socket.emit("query-unsubscribe",{query_id:data.query_id})}}))}))}disconnect(){var _a;if(!((_a=this.settings.network)===null||_a===void 0?void 0:_a.realtime)){this._connectionState=CONNECTION_STATE_DISCONNECTING;this._eventTimeline.disconnect=Date.now();this.manualConnectionMonitor.emit("disconnect")}else if(this.socket!==null&&typeof this.socket==="object"){this._connectionState=CONNECTION_STATE_DISCONNECTING;this._eventTimeline.disconnect=Date.now();this.socket.disconnect();this.socket=null}}subscribe(path,event,callback,settings){var _a;return __awaiter(this,void 0,void 0,(function*(){if(!((_a=this.settings.network)===null||_a===void 0?void 0:_a.realtime)){throw new Error(`Cannot subscribe to realtime events because it has been disabled in the network settings`)}let pathSubs=this._subscriptions[path];if(!pathSubs){pathSubs=this._subscriptions[path]=[]}const serverAlreadyNotifying=pathSubs.some((sub=>sub.event===event))||event==="mutated"&&Object.keys(this._subscriptions).some((otherPath=>acebase_core_1.PathInfo.get(otherPath).isAncestorOf(path)&&this._subscriptions[otherPath].some((sub=>sub.event===event&&sub.state==="active"))));const subscr=new EventSubscription(path,event,callback,settings);pathSubs.push(subscr);if(this.hasCache){subscr.cacheCallback=(err,path,newValue,oldValue,context)=>subscr.callback(err,path.slice(`${this.dbname}/cache/`.length),newValue,oldValue,context);this.cache.db.api.subscribe(acebase_core_1.PathInfo.getChildPath(`${this.dbname}/cache`,path),event,subscr.cacheCallback)}if(serverAlreadyNotifying||!this.isConnected){return}if(event==="mutated"){Object.keys(this._subscriptions).filter((otherPath=>acebase_core_1.PathInfo.get(otherPath).isDescendantOf(path)&&this._subscriptions[otherPath].some((sub=>sub.event==="mutated")))).map((path=>_websocketRequest(this.socket,"unsubscribe",{path:path,event:"mutated"},this.accessToken))).map((promise=>promise.catch((err=>console.error(err)))))}const result=yield _websocketRequest(this.socket,"subscribe",{path:path,event:event},this.accessToken);subscr.activate()}))}unsubscribe(path,event,callback){var _a;return __awaiter(this,void 0,void 0,(function*(){if(!((_a=this.settings.network)===null||_a===void 0?void 0:_a.realtime)){throw new Error(`Cannot unsubscribe from realtime events because it has been disabled in the network settings`)}const pathSubs=this._subscriptions[path];if(!pathSubs){return Promise.resolve()}const unsubscribeFrom=subscriptions=>{subscriptions.forEach((subscr=>{pathSubs.splice(pathSubs.indexOf(subscr),1);if(this.hasCache){if(typeof subscr.cacheCallback!=="function"){throw new Error("DEV ERROR: When subscription was added, cacheCallback must have been set")}this.cache.db.api.unsubscribe(acebase_core_1.PathInfo.getChildPath(`${this.dbname}/cache`,path),subscr.event,subscr.cacheCallback)}}))};const hadMutatedEvents=pathSubs.some((sub=>sub.event==="mutated"));if(!event){unsubscribeFrom(pathSubs)}else if(!callback){const subscriptions=pathSubs.filter((subscr=>subscr.event===event));unsubscribeFrom(subscriptions)}else{const subscriptions=pathSubs.filter((subscr=>subscr.event===event&&subscr.callback===callback));unsubscribeFrom(subscriptions)}const hasMutatedEvents=pathSubs.some((sub=>sub.event==="mutated"));let promise=Promise.resolve();if(pathSubs.length===0){delete this._subscriptions[path];if(this.isConnected){promise=_websocketRequest(this.socket,"unsubscribe",{path:path,access_token:this.accessToken},this.accessToken).catch((err=>this.debug.error(`Failed to unsubscribe from event(s) on "${path}": ${err.message}`)))}}else if(this.isConnected&&!pathSubs.some((subscr=>subscr.event===event))){promise=_websocketRequest(this.socket,"unsubscribe",{path:path,event:event,access_token:this.accessToken},this.accessToken).catch((err=>this.debug.error(`Failed to unsubscribe from event "${event}" on "${path}": ${err.message}`)))}if(this.isConnected&&hadMutatedEvents&&!hasMutatedEvents){const promises=Object.keys(this._subscriptions).filter((otherPath=>acebase_core_1.PathInfo.get(otherPath).isDescendantOf(path)&&this._subscriptions[otherPath].some((sub=>sub.event==="mutated")))).map((path=>_websocketRequest(this.socket,"subscribe",{path:path,event:"mutated"},this.accessToken))).map((promise=>promise.catch((err=>this.debug.error(`Failed to subscribe to event "${event}" on path "${path}": ${err.message}`)))));promise=Promise.all([promise,...promises])}yield promise}))}transaction(path,callback,options={context:{}}){const id=acebase_core_1.ID.generate();options.context=options.context||{};options.context.acebase_mutation={client_id:this._id,id:id,op:"transaction",path:path,flow:"server"};const cachePath=acebase_core_1.PathInfo.getChildPath(`${this.dbname}/cache`,path);return new Promise(((resolve,reject)=>__awaiter(this,void 0,void 0,(function*(){var _a;let cacheUpdateVal;const handleSuccess=context=>__awaiter(this,void 0,void 0,(function*(){if(this.hasCache&&typeof cacheUpdateVal!=="undefined"){yield this.cache.db.api.set(cachePath,cacheUpdateVal)}resolve({cursor:context===null||context===void 0?void 0:context.acebase_cursor})}));if(this.isConnected&&((_a=this.settings.network)===null||_a===void 0?void 0:_a.realtime)){const socket=this.socket;const startedCallback=data=>__awaiter(this,void 0,void 0,(function*(){if(data.id===id){socket.off("tx_started",startedCallback);const currentValue=acebase_core_1.Transport.deserialize(data.value);let newValue=callback(currentValue);if(newValue instanceof Promise){newValue=yield newValue}socket.emit("transaction",{action:"finish",id:id,path:path,value:acebase_core_1.Transport.serialize(newValue),access_token:this.accessToken});if(this.hasCache){cacheUpdateVal=newValue}}}));const completedCallback=data=>{if(data.id===id){socket.off("tx_completed",completedCallback);socket.off("tx_error",errorCallback);handleSuccess(data.context)}};const errorCallback=data=>{if(data.id===id){socket.off("tx_started",startedCallback);socket.off("tx_completed",completedCallback);socket.off("tx_error",errorCallback);reject(new Error(data.reason))}};socket.on("tx_started",startedCallback);socket.on("tx_completed",completedCallback);socket.on("tx_error",errorCallback);socket.emit("transaction",{action:"start",id:id,path:path,access_token:this.accessToken,context:options.context})}else{const startData=JSON.stringify({path:path});try{const tx=yield this._request({ignoreConnectionState:true,method:"POST",url:`${this.url}/transaction/${this.dbname}/start`,data:startData,context:options.context});const id=tx.id;const currentValue=acebase_core_1.Transport.deserialize(tx.value);let newValue=callback(currentValue);if(newValue instanceof Promise){newValue=yield newValue}if(this.hasCache){cacheUpdateVal=newValue}const finishData=JSON.stringify({id:id,value:acebase_core_1.Transport.serialize(newValue)});const{context:context}=yield this._request({ignoreConnectionState:true,method:"POST",url:`${this.url}/transaction/${this.dbname}/finish`,data:finishData,context:options.context,includeContext:true});yield handleSuccess(context)}catch(err){if(["ETIMEDOUT","ENOTFOUND","ECONNRESET","ECONNREFUSED","EPIPE","fetch_failed"].includes(err.code)){err.message=error_1.NOT_CONNECTED_ERROR_MESSAGE}reject(err)}}}))))}_request(options){var _a;return __awaiter(this,void 0,void 0,(function*(){if(this.isConnected||options.ignoreConnectionState===true){const result=yield(()=>__awaiter(this,void 0,void 0,(function*(){try{return yield(0,request_1.default)(options.method||"GET",options.url,{data:options.data,accessToken:this.accessToken,dataReceivedCallback:options.dataReceivedCallback,dataRequestCallback:options.dataRequestCallback,context:options.context})}catch(err){if(this.isConnected&&err.isNetworkError){this.debug.warn(`A network error occurred loading ${options.url}`);this._handleDetectedDisconnect(err)}throw err}})))();if(result.context&&result.context.acebase_cursor){this._updateCursor(result.context.acebase_cursor)}if(options.includeContext===true){if(!result.context){result.context={}}return result}else{return result.data}}else{if(!this.isConnecting||!((_a=this.settings.network)===null||_a===void 0?void 0:_a.realtime)){throw new Error(error_1.NOT_CONNECTED_ERROR_MESSAGE)}const connectPromise=new Promise((resolve=>{var _a;return(_a=this.socket)===null||_a===void 0?void 0:_a.once("connect",resolve)}));yield(0,promise_timeout_1.promiseTimeout)(connectPromise,1e3,"Waiting for connection").catch((err=>{throw new Error(error_1.NOT_CONNECTED_ERROR_MESSAGE)}));return this._request(options)}}))}handleSignInResult(result,emitEvent=true){var _a;this._eventTimeline.signIn=Date.now();const details={user:result.user,accessToken:result.access_token,provider:result.provider||"acebase"};this.accessToken=details.accessToken;(_a=this.socket)===null||_a===void 0?void 0:_a.emit("signin",details.accessToken);emitEvent&&this.eventCallback("signin",details);return details}signIn(username,password){return __awaiter(this,void 0,void 0,(function*(){if(!this.isConnected){throw new Error(error_1.NOT_CONNECTED_ERROR_MESSAGE)}const result=yield this._request({method:"POST",url:`${this.url}/auth/${this.dbname}/signin`,data:{method:"account",username:username,password:password,client_id:this.socket&&this.socket.id}});return this.handleSignInResult(result)}))}signInWithEmail(email,password){return __awaiter(this,void 0,void 0,(function*(){if(!this.isConnected){throw new Error(error_1.NOT_CONNECTED_ERROR_MESSAGE)}const result=yield this._request({method:"POST",url:`${this.url}/auth/${this.dbname}/signin`,data:{method:"email",email:email,password:password,client_id:this.socket&&this.socket.id}});return this.handleSignInResult(result)}))}signInWithToken(token,emitEvent=true){return __awaiter(this,void 0,void 0,(function*(){if(!this.isConnected){throw new Error("Cannot sign in because client is not connected to the server. If you want to automatically sign in the user with this access token once a connection is established, use client.auth.setAccessToken(token)")}const result=yield this._request({method:"POST",url:`${this.url}/auth/${this.dbname}/signin`,data:{method:"token",access_token:token,client_id:this.socket&&this.socket.id}});return this.handleSignInResult(result,emitEvent)}))}setAccessToken(token){this.accessToken=token}startAuthProviderSignIn(providerName,callbackUrl,options){return __awaiter(this,void 0,void 0,(function*(){if(!this.isConnected){throw new Error(error_1.NOT_CONNECTED_ERROR_MESSAGE)}const optionParams=typeof options==="object"?"&"+Object.keys(options).map((key=>`option_${key}=${encodeURIComponent(options[key])}`)).join("&"):"";const result=yield this._request({url:`${this.url}/oauth2/${this.dbname}/init?provider=${providerName}&callbackUrl=${callbackUrl}${optionParams}`});return{redirectUrl:result.redirectUrl}}))}finishAuthProviderSignIn(callbackResult){return __awaiter(this,void 0,void 0,(function*(){let result;try{result=JSON.parse(Base64.decode(callbackResult))}catch(err){throw new Error(`Invalid result`)}if(!result.user){this.accessToken=result.access_token;const authState=yield this._request({url:`${this.url}/auth/${this.dbname}/state`});if(!authState.signed_in){this.accessToken=null;throw new Error(`Invalid access token received: not signed in`)}result.user=authState.user}return this.handleSignInResult(result)}))}refreshAuthProviderToken(providerName,refreshToken){return __awaiter(this,void 0,void 0,(function*(){if(!this.isConnected){throw new Error(error_1.NOT_CONNECTED_ERROR_MESSAGE)}const result=yield this._request({url:`${this.url}/oauth2/${this.dbname}/refresh?provider=${providerName}&refresh_token=${refreshToken}`});return result}))}signOut(options={everywhere:false,clearCache:false}){return __awaiter(this,void 0,void 0,(function*(){if(typeof options==="boolean"){options={everywhere:options}}else if(typeof options!=="object"){throw new TypeError("options must be an object")}if(typeof options.everywhere!=="boolean"){options.everywhere=false}if(typeof options.clearCache!=="boolean"){options.clearCache=false}if(!this.accessToken){return}if(!this.isConnected){throw new Error(error_1.NOT_CONNECTED_ERROR_MESSAGE)}const result=yield this._request({method:"POST",url:`${this.url}/auth/${this.dbname}/signout`,data:{client_id:this.socket&&this.socket.id,everywhere:options.everywhere}});this.socket&&this.socket.emit("signout",this.accessToken);this.accessToken=null;if(this.hasCache&&options.clearCache){this.clearCache().catch((err=>{console.error(`Could not clear cache:`,err)}))}this.eventCallback("signout")}))}changePassword(uid,currentPassword,newPassword){return __awaiter(this,void 0,void 0,(function*(){if(!this.accessToken){throw new Error(`not_signed_in`)}if(!this.isConnected){throw new Error(error_1.NOT_CONNECTED_ERROR_MESSAGE)}const result=yield this._request({method:"POST",url:`${this.url}/auth/${this.dbname}/change_password`,data:{uid:uid,password:currentPassword,new_password:newPassword}});this.accessToken=result.access_token;return{accessToken:this.accessToken}}))}forgotPassword(email){return __awaiter(this,void 0,void 0,(function*(){if(!this.isConnected){throw new Error(error_1.NOT_CONNECTED_ERROR_MESSAGE)}const result=yield this._request({method:"POST",url:`${this.url}/auth/${this.dbname}/forgot_password`,data:{email:email}});return result}))}verifyEmailAddress(verificationCode){return __awaiter(this,void 0,void 0,(function*(){if(!this.isConnected){throw new Error(error_1.NOT_CONNECTED_ERROR_MESSAGE)}const result=yield this._request({method:"POST",url:`${this.url}/auth/${this.dbname}/verify_email`,data:{code:verificationCode}});return result}))}resetPassword(resetCode,newPassword){return __awaiter(this,void 0,void 0,(function*(){if(!this.isConnected){throw new Error(error_1.NOT_CONNECTED_ERROR_MESSAGE)}const result=yield this._request({method:"POST",url:`${this.url}/auth/${this.dbname}/reset_password`,data:{code:resetCode,password:newPassword}});return result}))}signUp(details,signIn=true){return __awaiter(this,void 0,void 0,(function*(){if(!this.isConnected){throw new Error(error_1.NOT_CONNECTED_ERROR_MESSAGE)}const result=yield this._request({method:"POST",url:`${this.url}/auth/${this.dbname}/signup`,data:details});if(signIn){return this.handleSignInResult(result)}return{user:result.user,accessToken:this.accessToken}}))}updateUserDetails(details){return __awaiter(this,void 0,void 0,(function*(){if(!this.isConnected){throw new Error(error_1.NOT_CONNECTED_ERROR_MESSAGE)}const result=yield this._request({method:"POST",url:`${this.url}/auth/${this.dbname}/update`,data:details});return{user:result.user}}))}deleteAccount(uid,signOut=true){return __awaiter(this,void 0,void 0,(function*(){if(!this.isConnected){throw new Error(error_1.NOT_CONNECTED_ERROR_MESSAGE)}const result=yield this._request({method:"POST",url:`${this.url}/auth/${this.dbname}/delete`,data:{uid:uid}});if(signOut){this.socket&&this.socket.emit("signout",this.accessToken);this.accessToken=null;this.eventCallback("signout")}return true}))}get isConnected(){return this._connectionState===CONNECTION_STATE_CONNECTED}get isConnecting(){return this._connectionState===CONNECTION_STATE_CONNECTING}get connectionState(){return this._connectionState}stats(options=undefined){return this._request({url:`${this.url}/stats/${this.dbname}`})}sync(options={firstSync:false,fetchFreshData:true,eventCallback:null}){var _a,_b,_c;return __awaiter(this,void 0,void 0,(function*(){if(!this.isConnected){throw new Error(error_1.NOT_CONNECTED_ERROR_MESSAGE)}if(this.hasCache&&!this.cache.db.isReady){throw new Error(`cache database is not ready yet`)}this._eventTimeline.sync=Date.now();(_a=options.eventCallback)===null||_a===void 0?void 0:_a.call(options,"sync_start");const handleStatsUpdateError=err=>{this.debug.error(`Failed to update cache db stats:`,err)};try{let totalPendingChanges=0;const useCursor=((_b=this.settings.sync)===null||_b===void 0?void 0:_b.useCursor)!==false;const cursor=useCursor?this._cursor.sync:null;if(this.hasCache){const cacheApi=this.cache.db.api;const{value:value,context:context}=yield cacheApi.get(`${this.dbname}/pending`);const pendingChanges=value;cacheApi.set(`${this.dbname}/stats/last_sync_start`,new Date).catch(handleStatsUpdateError);try{const ids=Object.keys(pendingChanges||{}).sort();const compatibilityMode=ids.map((id=>pendingChanges[id])).some((m=>m.type==="update"));const mutations=compatibilityMode?ids.map((id=>{const mutation=pendingChanges[id];mutation.ids=[id];return mutation})):ids.reduce(((mutations,id)=>{const change=pendingChanges[id];console.assert(["set","remove"].includes(change.type),'Only "set" and "remove" mutations should be present');if(change.path===""){const rootUpdate=mutations.find((u=>u.path===""));if(rootUpdate){rootUpdate.data=change.data}else{change.ids=[id];mutations.push(change)}}else{const pathInfo=acebase_core_1.PathInfo.get(change.path);const parentPath=pathInfo.parentPath;const parentUpdate=mutations.find((u=>u.path===parentPath));const value=change.type==="remove"||change.data===null||typeof change.data==="undefined"?null:change.data;if(!parentUpdate){mutations.push({ids:[id],type:"update",path:parentPath,data:{[pathInfo.key]:value},context:change.context})}else{parentUpdate.data[pathInfo.key]=value;parentUpdate.ids.push(id)}}return mutations}),[]);for(const m of mutations){const ids=m.ids;this.debug.verbose(`SYNC pushing mutations ${ids.join(",")}: `,m);totalPendingChanges++;try{if(m.type==="update"){yield this.update(m.path,m.data,{allow_cache:false,context:m.context})}else if(m.type==="set"){if(!m.data){m.data=null}yield this.set(m.path,m.data,{allow_cache:false,context:m.context})}else if(m.type==="remove"){yield this.set(m.path,null,{allow_cache:false,context:m.context})}else{throw new Error(`unsupported mutation type "${m.type}"`)}this.debug.verbose(`SYNC mutation ${ids.join(",")} processed ok`);const updates=ids.reduce(((updates,id)=>(updates[id]=null,updates)),{});cacheApi.update(`${this.dbname}/pending`,updates)}catch(err){this.debug.error(`SYNC mutations ${ids.join(",")} failed: ${err.message}`);if(!this.isConnected){throw err}if(typeof err==="string"){err={code:"unknown",message:err,stack:"n/a"}}const errorReport={date:new Date,code:err.code||"unknown",message:err.message,stack:err.stack};ids.forEach((id=>{cacheApi.transaction(`${this.dbname}/pending/${id}`,(m=>{if(!m.error){m.error={first:errorReport,last:errorReport,retries:0}}else{m.error.last=errorReport;m.error.retries++}if(m.error.retries===3){cacheApi.set(`${this.dbname}/failed/${id}`,m);return null}return m}))}));cacheApi.set(`${this.dbname}/stats/last_sync_error`,errorReport).catch(handleStatsUpdateError);(_c=options.eventCallback)===null||_c===void 0?void 0:_c.call(options,"sync_change_error",{error:err,change:m})}}this.debug.verbose(`SYNC push done`);cacheApi.set(`${this.dbname}/stats/last_sync_end`,new Date).catch(handleStatsUpdateError)}catch(err){this.debug.error(`SYNC push error: ${err.message}`);if(typeof err==="string"){err={code:"unknown",message:err,stack:"n/a"}}cacheApi.set(`${this.dbname}/stats/last_sync_error`,{date:new Date,code:err.code||"unknown",message:err.message,stack:err.stack}).catch(handleStatsUpdateError);throw err}}let totalRemoteChanges=0,usedSyncMethod="reload";const subscriptionPaths=Object.keys(this._subscriptions);const subscriptions=subscriptionPaths.reduce(((subs,path)=>{this._subscriptions[path].forEach((sub=>subs.push(sub)));return subs}),[]);const subscriptionsFor=path=>subscriptions.filter((sub=>sub.path===path));if(this.hasCache){const cacheApi=this.cache.db.api;subscriptions.forEach((sub=>{sub.tempCallback=()=>{totalRemoteChanges++};cacheApi.subscribe(acebase_core_1.PathInfo.getChildPath(`${this.dbname}/cache`,sub.path),sub.event,sub.tempCallback)}));const strategy={reload:[],cursor:[],fallback:[],warn:[],noop:[]};const hasStaleValue=sub=>{const addedWhileOffline=sub.added>this._eventTimeline.disconnect&&sub.added{if(path.includes("*")||path.includes("$")){return false}return subscriptionsFor(path).some((sub=>{if(hasStaleValue(sub)){if(typeof sub.settings.syncFallback==="function"){return false}if(sub.settings.syncFallback==="reload"){return true}if(sub.event==="value"){return true}if(sub.event==="child_added"&&!sub.settings.newOnly){return true}}return false}))})).reduce(((reloadPaths,path)=>{!reloadPaths.some((p=>p===path||acebase_core_1.PathInfo.get(p).isAncestorOf(path)))&&reloadPaths.push(path);return reloadPaths}),[]);strategy.fallback=subscriptionPaths.filter((path=>!strategy.reload.some((p=>p===path||acebase_core_1.PathInfo.get(p).isAncestorOf(path))))).reduce(((fallbackItems,path)=>{subscriptionsFor(path).forEach((sub=>{if(hasStaleValue(sub)&&typeof sub.settings.syncFallback==="function"){fallbackItems.push(sub)}}));return fallbackItems}),[]);strategy.cursor=!cursor?[]:subscriptionPaths.filter((path=>!strategy.reload.some((p=>p===path||acebase_core_1.PathInfo.get(p).isAncestorOf(path))))).reduce(((cursorItems,path)=>{const subs=subscriptionsFor(path);const events=subs.filter((sub=>!hasStaleValue(sub)&&!strategy.fallback.includes(sub))).reduce(((events,sub)=>(events.includes(sub.event)||events.push(sub.event))&&events),[]);events.length>0&&cursorItems.push({path:path,events:events});return cursorItems}),[]);strategy.warn=subscriptionPaths.filter((path=>!strategy.reload.some((p=>p===path||acebase_core_1.PathInfo.get(p).isAncestorOf(path))))).reduce(((warnItems,path)=>{const subs=subscriptionsFor(path).filter((sub=>!strategy.fallback.includes(sub)));subs.forEach((sub=>{if(typeof sub.settings.syncFallback==="function"||sub.added>this._eventTimeline.connect){strategy.noop.push(sub)}else if(!strategy.cursor.some((item=>item.path===sub.path&&item.events.includes(sub.event)))){const item=warnItems.find((item=>item.path===sub.path));if(!item){warnItems.push({path:sub.path,events:[sub.event]})}else if(!item.events.includes(sub.event)){item.events.push(sub.event)}}}));return warnItems}),[]);console.log(`SYNC strategy`,strategy);const syncPromises=[];if(strategy.cursor.length>0){this.debug.log(`SYNC using cursor "${cursor}" for event(s) ${strategy.cursor.map((item=>`${item.events.join(", ")} on "/${item.path}"`)).join(", ")}`);const cursorPromise=(()=>__awaiter(this,void 0,void 0,(function*(){let remoteMutations;try{const result=yield this.getChanges({for:strategy.cursor,cursor:cursor});remoteMutations=result.changes;this._updateCursor(result.new_cursor)}catch(err){this.debug.error(`SYNC: Could not load remote changes`,err);options.eventCallback&&options.eventCallback("sync_cursor_error",err);if(err.code==="no_transaction_logging"){this._updateCursor(null)}strategy.cursor.forEach((item=>{if(item.events.includes("value")){strategy.reload.push(item.path)}else{strategy.warn.push(item)}}))}if(remoteMutations){usedSyncMethod="cursor";this.debug.log(`SYNC: Got ${remoteMutations.length} remote mutations`,remoteMutations);const promises=remoteMutations.map((m=>{const cachePath=`${this.dbname}/cache/${m.path}`;if(m.type==="update"){return cacheApi.update(cachePath,m.value,{context:m.context})}else if(m.type==="set"){return cacheApi.set(cachePath,m.value,{context:m.context})}}));yield Promise.all(promises)}})))();syncPromises.push(cursorPromise)}if(strategy.reload.length>0){this.debug.log(`SYNC reloading data for event paths ${strategy.reload.map((path=>`"/${path}"`)).join(", ")}`);const reloadPromise=(()=>__awaiter(this,void 0,void 0,(function*(){const promises=strategy.reload.map((path=>{this.debug.verbose(`SYNC: load "/${path}"`);return this.get(path,{cache_mode:"bypass"}).catch((err=>{this.debug.error(`SYNC: could not load "/${path}"`,err);options.eventCallback&&options.eventCallback("sync_pull_error",err)}))}));yield Promise.all(promises)})))();syncPromises.push(reloadPromise)}if(strategy.fallback.length>0){this.debug.log(`SYNC using fallback functions for event(s) ${strategy.fallback.map((sub=>`${sub.event} on "/${sub.path}"`)).join(", ")}`);const fallbackPromise=(()=>__awaiter(this,void 0,void 0,(function*(){const promises=strategy.fallback.map((sub=>__awaiter(this,void 0,void 0,(function*(){this.debug.verbose(`SYNC: running fallback for event ${sub.event} on "/${sub.path}"`);try{if(sub.settings.syncFallback==="reload"){throw new Error(`DEV ERROR: Not expecting "reload" as fallback`)}yield sub.settings.syncFallback()}catch(err){this.debug.error(`SYNC: error running fallback function for ${sub.event} on "/${sub.path}"`,err);options.eventCallback&&options.eventCallback("sync_fallback_error",err)}}))));yield Promise.all(promises)})))();syncPromises.push(fallbackPromise)}if(strategy.warn.length>0){this.debug.warn(`SYNC warning: unable to sync event(s) ${strategy.warn.map((item=>`${item.events.map((event=>`"${event}"`)).join(", ")} on "/${item.path}"`)).join(", ")}. To resolve this, provide syncFallback functions for these events`)}yield Promise.all(syncPromises);yield new Promise((resolve=>setTimeout(resolve,10)));subscriptions.forEach((sub=>{if(typeof sub.tempCallback!=="function"){throw new Error("DEV ERROR: tempCallback must be a function")}cacheApi.unsubscribe(acebase_core_1.PathInfo.getChildPath(`${this.dbname}/cache`,sub.path),sub.event,sub.tempCallback);delete sub.tempCallback}))}else if(!this._cache){const syncPromises=[];subscriptionPaths.forEach((path=>{const subs=subscriptionsFor(path);const warnEvents=[];subs.filter((sub=>sub.event!=="value")).forEach((sub=>{if(typeof sub.settings.syncFallback==="function"){syncPromises.push(sub.settings.syncFallback())}else{!warnEvents.includes(sub.event)&&warnEvents.push(sub.event)}}));if(warnEvents.length>0){this.debug.warn(`Subscriptions ${warnEvents.join(", ")} on path "${path}" might have missed events while offline. Data should be reloaded!`)}const valueSubscriptions=subs.filter((sub=>sub.event==="value"));if(valueSubscriptions.length>0){const p=this.get(path,{allow_cache:false}).then((value=>{valueSubscriptions.forEach((subscr=>subscr.callback(null,path,value)))}));syncPromises.push(p)}}));yield Promise.all(syncPromises)}subscriptions.forEach((sub=>sub.lastSynced=Date.now()));this.debug.verbose(`SYNC done`);const info={local:totalPendingChanges,remote:totalRemoteChanges,method:usedSyncMethod,cursor:cursor};options.eventCallback&&options.eventCallback("sync_done",info);return info}catch(err){this.debug.error(`SYNC error`,err);options.eventCallback&&options.eventCallback("sync_error",err);throw err}}))}getMutations(filter){var _a;return __awaiter(this,void 0,void 0,(function*(){if(typeof filter!=="object"){throw new Error("No filter specified")}if(typeof filter.cursor!=="string"&&typeof filter.timestamp!=="number"){throw new Error("No cursor or timestamp given")}const query=Object.keys(filter).map((key=>{let val=filter[key];if(key==="for"){val=encodeURIComponent(JSON.stringify(val))}return typeof val!=="undefined"?`${key}=${val}`:null})).filter((p=>p!=null)).join("&");const{data:data,context:context}=yield this._request({url:`${this.url}/sync/mutations/${this.dbname}?${query}`,includeContext:true});const mutations=acebase_core_1.Transport.deserialize2(data);return{used_cursor:(_a=filter.cursor)!==null&&_a!==void 0?_a:null,new_cursor:context.acebase_cursor,mutations:mutations}}))}getChanges(filter){var _a;return __awaiter(this,void 0,void 0,(function*(){if(typeof filter!=="object"){throw new Error("No filter specified")}if(typeof filter.cursor!=="string"&&typeof filter.timestamp!=="number"){throw new Error("No cursor or timestamp given")}const query=Object.keys(filter).map((key=>{let val=filter[key];if(key==="for"){val=encodeURIComponent(JSON.stringify(val))}return typeof val!=="undefined"?`${key}=${val}`:null})).filter((p=>p!=null)).join("&");const{data:data,context:context}=yield this._request({url:`${this.url}/sync/changes/${this.dbname}?${query}`,includeContext:true});const changes=acebase_core_1.Transport.deserialize2(data);return{used_cursor:(_a=filter.cursor)!==null&&_a!==void 0?_a:null,new_cursor:context.acebase_cursor,changes:changes}}))}_addCacheSetMutation(path,value,context){var _a,_b;return __awaiter(this,void 0,void 0,(function*(){const escapedPath=path.replace(/([.*+?\\$^\(\)\[\]\{\}])/g,"\\$1");const re=new RegExp(`^${escapedPath}(?:\\[|/|$)`);yield(_a=this._cache)===null||_a===void 0?void 0:_a.db.query(`${this.dbname}/pending`).filter("path","matches",re).remove();return(_b=this._cache)===null||_b===void 0?void 0:_b.db.api.set(`${this.dbname}/pending/${acebase_core_1.ID.generate()}`,{type:value!==null?"set":"remove",path:path,data:value,context:context})}))}set(path,value,options={allow_cache:true,context:{}}){var _a;if(!options.context){options.context={}}const useCache=this._cache&&options.allow_cache!==false;const useServer=this.isConnected;options.context.acebase_mutation=options.context.acebase_mutation||{client_id:this._id,id:acebase_core_1.ID.generate(),op:"set",path:path,flow:useCache?useServer?"parallel":"cache":"server"};const updateServer=()=>__awaiter(this,void 0,void 0,(function*(){const data=JSON.stringify(acebase_core_1.Transport.serialize(value));const{context:context}=yield this._request({method:"PUT",url:`${this.url}/data/${this.dbname}/${path}`,data:data,context:options.context,includeContext:true});Object.assign(options.context,context);const cursor=context===null||context===void 0?void 0:context.acebase_cursor;return{cursor:cursor}}));if(!useCache){return updateServer()}const cachePath=acebase_core_1.PathInfo.getChildPath(`${this.dbname}/cache`,path);let rollbackValue;const updateCache=()=>this.cache.db.api.transaction(cachePath,(currentValue=>{rollbackValue=currentValue;return value}),{context:options.context});const rollbackCache=()=>__awaiter(this,void 0,void 0,(function*(){yield cachePromise;return this.cache.db.api.set(cachePath,rollbackValue,{context:options.context})}));const addPendingTransaction=()=>__awaiter(this,void 0,void 0,(function*(){yield this._addCacheSetMutation(path,value,options.context)}));const cachePromise=updateCache();const tryCachePromise=cachePromise.then((()=>({success:true,error:null}))).catch((err=>({success:false,error:err})));const serverPromise=!useServer?null:updateServer();const tryServerPromise=!useServer?null:serverPromise.then((()=>({success:true,error:null}))).catch((err=>({success:false,error:err})));Promise.all([tryCachePromise,tryServerPromise]).then((([cacheResult,serverResult])=>{var _a;const networkError=serverPromise&&!(serverResult===null||serverResult===void 0?void 0:serverResult.success)&&((_a=serverResult===null||serverResult===void 0?void 0:serverResult.error)===null||_a===void 0?void 0:_a.isNetworkError)===true;if(serverPromise&&!networkError){if(serverResult===null||serverResult===void 0?void 0:serverResult.success){if(!cacheResult.success){this.debug.error(`Failed to set cache for "${path}". Error: `,cacheResult.error)}}else{if(cacheResult.success){this.debug.error(`Failed to set server value for "${path}", rolling back cache to previous value. Error:`,serverResult===null||serverResult===void 0?void 0:serverResult.error);rollbackCache().catch((err=>{this.debug.error(`Failed to roll back cache? Error:`,err)}))}}}else if(cacheResult.success){addPendingTransaction().catch((err=>{this.debug.error(`Failed to add pending sync action for "${path}", rolling back cache to previous value. Error:`,err);rollbackCache().catch((err=>{this.debug.error(`Failed to roll back cache? Error:`,err)}))}))}}));if(!useServer){return cachePromise}return((_a=this._cache)===null||_a===void 0?void 0:_a.priority)==="cache"?cachePromise:serverPromise}update(path,updates,options={allow_cache:true,context:{}}){var _a,_b;const useCache=this._cache&&options&&options.allow_cache!==false;const useServer=this.isConnected;options.context.acebase_mutation=options.context.acebase_mutation||{client_id:this._id,id:acebase_core_1.ID.generate(),op:"update",path:path,flow:useCache?useServer?"parallel":"cache":"server"};const updateServer=()=>__awaiter(this,void 0,void 0,(function*(){const data=JSON.stringify(acebase_core_1.Transport.serialize(updates));const{context:context}=yield this._request({method:"POST",url:`${this.url}/data/${this.dbname}/${path}`,data:data,context:options.context,includeContext:true});Object.assign(options.context,context);const cursor=context.acebase_cursor;return{cursor:cursor}}));if(!useCache){return updateServer()}const cacheApi=(_a=this._cache)===null||_a===void 0?void 0:_a.db.api;const cachePath=acebase_core_1.PathInfo.getChildPath(`${this.dbname}/cache`,path);let rollbackUpdates;const updateCache=()=>__awaiter(this,void 0,void 0,(function*(){const properties=Object.keys(updates);const result=yield cacheApi.get(cachePath,{include:properties});rollbackUpdates=result.value;properties.forEach((prop=>{if(!(prop in rollbackUpdates)&&updates[prop]!==null){rollbackUpdates[prop]=null}}));return cacheApi.update(cachePath,updates,{context:options.context})}));const rollbackCache=()=>__awaiter(this,void 0,void 0,(function*(){yield cachePromise;return cacheApi.update(cachePath,rollbackUpdates,{context:options.context})}));const addPendingTransaction=()=>__awaiter(this,void 0,void 0,(function*(){const pathInfo=acebase_core_1.PathInfo.get(path);const mutations=Object.keys(updates).map((prop=>{if(updates instanceof Array){prop=parseInt(prop)}return{path:pathInfo.childPath(prop),value:updates[prop]}}));const promises=mutations.map((m=>this._addCacheSetMutation(m.path,m.value,options.context)));yield Promise.all(promises)}));const cachePromise=updateCache();const tryCachePromise=cachePromise.then((()=>({success:true,error:null}))).catch((err=>({success:false,error:err})));const serverPromise=!useServer?null:updateServer();const tryServerPromise=!useServer?{executed:false,success:false,error:null}:serverPromise.then((()=>({executed:true,success:true,error:null}))).catch((err=>({executed:true,success:false,error:err})));Promise.all([tryCachePromise,tryServerPromise]).then((([cacheResult,serverResult])=>{const networkError=serverResult.executed&&!serverResult.success&&serverResult.error.isNetworkError===true;if(serverResult.executed&&!networkError){if(serverResult.success){if(!cacheResult.success){this.debug.error(`Failed to update cache for "${path}". Error: `,cacheResult.error)}}else{if(cacheResult.success){this.debug.error(`Failed to update server value for "${path}", rolling back cache to previous value. Error:`,serverResult.error);rollbackCache().catch((err=>{this.debug.error(`Failed to roll back cache? Error:`,err)}))}}}else if(cacheResult.success){addPendingTransaction().catch((err=>{this.debug.error(`Failed to add pending sync action for "${path}", rolling back cache to previous value. Error:`,err);rollbackCache().catch((err=>{this.debug.error(`Failed to roll back cache? Error:`,err)}))}))}}));if(!useServer){return cachePromise}return((_b=this._cache)===null||_b===void 0?void 0:_b.priority)==="cache"?cachePromise:serverPromise}get(path,options={cache_mode:"allow"}){var _a,_b;return __awaiter(this,void 0,void 0,(function*(){if(typeof options.cache_mode!=="string"){options.cache_mode="allow"}const useCache=this._cache&&options.cache_mode!=="bypass";const getServerValue=()=>__awaiter(this,void 0,void 0,(function*(){let url=`${this.url}/data/${this.dbname}/${path}`;let filtered=false;if(options){const query=[];if(options.exclude instanceof Array){query.push(`exclude=${options.exclude.join(",")}`)}if(options.include instanceof Array){query.push(`include=${options.include.join(",")}`)}if(typeof options.child_objects==="boolean"){query.push(`child_objects=${options.child_objects}`)}if(query.length>0){filtered=true;url+=`?${query.join("&")}`}}const result=yield this._request({url:url,includeContext:true});const context=result.context;const cursor=context&&context.acebase_cursor;const value=acebase_core_1.Transport.deserialize(result.data);if(this._cache){if(!filtered){const cachePath=acebase_core_1.PathInfo.getChildPath(`${this.dbname}/cache`,path);this._cache.db.api.set(cachePath,value,{context:{acebase_operation:"update_cache",acebase_server_context:context}}).catch((err=>{this.debug.error(`Error caching data for "/${path}"`,err)}))}}return{value:value,context:context,cursor:cursor}}));const getCacheValue=(throwOnNull=false)=>__awaiter(this,void 0,void 0,(function*(){if(!this._cache){throw new Error(`DEV ERROR: cannot get cached value if no cache is used!`)}const result=yield this._cache.db.api.get(acebase_core_1.PathInfo.getChildPath(`${this.dbname}/cache`,path),options);let{value:value,context:context}=result;if(!("value"in result&&"context"in result)){console.warn(`Missing context from cache results. Update your acebase package`);value=result,context={}}if(value===null&&throwOnNull){throw new errors_1.CachedValueUnavailableError(path)}delete context.acebase_cursor;return{value:value,context:context}}));if(options.cache_mode==="force"){const{value:value,context:context}=yield getCacheValue(false);context.acebase_origin="cache";return{value:value,context:context}}if(useCache&&typeof options.cache_cursor==="string"){let syncResult;try{syncResult=yield this.updateCache(path,options.cache_cursor)}catch(err){}const{value:value,context:context}=yield getCacheValue(false);if(syncResult){context.acebase_cursor=syncResult.new_cursor;context.acebase_origin="hybrid"}else{context.acebase_cursor=options.cache_cursor;context.acebase_origin="cache"}return{value:value,context:context,cursor:context.acebase_cursor}}if(!useCache){const{value:value,context:context,cursor:cursor}=yield getServerValue();context.acebase_origin="server";return{value:value,context:context,cursor:cursor}}if(!this.isConnected||((_a=this._cache)===null||_a===void 0?void 0:_a.priority)==="cache"){const throwOnNull=((_b=this._cache)===null||_b===void 0?void 0:_b.priority)!=="cache";const{value:value,context:context}=yield getCacheValue(throwOnNull);context.acebase_origin="cache";return{value:value,context:context}}return new Promise(((resolve,reject)=>{let wait=true,done=false;const gotValue=(source,val)=>{var _a;this.debug.verbose(`Got ${source} value of "${path}":`,val);if(done){return}const{value:value,context:context,cursor:cursor}=val;if(source==="server"){done=true;this.debug.verbose(`Using server value for "${path}"`);context.acebase_origin="server";resolve({value:value,context:context,cursor:cursor})}else if(value===null){if(!wait){const serverError=(_a=errors.find((e=>e.source==="server")))===null||_a===void 0?void 0:_a.error;if(serverError.isNetworkError){return reject(new errors_1.CachedValueUnavailableError(path))}const error=new errors_1.CachedValueUnavailableError(path,`Value for "${path}" not found in cache, and server value could not be loaded. See serverError for more details`);error.serverError=serverError;return reject(error)}}else if(!wait){done=true;this.debug.verbose(`Using cache value for "${path}"`);context.acebase_origin="cache";resolve({value:value,context:context})}else{setTimeout((()=>{if(done){return}this.debug.verbose(`Using (delayed) cache value for "${path}"`);done=true;context.acebase_origin="cache";resolve({value:value,context:context})}),1e3)}};const errors=[];const gotError=(source,error)=>{var _a;errors.push({source:source,error:error});if(errors.length===2){reject((_a=errors.find((e=>e.source==="server")))===null||_a===void 0?void 0:_a.error)}};getServerValue().then((val=>gotValue("server",val))).catch((err=>(wait=false,gotError("server",err))));getCacheValue(false).then((val=>gotValue("cache",val))).catch((err=>gotError("cache",err)))}))}))}exists(path,options={allow_cache:true}){const useCache=this._cache&&options.allow_cache!==false;const getCacheExists=()=>{if(!this._cache){throw new Error("DEV ERROR: no cache db available to check exists")}return this._cache.db.api.exists(acebase_core_1.PathInfo.getChildPath(`${this.dbname}/cache`,path))};const getServerExists=()=>this._request({url:`${this.url}/exists/${this.dbname}/${path}`}).then((res=>res.exists)).catch((err=>{throw err}));if(!useCache){return getServerExists()}else if(!this.isConnected){return getCacheExists()}else{return new Promise(((resolve,reject)=>{let wait=true,done=false;const gotExists=(source,exists)=>{if(done){return}if(source==="server"){done=true;resolve(exists)}else if(!wait){done=true;resolve(exists)}else{setTimeout((()=>{if(done){return}done=true;resolve(exists)}),1e3)}};const errors=[];const gotError=(source,error)=>{errors.push({source:source,error:error});if(errors.length===2){reject(errors.find((e=>e.source==="server")))}};getServerExists().then((exists=>gotExists("server",exists))).catch((err=>(wait=false,gotError("server",err))));getCacheExists().then((exists=>gotExists("cache",exists))).catch((err=>gotError("cache",err)))}))}}callExtension(method,path,data){method=method.toUpperCase();const postData=["PUT","POST"].includes(method)?data:null;let url=`${this.url}/ext/${this.dbname}/${path}`;if(data&&!["PUT","POST"].includes(method)){if(typeof data==="object"){data=Object.keys(data).filter((key=>typeof data[key]!=="undefined")).map((key=>key+"="+encodeURIComponent(JSON.stringify(data[key])))).join("&")}else if(typeof data!=="string"||!data.includes("=")){throw new Error('data must be an object, or a string with query parameters, like "index=3&name=Something"')}url+=`?`+data}return this._request({method:method,url:url,data:postData,ignoreConnectionState:true})}clearCache(path=""){return __awaiter(this,void 0,void 0,(function*(){if(this._cache){const value=path===""?{}:null;const cachePath=acebase_core_1.PathInfo.getChildPath(`${this.dbname}/cache`,path);return this._cache.db.api.set(cachePath,value,{suppress_events:true})}}))}updateCache(path="",cursor){return __awaiter(this,void 0,void 0,(function*(){if(!this._cache){throw new Error(`No cache database used`)}const cachePath=acebase_core_1.PathInfo.getChildPath(`${this.dbname}/cache`,path);const cacheApi=this._cache.db.api;const loadValue=cursor===null||typeof cursor==="undefined"||!(yield cacheApi.exists(cachePath));if(loadValue){const{value:value,context:context}=yield this.get(path,{cache_mode:"bypass"});return{path:path,used_cursor:cursor,new_cursor:context.acebase_cursor,loaded_value:true,changes:[]}}const{changes:changes,new_cursor:new_cursor}=yield this.getChanges({path:path,cursor:cursor});for(const ch of changes){const cachePath=acebase_core_1.PathInfo.getChildPath(`${this.dbname}/cache`,ch.path);const options={context:ch.context,suppress_events:false};if(ch.type==="update"){yield cacheApi.update(cachePath,ch.value,options)}else if(ch.type==="set"){yield cacheApi.set(cachePath,ch.value,options)}}return{path:path,used_cursor:cursor,new_cursor:new_cursor,loaded_value:false,changes:changes}}))}query(path,query,options={snapshots:false,cache_mode:"allow",monitor:{add:false,change:false,remove:false}}){return __awaiter(this,void 0,void 0,(function*(){const useCache=this.hasCache&&(options.cache_mode==="force"||options.cache_mode==="allow"&&!this.isConnected);if(useCache){const data=yield this.cache.db.api.query(acebase_core_1.PathInfo.getChildPath(`${this.dbname}/cache`,path),query,options);let{results:results,context:context}=data;const{stop:stop}=data;if(!("results"in data&&"context"in data)){console.warn(`Missing context from local query results. Update your acebase package`);results=data;context={}}context.acebase_origin="cache";delete context.acebase_cursor;return{results:results,context:context,stop:stop}}const request={query:query,options:options};if(options.monitor===true||typeof options.monitor==="object"&&(options.monitor.add||options.monitor.change||options.monitor.remove)){console.assert(typeof options.eventHandler==="function",`no eventHandler specified to handle realtime changes`);if(!this.socket){throw new Error(`Cannot create realtime query because websocket is not connected. Check your AceBaseClient network.realtime setting`)}request.query_id=acebase_core_1.ID.generate();request.client_id=this.socket.id;this._realtimeQueries[request.query_id]={query:query,options:options}}const reqData=JSON.stringify(acebase_core_1.Transport.serialize(request));try{const{data:data,context:context}=yield this._request({method:"POST",url:`${this.url}/query/${this.dbname}/${path}`,data:reqData,includeContext:true});const results=acebase_core_1.Transport.deserialize(data);context.acebase_origin="server";const stop=()=>__awaiter(this,void 0,void 0,(function*(){delete this._realtimeQueries[request.query_id];yield _websocketRequest(this.socket,"query-unsubscribe",{query_id:request.query_id},this.accessToken)}));return{results:results.list,context:context,stop:stop}}catch(err){throw err}}))}createIndex(path,key,options){return __awaiter(this,void 0,void 0,(function*(){if(options&&options.config&&Object.values(options.config).find((val=>typeof val==="function"))){throw new Error(`Cannot create an index with callback functions through a client. Move your code serverside`)}const version=this._serverVersion.split(".");if(version.length===3&&+version[0]>=1&&+version[1]>=10){const data=JSON.stringify({path:path,key:key,options:options});return yield this._request({method:"POST",url:`${this.url}/index/${this.dbname}/create`,data:data})}else{const data=JSON.stringify({action:"create",path:path,key:key,options:options});return yield this._request({method:"POST",url:`${this.url}/index/${this.dbname}`,data:data})}}))}getIndexes(){return this._request({url:`${this.url}/index/${this.dbname}`})}deleteIndex(fileName){return __awaiter(this,void 0,void 0,(function*(){const version=this._serverVersion.split(".");if(version.length===3&&+version[0]>=1&&+version[1]>=10){const data=JSON.stringify({fileName:fileName});return this._request({method:"POST",url:`${this.url}/index/${this.dbname}/delete`,data:data})}else{throw new Error(`not supported, requires acebase-server 1.10 or higher`)}}))}reflect(path,type,args){let url=`${this.url}/reflect/${this.dbname}/${path}?type=${type}`;if(typeof args==="object"){const query=Object.keys(args).map((key=>`${key}=${args[key]}`));if(query.length>0){url+=`&${query.join("&")}`}}return this._request({url:url})}export(path,write,options={format:"json",type_safe:true}){options.format="json";options.type_safe=options.type_safe!==false;const url=`${this.url}/export/${this.dbname}/${path}?format=${options.format}&type_safe=${options.type_safe?1:0}`;return this._request({url:url,dataReceivedCallback:chunk=>write(chunk)})}import(path,read,options={format:"json",suppress_events:false}){options.format="json";options.suppress_events=options.suppress_events===true;const url=`${this.url}/import/${this.dbname}/${path}?format=${options.format}&suppress_events=${options.suppress_events?1:0}`;return this._request({method:"POST",url:url,dataRequestCallback:length=>read(length)})}get serverPingUrl(){return`${this.url}/ping/${this.dbname}`}getServerInfo(){return __awaiter(this,void 0,void 0,(function*(){const info=yield this._request({url:`${this.url}/info/${this.dbname}`}).catch((err=>{if(!err.isNetworkError){this.debug.warn(`Could not get server info, update your acebase server version`)}return{version:"unknown",time:Date.now()}}));this._serverVersion=info.version;return info}))}setSchema(path,schema){if(schema!==null){schema=new acebase_core_1.SchemaDefinition(schema).text}const data=JSON.stringify({action:"set",path:path,schema:schema});return this._request({method:"POST",url:`${this.url}/schema/${this.dbname}`,data:data})}getSchema(path){return this._request({url:`${this.url}/schema/${this.dbname}/${path}`})}getSchemas(){return this._request({url:`${this.url}/schema/${this.dbname}`})}validateSchema(path,value,isUpdate){return __awaiter(this,void 0,void 0,(function*(){throw new Error(`Manual schema validation can only be used on standalone databases`)}))}}exports.WebApi=WebApi},{"./base64":4,"./errors":6,"./promise-timeout":9,"./request":10,"./request/error":11,"acebase-core":30,"socket.io-client":18}],3:[function(require,module,exports){"use strict";var __awaiter=this&&this.__awaiter||function(thisArg,_arguments,P,generator){function adopt(value){return value instanceof P?value:new P((function(resolve){resolve(value)}))}return new(P||(P=Promise))((function(resolve,reject){function fulfilled(value){try{step(generator.next(value))}catch(e){reject(e)}}function rejected(value){try{step(generator["throw"](value))}catch(e){reject(e)}}function step(result){result.done?resolve(result.value):adopt(result.value).then(fulfilled,rejected)}step((generator=generator.apply(thisArg,_arguments||[])).next())}))};Object.defineProperty(exports,"__esModule",{value:true});exports.AceBaseClientAuth=void 0;const user_1=require("./user");class AceBaseClientAuth{constructor(client,eventCallback){this.client=client;this.eventCallback=eventCallback;this.user=null;this.accessToken=null}signIn(username,password){return __awaiter(this,void 0,void 0,(function*(){if(!this.client.isReady){yield this.client.ready()}const details=yield this.client.api.signIn(username,password);if(this.user){this.eventCallback("signout",{source:"signin",user:this.user})}this.accessToken=details.accessToken;this.user=new user_1.AceBaseUser(details.user);this.eventCallback("signin",{source:"signin",user:this.user,accessToken:this.accessToken});return{user:this.user,accessToken:this.accessToken}}))}signInWithEmail(email,password){return __awaiter(this,void 0,void 0,(function*(){if(!this.client.isReady){yield this.client.ready()}const details=yield this.client.api.signInWithEmail(email,password);if(this.user){this.eventCallback("signout",{source:"email_signin",user:this.user})}this.accessToken=details.accessToken;this.user=new user_1.AceBaseUser(details.user);this.eventCallback("signin",{source:"email_signin",user:this.user,accessToken:this.accessToken});return{user:this.user,accessToken:this.accessToken}}))}signInWithToken(accessToken){return __awaiter(this,void 0,void 0,(function*(){if(!this.client.isReady){yield this.client.ready()}const details=yield this.client.api.signInWithToken(accessToken);if(this.user){this.eventCallback("signout",{source:"token_signin",user:this.user})}this.accessToken=details.accessToken;this.user=new user_1.AceBaseUser(details.user);this.eventCallback("signin",{source:"token_signin",user:this.user,accessToken:this.accessToken});return{user:this.user,accessToken:this.accessToken}}))}setAccessToken(accessToken){this.client.api.setAccessToken(accessToken)}startAuthProviderSignIn(providerName,callbackUrl,options){return __awaiter(this,void 0,void 0,(function*(){if(!this.client.isReady){yield this.client.ready()}const details=yield this.client.api.startAuthProviderSignIn(providerName,callbackUrl,options);return details.redirectUrl}))}finishAuthProviderSignIn(callbackResult){return __awaiter(this,void 0,void 0,(function*(){if(!this.client.isReady){yield this.client.ready()}const details=yield this.client.api.finishAuthProviderSignIn(callbackResult);const isOtherUser=!this.user||this.user.uid!==details.user.uid;isOtherUser&&this.eventCallback("signout",{source:"oauth_signin",user:this.user});this.accessToken=details.accessToken;this.user=new user_1.AceBaseUser(details.user);isOtherUser&&this.eventCallback("signin",{source:"oauth_signin",user:this.user,accessToken:this.accessToken});return{user:this.user,accessToken:this.accessToken,provider:details.provider}}))}refreshAuthProviderToken(providerName,refreshToken){return __awaiter(this,void 0,void 0,(function*(){if(!this.client.isReady){yield this.client.ready()}const details=yield this.client.api.refreshAuthProviderToken(providerName,refreshToken);return{provider:details.provider}}))}signInWithRedirect(providerName){return __awaiter(this,void 0,void 0,(function*(){if(typeof window==="undefined"){throw new Error(`signInWithRedirect can only be used within a browser context`)}const redirectUrl=yield this.startAuthProviderSignIn(providerName,window.location.href);window.location.href=redirectUrl}))}getRedirectResult(){return __awaiter(this,void 0,void 0,(function*(){if(typeof window==="undefined"){throw new Error(`getRedirectResult can only be used within a browser context`)}const match=window.location.search.match(/[?&]result=(.*?)(?:&|$)/);const callbackResult=match&&decodeURIComponent(match[1]);if(!callbackResult){return null}return yield this.finishAuthProviderSignIn(callbackResult)}))}signOut(options){return __awaiter(this,void 0,void 0,(function*(){if(!this.client.isReady){yield this.client.ready()}else if(!this.user){throw{code:"not_signed_in",message:"Not signed in!"}}if(this.client.connected){yield this.client.api.signOut(options)}this.accessToken=null;const user=this.user;this.user=null;this.eventCallback("signout",{source:"signout",user:user})}))}changePassword(oldPassword,newPassword){return __awaiter(this,void 0,void 0,(function*(){if(!this.client.isReady){yield this.client.ready()}if(!this.user){throw{code:"not_signed_in",message:"Not signed in!"}}const result=yield this.client.api.changePassword(this.user.uid,oldPassword,newPassword);this.accessToken=result.accessToken;this.eventCallback("signin",{source:"password_change",user:this.user,accessToken:this.accessToken});return{accessToken:result.accessToken}}))}forgotPassword(email){return __awaiter(this,void 0,void 0,(function*(){if(!this.client.isReady){yield this.client.ready()}yield this.client.api.forgotPassword(email)}))}resetPassword(resetCode,newPassword){return __awaiter(this,void 0,void 0,(function*(){if(!this.client.isReady){yield this.client.ready()}yield this.client.api.resetPassword(resetCode,newPassword)}))}verifyEmailAddress(verificationCode){return __awaiter(this,void 0,void 0,(function*(){if(!this.client.isReady){yield this.client.ready()}yield this.client.api.verifyEmailAddress(verificationCode)}))}updateUserDetails(details){return __awaiter(this,void 0,void 0,(function*(){if(!this.client.isReady){yield this.client.ready()}if(!this.user){throw{code:"not_signed_in",message:"Not signed in!"}}if(typeof details!=="object"){throw{code:"invalid_details",message:"details must be an object"}}const result=yield this.client.api.updateUserDetails(details);if(!this.user){return{user:null}}for(const key of Object.keys(result.user)){this.user[key]=result.user[key]}return{user:this.user}}))}changeUsername(newUsername){return __awaiter(this,void 0,void 0,(function*(){return this.updateUserDetails({username:newUsername})}))}changeDisplayName(newName){return __awaiter(this,void 0,void 0,(function*(){return this.updateUserDetails({display_name:newName})}))}changeEmail(newEmail){return __awaiter(this,void 0,void 0,(function*(){return this.updateUserDetails({email:newEmail})}))}changePicture(newPicture){return __awaiter(this,void 0,void 0,(function*(){return yield this.updateUserDetails({picture:newPicture})}))}updateUserSettings(settings){return __awaiter(this,void 0,void 0,(function*(){return yield this.updateUserDetails({settings:settings})}))}signUp(details){return __awaiter(this,void 0,void 0,(function*(){if(!details.username&&!details.email){throw{code:"invalid_details",message:"No username or email set"}}if(!details.password){throw{code:"invalid_details",message:"No password given"}}if(!this.client.isReady){yield this.client.ready()}const isAdmin=this.user&&this.user.uid==="admin";if(this.user&&!isAdmin){const user=this.user;this.user=null;this.eventCallback("signout",{source:"signup",user:user})}const result=yield this.client.api.signUp(details,!isAdmin);if(isAdmin){return{user:result.user}}else{this.accessToken=result.accessToken;this.user=new user_1.AceBaseUser(result.user);this.eventCallback("signin",{source:"signup",user:this.user,accessToken:this.accessToken});return{user:this.user,accessToken:this.accessToken}}}))}deleteAccount(uid){return __awaiter(this,void 0,void 0,(function*(){if(!this.client.isReady){yield this.client.ready()}if(!this.user){throw{code:"not_signed_in",message:"Not signed in!"}}if(uid&&this.user.uid!=="admin"){throw{code:"not_admin",message:"Cannot remove other accounts than signed into account, unless you are admin"}}const deleteUid=uid||this.user.uid;if(deleteUid==="admin"){throw{code:"not_allowed",message:"Cannot remove admin user"}}const signOut=this.user.uid!=="admin";const result=yield this.client.api.deleteAccount(deleteUid,signOut);if(signOut){this.accessToken=null;const user=this.user;this.user=null;this.eventCallback("signout",{source:"delete_account",user:user})}}))}}exports.AceBaseClientAuth=AceBaseClientAuth},{"./user":13}],4:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.decode=exports.encode=void 0;function encode(str){return btoa(unescape(encodeURIComponent(str)))}exports.encode=encode;function decode(base64){return decodeURIComponent(escape(atob(base64)))}exports.decode=decode},{}],5:[function(require,module,exports){"use strict";var __createBinding=this&&this.__createBinding||(Object.create?function(o,m,k,k2){if(k2===undefined)k2=k;var desc=Object.getOwnPropertyDescriptor(m,k);if(!desc||("get"in desc?!m.__esModule:desc.writable||desc.configurable)){desc={enumerable:true,get:function(){return m[k]}}}Object.defineProperty(o,k2,desc)}: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});const acebaseclient=require("./index");window.acebaseclient=acebaseclient;window.AceBaseClient=acebaseclient.AceBaseClient;__exportStar(require("./index"),exports)},{"./index":7}],6:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.CachedValueUnavailableError=void 0;class CachedValueUnavailableError extends Error{constructor(path,message){super(message||`Value for path "/${path}" is not available in cache`);this.path=path}}exports.CachedValueUnavailableError=CachedValueUnavailableError},{}],7:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.CachedValueUnavailableError=exports.ServerDate=exports.AceBaseClient=exports.Transport=exports.PartialArray=exports.ObjectCollection=exports.proxyAccess=exports.ID=exports.TypeMappings=exports.PathReference=exports.EventSubscription=exports.DataSnapshot=exports.DataReference=void 0;var acebase_core_1=require("acebase-core");Object.defineProperty(exports,"DataReference",{enumerable:true,get:function(){return acebase_core_1.DataReference}});Object.defineProperty(exports,"DataSnapshot",{enumerable:true,get:function(){return acebase_core_1.DataSnapshot}});Object.defineProperty(exports,"EventSubscription",{enumerable:true,get:function(){return acebase_core_1.EventSubscription}});Object.defineProperty(exports,"PathReference",{enumerable:true,get:function(){return acebase_core_1.PathReference}});Object.defineProperty(exports,"TypeMappings",{enumerable:true,get:function(){return acebase_core_1.TypeMappings}});Object.defineProperty(exports,"ID",{enumerable:true,get:function(){return acebase_core_1.ID}});Object.defineProperty(exports,"proxyAccess",{enumerable:true,get:function(){return acebase_core_1.proxyAccess}});Object.defineProperty(exports,"ObjectCollection",{enumerable:true,get:function(){return acebase_core_1.ObjectCollection}});Object.defineProperty(exports,"PartialArray",{enumerable:true,get:function(){return acebase_core_1.PartialArray}});Object.defineProperty(exports,"Transport",{enumerable:true,get:function(){return acebase_core_1.Transport}});var acebase_client_1=require("./acebase-client");Object.defineProperty(exports,"AceBaseClient",{enumerable:true,get:function(){return acebase_client_1.AceBaseClient}});var server_date_1=require("./server-date");Object.defineProperty(exports,"ServerDate",{enumerable:true,get:function(){return server_date_1.ServerDate}});var errors_1=require("./errors");Object.defineProperty(exports,"CachedValueUnavailableError",{enumerable:true,get:function(){return errors_1.CachedValueUnavailableError}})},{"./acebase-client":1,"./errors":6,"./server-date":12,"acebase-core":30}],8:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.default=performance},{}],9:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.promiseTimeout=exports.PromiseTimeoutError=void 0;class PromiseTimeoutError extends Error{}exports.PromiseTimeoutError=PromiseTimeoutError;function promiseTimeout(promise,ms,comment){return new Promise(((resolve,reject)=>{const timeout=setTimeout((()=>reject(new PromiseTimeoutError(`Promise ${comment?`"${comment}" `:""}timed out after ${ms}ms`))),ms);function success(result){clearTimeout(timeout);resolve(result)}promise.then(success).catch(reject)}))}exports.promiseTimeout=promiseTimeout},{}],10:[function(require,module,exports){"use strict";var __awaiter=this&&this.__awaiter||function(thisArg,_arguments,P,generator){function adopt(value){return value instanceof P?value:new P((function(resolve){resolve(value)}))}return new(P||(P=Promise))((function(resolve,reject){function fulfilled(value){try{step(generator.next(value))}catch(e){reject(e)}}function rejected(value){try{step(generator["throw"](value))}catch(e){reject(e)}}function step(result){result.done?resolve(result.value):adopt(result.value).then(fulfilled,rejected)}step((generator=generator.apply(thisArg,_arguments||[])).next())}))};Object.defineProperty(exports,"__esModule",{value:true});const error_1=require("./error");function request(method,url,options={accessToken:null,data:null,dataReceivedCallback:null,dataRequestCallback:null,context:null}){var _a;return __awaiter(this,void 0,void 0,(function*(){let postData=options.data;if(typeof postData==="undefined"||postData===null){postData=""}else if(typeof postData==="object"){postData=JSON.stringify(postData)}const headers={"AceBase-Context":JSON.stringify(options.context||null)};const init={method:method,headers:headers,body:undefined};if(typeof options.dataRequestCallback==="function"){headers["Content-Type"]="text/plain";const supportsStreaming=false;if(supportsStreaming){let canceled=false;init.body=new ReadableStream({pull(controller){var _a;return __awaiter(this,void 0,void 0,(function*(){const chunkSize=controller.desiredSize||1024*16;const chunk=yield(_a=options.dataRequestCallback)===null||_a===void 0?void 0:_a.call(options,chunkSize);if(canceled||[null,""].includes(chunk)){controller.close()}else{controller.enqueue(chunk)}}))},start(controller){return __awaiter(this,void 0,void 0,(function*(){}))},cancel(){canceled=true}})}else{postData="";const chunkSize=1024*512;let chunk;while(chunk=yield options.dataRequestCallback(chunkSize)){postData+=chunk}init.body=postData}}else if(postData.length>0){headers["Content-Type"]="application/json";init.body=postData}if(options.accessToken){headers["Authorization"]=`Bearer ${options.accessToken}`}const request={url:url,method:method,headers:headers,body:undefined};const res=yield fetch(request.url,init).catch((err=>{throw new error_1.AceBaseRequestError(request,null,"fetch_failed",err.message)}));let data="";if(typeof options.dataReceivedCallback==="function"){const reader=(_a=res.body)===null||_a===void 0?void 0:_a.getReader();yield new Promise(((resolve,reject)=>{(function readNext(){var _a;return __awaiter(this,void 0,void 0,(function*(){try{const result=yield reader===null||reader===void 0?void 0:reader.read();(_a=options.dataReceivedCallback)===null||_a===void 0?void 0:_a.call(options,result===null||result===void 0?void 0:result.value);if(result===null||result===void 0?void 0:result.done){return resolve()}readNext()}catch(err){reader===null||reader===void 0?void 0:reader.cancel("error");reject(err)}}))})()}))}else{data=yield res.text()}const isJSON=data[0]==="{"||data[0]==="[";if(res.status===200){const contextHeader=res.headers.get("AceBase-Context");let context;if(contextHeader&&contextHeader[0]==="{"){context=JSON.parse(contextHeader)}else{context={}}if(isJSON){data=JSON.parse(data)}return{context:context,data:data}}else{request.body=postData;const response={statusCode:res.status,statusMessage:res.statusText,headers:res.headers,body:data};let code=res.status,message=res.statusText;if(isJSON){const err=JSON.parse(data);if(err.code){code=err.code}if(err.message){message=err.message}}throw new error_1.AceBaseRequestError(request,response,code,message)}}))}exports.default=request},{"./error":11}],11:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.NOT_CONNECTED_ERROR_MESSAGE=exports.AceBaseRequestError=void 0;class AceBaseRequestError extends Error{constructor(request,response,code,message="unknown error"){super(message);this.request=request;this.response=response;this.code=code;this.message=message}get isNetworkError(){return this.response===null}}exports.AceBaseRequestError=AceBaseRequestError;exports.NOT_CONNECTED_ERROR_MESSAGE="remote database is not connected"},{}],12:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.ServerDate=exports.setServerBias=void 0;const acebase_core_1=require("acebase-core");const performance_1=require("./performance");const time={serverBias:0,localBias:0,lastTime:Date.now(),lastPerf:performance_1.default.now(),get bias(){return this.serverBias+this.localBias}};function biasChanged(){console.log(`Bias changed. server bias = ${time.serverBias}ms, local bias = ${time.localBias}ms`);acebase_core_1.ID.timeBias=time.bias}const interval=1e4;function checkLocalTime(){const now=Date.now(),perf=performance_1.default.now(),msPassed=perf-time.lastPerf,expected=time.lastTime+Math.round(msPassed),diff=expected-now;if(Math.abs(diff)>1){console.log(`Local time changed. diff = ${diff}ms`);time.localBias+=diff;biasChanged()}time.lastTime=now;time.lastPerf=perf;scheduleLocalTimeCheck()}function scheduleLocalTimeCheck(){const timeout=setTimeout(checkLocalTime,interval);timeout.unref&&timeout.unref()}scheduleLocalTimeCheck();function setServerBias(bias){if(typeof bias==="number"){time.serverBias=bias;time.localBias=0;biasChanged()}}exports.setServerBias=setServerBias;class ServerDate extends Date{constructor(){const biasedTime=Date.now()+time.bias;super(biasedTime)}}exports.ServerDate=ServerDate},{"./performance":8,"acebase-core":30}],13:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.AceBaseUser=void 0;class AceBaseUser{constructor(user){var _a,_b,_c;Object.assign(this,user);if(!user.uid){throw new Error("User details is missing required uid field")}this.uid=user.uid;this.displayName=(_a=user.displayName)!==null&&_a!==void 0?_a:"unknown";this.created=(_b=user.created)!==null&&_b!==void 0?_b:new Date(0);this.settings=(_c=user.settings)!==null&&_c!==void 0?_c:{}}}exports.AceBaseUser=AceBaseUser},{}],14:[function(require,module,exports){"use strict";exports.byteLength=byteLength;exports.toByteArray=toByteArray;exports.fromByteArray=fromByteArray;var lookup=[];var revLookup=[];var Arr=typeof Uint8Array!=="undefined"?Uint8Array:Array;var code="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";for(var i=0,len=code.length;i0){throw new Error("Invalid string. Length must be a multiple of 4")}var validLen=b64.indexOf("=");if(validLen===-1)validLen=len;var placeHoldersLen=validLen===len?0:4-validLen%4;return[validLen,placeHoldersLen]}function byteLength(b64){var lens=getLens(b64);var validLen=lens[0];var placeHoldersLen=lens[1];return(validLen+placeHoldersLen)*3/4-placeHoldersLen}function _byteLength(b64,validLen,placeHoldersLen){return(validLen+placeHoldersLen)*3/4-placeHoldersLen}function toByteArray(b64){var tmp;var lens=getLens(b64);var validLen=lens[0];var placeHoldersLen=lens[1];var arr=new Arr(_byteLength(b64,validLen,placeHoldersLen));var curByte=0;var len=placeHoldersLen>0?validLen-4:validLen;var i;for(i=0;i>16&255;arr[curByte++]=tmp>>8&255;arr[curByte++]=tmp&255}if(placeHoldersLen===2){tmp=revLookup[b64.charCodeAt(i)]<<2|revLookup[b64.charCodeAt(i+1)]>>4;arr[curByte++]=tmp&255}if(placeHoldersLen===1){tmp=revLookup[b64.charCodeAt(i)]<<10|revLookup[b64.charCodeAt(i+1)]<<4|revLookup[b64.charCodeAt(i+2)]>>2;arr[curByte++]=tmp>>8&255;arr[curByte++]=tmp&255}return arr}function tripletToBase64(num){return lookup[num>>18&63]+lookup[num>>12&63]+lookup[num>>6&63]+lookup[num&63]}function encodeChunk(uint8,start,end){var tmp;var output=[];for(var i=start;ilen2?len2:i+maxChunkLength))}if(extraBytes===1){tmp=uint8[len-1];parts.push(lookup[tmp>>2]+lookup[tmp<<4&63]+"==")}else if(extraBytes===2){tmp=(uint8[len-2]<<8)+uint8[len-1];parts.push(lookup[tmp>>10]+lookup[tmp>>4&63]+lookup[tmp<<2&63]+"=")}return parts.join("")}},{}],15:[function(require,module,exports){},{}],16:[function(require,module,exports){(function(Buffer){(function(){ /*! * The buffer module from node.js, for the browser. * @@ -14,4 +14,4 @@ exports.read=function(buffer,offset,isLE,mLen,nBytes){var e,m;var eLen=nBytes*8- * (c) 2014-2021 Guillermo Rauch * Released under the MIT License. */ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.io=e():t.io=e()}(this,(function(){return function(t){function e(n){if(r[n])return r[n].exports;var o=r[n]={exports:{},id:n,loaded:!1};return t[n].call(o.exports,o,o.exports,e),o.loaded=!0,o.exports}var r={};return e.m=t,e.c=r,e.p="",e(0)}([function(t,e,r){"use strict";function n(t,e){"object"===("undefined"==typeof t?"undefined":o(t))&&(e=t,t=void 0),e=e||{};var r,n=i(t),s=n.source,p=n.id,h=n.path,u=c[p]&&h in c[p].nsps,f=e.forceNew||e["force new connection"]||!1===e.multiplex||u;return f?r=a(s,e):(c[p]||(c[p]=a(s,e)),r=c[p]),n.query&&!e.query&&(e.query=n.query),r.socket(n.path,e)}var o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i=r(1),s=r(4),a=r(9);r(3)("socket.io-client");t.exports=e=n;var c=e.managers={};e.protocol=s.protocol,e.connect=n,e.Manager=r(9),e.Socket=r(34)},function(t,e,r){"use strict";function n(t,e){var r=t;e=e||"undefined"!=typeof location&&location,null==t&&(t=e.protocol+"//"+e.host),"string"==typeof t&&("/"===t.charAt(0)&&(t="/"===t.charAt(1)?e.protocol+t:e.host+t),/^(https?|wss?):\/\//.test(t)||(t="undefined"!=typeof e?e.protocol+"//"+t:"https://"+t),r=o(t)),r.port||(/^(http|ws)$/.test(r.protocol)?r.port="80":/^(http|ws)s$/.test(r.protocol)&&(r.port="443")),r.path=r.path||"/";var n=r.host.indexOf(":")!==-1,i=n?"["+r.host+"]":r.host;return r.id=r.protocol+"://"+i+":"+r.port,r.href=r.protocol+"://"+i+(e&&e.port===r.port?"":":"+r.port),r}var o=r(2);r(3)("socket.io-client:url");t.exports=n},function(t,e){function r(t,e){var r=/\/{2,9}/g,n=e.replace(r,"/").split("/");return"/"!=e.substr(0,1)&&0!==e.length||n.splice(0,1),"/"==e.substr(e.length-1,1)&&n.splice(n.length-1,1),n}function n(t,e){var r={};return e.replace(/(?:^|&)([^&=]*)=?([^&]*)/g,(function(t,e,n){e&&(r[e]=n)})),r}var o=/^(?:(?![^:@]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/,i=["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"];t.exports=function(t){var e=t,s=t.indexOf("["),a=t.indexOf("]");s!=-1&&a!=-1&&(t=t.substring(0,s)+t.substring(s,a).replace(/:/g,";")+t.substring(a,t.length));for(var c=o.exec(t||""),p={},h=14;h--;)p[i[h]]=c[h]||"";return s!=-1&&a!=-1&&(p.source=e,p.host=p.host.substring(1,p.host.length-1).replace(/;/g,":"),p.authority=p.authority.replace("[","").replace("]","").replace(/;/g,":"),p.ipv6uri=!0),p.pathNames=r(p,p.path),p.queryKey=n(p,p.query),p}},function(t,e){"use strict";t.exports=function(){return function(){}}},function(t,e,r){function n(){}function o(t){var r=""+t.type;if(e.BINARY_EVENT!==t.type&&e.BINARY_ACK!==t.type||(r+=t.attachments+"-"),t.nsp&&"/"!==t.nsp&&(r+=t.nsp+","),null!=t.id&&(r+=t.id),null!=t.data){var n=i(t.data);if(n===!1)return m;r+=n}return r}function i(t){try{return JSON.stringify(t)}catch(t){return!1}}function s(t,e){function r(t){var r=l.deconstructPacket(t),n=o(r.packet),i=r.buffers;i.unshift(n),e(i)}l.removeBlobs(t,r)}function a(){this.reconstructor=null}function c(t){var r=0,n={type:Number(t.charAt(0))};if(null==e.types[n.type])return u("unknown packet type "+n.type);if(e.BINARY_EVENT===n.type||e.BINARY_ACK===n.type){for(var o="";"-"!==t.charAt(++r)&&(o+=t.charAt(r),r!=t.length););if(o!=Number(o)||"-"!==t.charAt(r))throw new Error("Illegal attachments");n.attachments=Number(o)}if("/"===t.charAt(r+1))for(n.nsp="";++r;){var i=t.charAt(r);if(","===i)break;if(n.nsp+=i,r===t.length)break}else n.nsp="/";var s=t.charAt(r+1);if(""!==s&&Number(s)==s){for(n.id="";++r;){var i=t.charAt(r);if(null==i||Number(i)!=i){--r;break}if(n.id+=t.charAt(r),r===t.length)break}n.id=Number(n.id)}if(t.charAt(++r)){var a=p(t.substr(r)),c=a!==!1&&(n.type===e.ERROR||d(a));if(!c)return u("invalid payload");n.data=a}return n}function p(t){try{return JSON.parse(t)}catch(t){return!1}}function h(t){this.reconPack=t,this.buffers=[]}function u(t){return{type:e.ERROR,data:"parser error: "+t}}var f=(r(3)("socket.io-parser"),r(5)),l=r(6),d=r(7),y=r(8);e.protocol=4,e.types=["CONNECT","DISCONNECT","EVENT","ACK","ERROR","BINARY_EVENT","BINARY_ACK"],e.CONNECT=0,e.DISCONNECT=1,e.EVENT=2,e.ACK=3,e.ERROR=4,e.BINARY_EVENT=5,e.BINARY_ACK=6,e.Encoder=n,e.Decoder=a;var m=e.ERROR+'"encode error"';n.prototype.encode=function(t,r){if(e.BINARY_EVENT===t.type||e.BINARY_ACK===t.type)s(t,r);else{var n=o(t);r([n])}},f(a.prototype),a.prototype.add=function(t){var r;if("string"==typeof t)r=c(t),e.BINARY_EVENT===r.type||e.BINARY_ACK===r.type?(this.reconstructor=new h(r),0===this.reconstructor.reconPack.attachments&&this.emit("decoded",r)):this.emit("decoded",r);else{if(!y(t)&&!t.base64)throw new Error("Unknown type: "+t);if(!this.reconstructor)throw new Error("got binary data when not reconstructing a packet");r=this.reconstructor.takeBinaryData(t),r&&(this.reconstructor=null,this.emit("decoded",r))}},a.prototype.destroy=function(){this.reconstructor&&this.reconstructor.finishedReconstruction()},h.prototype.takeBinaryData=function(t){if(this.buffers.push(t),this.buffers.length===this.reconPack.attachments){var e=l.reconstructPacket(this.reconPack,this.buffers);return this.finishedReconstruction(),e}return null},h.prototype.finishedReconstruction=function(){this.reconPack=null,this.buffers=[]}},function(t,e,r){function n(t){if(t)return o(t)}function o(t){for(var e in n.prototype)t[e]=n.prototype[e];return t}t.exports=n,n.prototype.on=n.prototype.addEventListener=function(t,e){return this._callbacks=this._callbacks||{},(this._callbacks["$"+t]=this._callbacks["$"+t]||[]).push(e),this},n.prototype.once=function(t,e){function r(){this.off(t,r),e.apply(this,arguments)}return r.fn=e,this.on(t,r),this},n.prototype.off=n.prototype.removeListener=n.prototype.removeAllListeners=n.prototype.removeEventListener=function(t,e){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var r=this._callbacks["$"+t];if(!r)return this;if(1==arguments.length)return delete this._callbacks["$"+t],this;for(var n,o=0;o0&&!this.encoding){var t=this.packetBuffer.shift();this.packet(t)}},n.prototype.cleanup=function(){for(var t=this.subs.length,e=0;e=this._reconnectionAttempts)this.backoff.reset(),this.emitAll("reconnect_failed"),this.reconnecting=!1;else{var e=this.backoff.duration();this.reconnecting=!0;var r=setTimeout((function(){t.skipReconnect||(t.emitAll("reconnect_attempt",t.backoff.attempts),t.emitAll("reconnecting",t.backoff.attempts),t.skipReconnect||t.open((function(e){e?(t.reconnecting=!1,t.reconnect(),t.emitAll("reconnect_error",e.data)):t.onreconnect()})))}),e);this.subs.push({destroy:function(){clearTimeout(r)}})}},n.prototype.onreconnect=function(){var t=this.backoff.attempts;this.reconnecting=!1,this.backoff.reset(),this.updateSocketIds(),this.emitAll("reconnect",t)}},function(t,e,r){t.exports=r(11),t.exports.parser=r(19)},function(t,e,r){function n(t,e){return this instanceof n?(e=e||{},t&&"object"==typeof t&&(e=t,t=null),t?(t=p(t),e.hostname=t.host,e.secure="https"===t.protocol||"wss"===t.protocol,e.port=t.port,t.query&&(e.query=t.query)):e.host&&(e.hostname=p(e.host).host),this.secure=null!=e.secure?e.secure:"undefined"!=typeof location&&"https:"===location.protocol,e.hostname&&!e.port&&(e.port=this.secure?"443":"80"),this.agent=e.agent||!1,this.hostname=e.hostname||("undefined"!=typeof location?location.hostname:"localhost"),this.port=e.port||("undefined"!=typeof location&&location.port?location.port:this.secure?443:80),this.query=e.query||{},"string"==typeof this.query&&(this.query=h.decode(this.query)),this.upgrade=!1!==e.upgrade,this.path=(e.path||"/engine.io").replace(/\/$/,"")+"/",this.forceJSONP=!!e.forceJSONP,this.jsonp=!1!==e.jsonp,this.forceBase64=!!e.forceBase64,this.enablesXDR=!!e.enablesXDR,this.withCredentials=!1!==e.withCredentials,this.timestampParam=e.timestampParam||"t",this.timestampRequests=e.timestampRequests,this.transports=e.transports||["polling","websocket"],this.transportOptions=e.transportOptions||{},this.readyState="",this.writeBuffer=[],this.prevBufferLen=0,this.policyPort=e.policyPort||843,this.rememberUpgrade=e.rememberUpgrade||!1,this.binaryType=null,this.onlyBinaryUpgrades=e.onlyBinaryUpgrades,this.perMessageDeflate=!1!==e.perMessageDeflate&&(e.perMessageDeflate||{}),!0===this.perMessageDeflate&&(this.perMessageDeflate={}),this.perMessageDeflate&&null==this.perMessageDeflate.threshold&&(this.perMessageDeflate.threshold=1024),this.pfx=e.pfx||null,this.key=e.key||null,this.passphrase=e.passphrase||null,this.cert=e.cert||null,this.ca=e.ca||null,this.ciphers=e.ciphers||null,this.rejectUnauthorized=void 0===e.rejectUnauthorized||e.rejectUnauthorized,this.forceNode=!!e.forceNode,this.isReactNative="undefined"!=typeof navigator&&"string"==typeof navigator.product&&"reactnative"===navigator.product.toLowerCase(),("undefined"==typeof self||this.isReactNative)&&(e.extraHeaders&&Object.keys(e.extraHeaders).length>0&&(this.extraHeaders=e.extraHeaders),e.localAddress&&(this.localAddress=e.localAddress)),this.id=null,this.upgrades=null,this.pingInterval=null,this.pingTimeout=null,this.pingIntervalTimer=null,this.pingTimeoutTimer=null,void this.open()):new n(t,e)}function o(t){var e={};for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r]);return e}var i=r(12),s=r(5),a=(r(3)("engine.io-client:socket"),r(33)),c=r(19),p=r(2),h=r(27);t.exports=n,n.priorWebsocketSuccess=!1,s(n.prototype),n.protocol=c.protocol,n.Socket=n,n.Transport=r(18),n.transports=r(12),n.parser=r(19),n.prototype.createTransport=function(t){var e=o(this.query);e.EIO=c.protocol,e.transport=t;var r=this.transportOptions[t]||{};this.id&&(e.sid=this.id);var n=new i[t]({query:e,socket:this,agent:r.agent||this.agent,hostname:r.hostname||this.hostname,port:r.port||this.port,secure:r.secure||this.secure,path:r.path||this.path,forceJSONP:r.forceJSONP||this.forceJSONP,jsonp:r.jsonp||this.jsonp,forceBase64:r.forceBase64||this.forceBase64,enablesXDR:r.enablesXDR||this.enablesXDR,withCredentials:r.withCredentials||this.withCredentials,timestampRequests:r.timestampRequests||this.timestampRequests,timestampParam:r.timestampParam||this.timestampParam,policyPort:r.policyPort||this.policyPort,pfx:r.pfx||this.pfx,key:r.key||this.key,passphrase:r.passphrase||this.passphrase,cert:r.cert||this.cert,ca:r.ca||this.ca,ciphers:r.ciphers||this.ciphers,rejectUnauthorized:r.rejectUnauthorized||this.rejectUnauthorized,perMessageDeflate:r.perMessageDeflate||this.perMessageDeflate,extraHeaders:r.extraHeaders||this.extraHeaders,forceNode:r.forceNode||this.forceNode,localAddress:r.localAddress||this.localAddress,requestTimeout:r.requestTimeout||this.requestTimeout,protocols:r.protocols||void 0,isReactNative:this.isReactNative});return n},n.prototype.open=function(){var t;if(this.rememberUpgrade&&n.priorWebsocketSuccess&&this.transports.indexOf("websocket")!==-1)t="websocket";else{if(0===this.transports.length){var e=this;return void setTimeout((function(){e.emit("error","No transports available")}),0)}t=this.transports[0]}this.readyState="opening";try{t=this.createTransport(t)}catch(t){return this.transports.shift(),void this.open()}t.open(),this.setTransport(t)},n.prototype.setTransport=function(t){var e=this;this.transport&&this.transport.removeAllListeners(),this.transport=t,t.on("drain",(function(){e.onDrain()})).on("packet",(function(t){e.onPacket(t)})).on("error",(function(t){e.onError(t)})).on("close",(function(){e.onClose("transport close")}))},n.prototype.probe=function(t){function e(){if(u.onlyBinaryUpgrades){var t=!this.supportsBinary&&u.transport.supportsBinary;h=h||t}h||(p.send([{type:"ping",data:"probe"}]),p.once("packet",(function(t){if(!h)if("pong"===t.type&&"probe"===t.data){if(u.upgrading=!0,u.emit("upgrading",p),!p)return;n.priorWebsocketSuccess="websocket"===p.name,u.transport.pause((function(){h||"closed"!==u.readyState&&(c(),u.setTransport(p),p.send([{type:"upgrade"}]),u.emit("upgrade",p),p=null,u.upgrading=!1,u.flush())}))}else{var e=new Error("probe error");e.transport=p.name,u.emit("upgradeError",e)}})))}function r(){h||(h=!0,c(),p.close(),p=null)}function o(t){var e=new Error("probe error: "+t);e.transport=p.name,r(),u.emit("upgradeError",e)}function i(){o("transport closed")}function s(){o("socket closed")}function a(t){p&&t.name!==p.name&&r()}function c(){p.removeListener("open",e),p.removeListener("error",o),p.removeListener("close",i),u.removeListener("close",s),u.removeListener("upgrading",a)}var p=this.createTransport(t,{probe:1}),h=!1,u=this;n.priorWebsocketSuccess=!1,p.once("open",e),p.once("error",o),p.once("close",i),this.once("close",s),this.once("upgrading",a),p.open()},n.prototype.onOpen=function(){if(this.readyState="open",n.priorWebsocketSuccess="websocket"===this.transport.name,this.emit("open"),this.flush(),"open"===this.readyState&&this.upgrade&&this.transport.pause)for(var t=0,e=this.upgrades.length;t1?{type:b[o],data:t.substring(1)}:{type:b[o]}:k}var i=new Uint8Array(t),o=i[0],s=f(t,1);return w&&"blob"===r&&(s=new w([s])),{type:b[o],data:s}},e.decodeBase64Packet=function(t,e){var r=b[t.charAt(0)];if(!p)return{type:r,data:{base64:!0,data:t.substr(1)}};var n=p.decode(t.substr(1));return"blob"===e&&w&&(n=new w([n])),{type:r,data:n}},e.encodePayload=function(t,r,n){function o(t){return t.length+":"+t}function i(t,n){e.encodePacket(t,!!s&&r,!1,(function(t){n(null,o(t))}))}"function"==typeof r&&(n=r,r=null);var s=u(t);return r&&s?w&&!g?e.encodePayloadAsBlob(t,n):e.encodePayloadAsArrayBuffer(t,n):t.length?void c(t,i,(function(t,e){return n(e.join(""))})):n("0:")},e.decodePayload=function(t,r,n){if("string"!=typeof t)return e.decodePayloadAsBinary(t,r,n);"function"==typeof r&&(n=r,r=null);var o;if(""===t)return n(k,0,1);for(var i,s,a="",c=0,p=t.length;c0;){for(var s=new Uint8Array(o),a=0===s[0],c="",p=1;255!==s[p];p++){if(c.length>310)return n(k,0,1);c+=s[p]}o=f(o,2+c.length),c=parseInt(c);var h=f(o,0,c);if(a)try{h=String.fromCharCode.apply(null,new Uint8Array(h))}catch(t){var u=new Uint8Array(h);h="";for(var p=0;pn&&(r=n),e>=n||e>=r||0===n)return new ArrayBuffer(0);for(var o=new Uint8Array(t),i=new Uint8Array(r-e),s=e,a=0;s=55296&&e<=56319&&o65535&&(e-=65536,o+=d(e>>>10&1023|55296),e=56320|1023&e),o+=d(e);return o}function o(t,e){if(t>=55296&&t<=57343){if(e)throw Error("Lone surrogate U+"+t.toString(16).toUpperCase()+" is not a scalar value");return!1}return!0}function i(t,e){return d(t>>e&63|128)}function s(t,e){if(0==(4294967168&t))return d(t);var r="";return 0==(4294965248&t)?r=d(t>>6&31|192):0==(4294901760&t)?(o(t,e)||(t=65533),r=d(t>>12&15|224),r+=i(t,6)):0==(4292870144&t)&&(r=d(t>>18&7|240),r+=i(t,12),r+=i(t,6)),r+=d(63&t|128)}function a(t,e){e=e||{};for(var n,o=!1!==e.strict,i=r(t),a=i.length,c=-1,p="";++c=f)throw Error("Invalid byte index");var t=255&u[l];if(l++,128==(192&t))return 63&t;throw Error("Invalid continuation byte")}function p(t){var e,r,n,i,s;if(l>f)throw Error("Invalid byte index");if(l==f)return!1;if(e=255&u[l],l++,0==(128&e))return e;if(192==(224&e)){if(r=c(),s=(31&e)<<6|r,s>=128)return s;throw Error("Invalid continuation byte")}if(224==(240&e)){if(r=c(),n=c(),s=(15&e)<<12|r<<6|n,s>=2048)return o(s,t)?s:65533;throw Error("Invalid continuation byte")}if(240==(248&e)&&(r=c(),n=c(),i=c(),s=(7&e)<<18|r<<12|n<<6|i,s>=65536&&s<=1114111))return s;throw Error("Invalid UTF-8 detected")}function h(t,e){e=e||{};var o=!1!==e.strict;u=r(t),f=u.length,l=0;for(var i,s=[];(i=p(o))!==!1;)s.push(i);return n(s)}/*! https://mths.be/utf8js v2.1.2 by @mathias */var u,f,l,d=String.fromCharCode;t.exports={version:"2.1.2",encode:a,decode:h}},function(t,e){!function(t){"use strict";e.encode=function(e){var r,n=new Uint8Array(e),o=n.length,i="";for(r=0;r>2],i+=t[(3&n[r])<<4|n[r+1]>>4],i+=t[(15&n[r+1])<<2|n[r+2]>>6],i+=t[63&n[r+2]];return o%3===2?i=i.substring(0,i.length-1)+"=":o%3===1&&(i=i.substring(0,i.length-2)+"=="),i},e.decode=function(e){var r,n,o,i,s,a=.75*e.length,c=e.length,p=0;"="===e[e.length-1]&&(a--,"="===e[e.length-2]&&a--);var h=new ArrayBuffer(a),u=new Uint8Array(h);for(r=0;r>4,u[p++]=(15&o)<<4|i>>2,u[p++]=(3&i)<<6|63&s;return h}}("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/")},function(t,e){function r(t){return t.map((function(t){if(t.buffer instanceof ArrayBuffer){var e=t.buffer;if(t.byteLength!==e.byteLength){var r=new Uint8Array(t.byteLength);r.set(new Uint8Array(e,t.byteOffset,t.byteLength)),e=r.buffer}return e}return t}))}function n(t,e){e=e||{};var n=new i;return r(t).forEach((function(t){n.append(t)})),e.type?n.getBlob(e.type):n.getBlob()}function o(t,e){return new Blob(r(t),e||{})}var i="undefined"!=typeof i?i:"undefined"!=typeof WebKitBlobBuilder?WebKitBlobBuilder:"undefined"!=typeof MSBlobBuilder?MSBlobBuilder:"undefined"!=typeof MozBlobBuilder&&MozBlobBuilder,s=function(){try{var t=new Blob(["hi"]);return 2===t.size}catch(t){return!1}}(),a=s&&function(){try{var t=new Blob([new Uint8Array([1,2])]);return 2===t.size}catch(t){return!1}}(),c=i&&i.prototype.append&&i.prototype.getBlob;"undefined"!=typeof Blob&&(n.prototype=Blob.prototype,o.prototype=Blob.prototype),t.exports=function(){return s?a?Blob:o:c?n:void 0}()},function(t,e){e.encode=function(t){var e="";for(var r in t)t.hasOwnProperty(r)&&(e.length&&(e+="&"),e+=encodeURIComponent(r)+"="+encodeURIComponent(t[r]));return e},e.decode=function(t){for(var e={},r=t.split("&"),n=0,o=r.length;n0);return e}function n(t){var e=0;for(h=0;h';i=document.createElement(t)}catch(t){i=document.createElement("iframe"),i.name=o.iframeId,i.src="javascript:0"}i.id=o.iframeId,o.form.appendChild(i),o.iframe=i}var o=this;if(!this.form){var i,s=document.createElement("form"),a=document.createElement("textarea"),c=this.iframeId="eio_iframe_"+this.index;s.className="socketio",s.style.position="absolute",s.style.top="-1000px",s.style.left="-1000px",s.target=c,s.method="POST",s.setAttribute("accept-charset","utf-8"),a.name="d",s.appendChild(a),document.body.appendChild(s),this.form=s,this.area=a}this.form.action=this.uri(),n(),t=t.replace(h,"\\\n"),this.area.value=t.replace(p,"\\n");try{this.form.submit()}catch(t){}this.iframe.attachEvent?this.iframe.onreadystatechange=function(){"complete"===o.iframe.readyState&&r()}:this.iframe.onload=r}},function(t,e,r){function n(t){var e=t&&t.forceBase64;e&&(this.supportsBinary=!1),this.perMessageDeflate=t.perMessageDeflate,this.usingBrowserWebSocket=o&&!t.forceNode,this.protocols=t.protocols,this.usingBrowserWebSocket||(u=i),s.call(this,t)}var o,i,s=r(18),a=r(19),c=r(27),p=r(28),h=r(29);r(3)("engine.io-client:websocket");if("undefined"!=typeof WebSocket?o=WebSocket:"undefined"!=typeof self&&(o=self.WebSocket||self.MozWebSocket),"undefined"==typeof window)try{i=r(32)}catch(t){}var u=o||i;t.exports=n,p(n,s),n.prototype.name="websocket",n.prototype.supportsBinary=!0,n.prototype.doOpen=function(){if(this.check()){var t=this.uri(),e=this.protocols,r={};this.isReactNative||(r.agent=this.agent,r.perMessageDeflate=this.perMessageDeflate,r.pfx=this.pfx,r.key=this.key,r.passphrase=this.passphrase,r.cert=this.cert,r.ca=this.ca,r.ciphers=this.ciphers,r.rejectUnauthorized=this.rejectUnauthorized),this.extraHeaders&&(r.headers=this.extraHeaders),this.localAddress&&(r.localAddress=this.localAddress);try{this.ws=this.usingBrowserWebSocket&&!this.isReactNative?e?new u(t,e):new u(t):new u(t,e,r)}catch(t){return this.emit("error",t)}void 0===this.ws.binaryType&&(this.supportsBinary=!1),this.ws.supports&&this.ws.supports.binary?(this.supportsBinary=!0,this.ws.binaryType="nodebuffer"):this.ws.binaryType="arraybuffer",this.addEventListeners()}},n.prototype.addEventListeners=function(){var t=this;this.ws.onopen=function(){t.onOpen()},this.ws.onclose=function(){t.onClose()},this.ws.onmessage=function(e){t.onData(e.data)},this.ws.onerror=function(e){t.onError("websocket error",e)}},n.prototype.write=function(t){function e(){r.emit("flush"),setTimeout((function(){r.writable=!0,r.emit("drain")}),0)}var r=this;this.writable=!1;for(var n=t.length,o=0,i=n;o0&&t.jitter<=1?t.jitter:0,this.attempts=0}t.exports=r,r.prototype.duration=function(){var t=this.ms*Math.pow(this.factor,this.attempts++);if(this.jitter){var e=Math.random(),r=Math.floor(e*this.jitter*t);t=0==(1&Math.floor(10*e))?t-r:t+r}return 0|Math.min(t,this.max)},r.prototype.reset=function(){this.attempts=0},r.prototype.setMin=function(t){this.ms=t},r.prototype.setMax=function(t){this.max=t},r.prototype.setJitter=function(t){this.jitter=t}}])}))}).call(this)}).call(this,require("buffer").Buffer)},{buffer:16}],19:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.AceBaseBase=exports.AceBaseBaseSettings=void 0;const simple_event_emitter_1=require("./simple-event-emitter");const data_reference_1=require("./data-reference");const type_mappings_1=require("./type-mappings");const optional_observable_1=require("./optional-observable");const debug_1=require("./debug");const simple_colors_1=require("./simple-colors");class AceBaseBaseSettings{constructor(options){if(typeof options!=="object"){options={}}this.logLevel=options.logLevel||"log";this.logColors=typeof options.logColors==="boolean"?options.logColors:true;this.info=typeof options.info==="string"?options.info:undefined;this.sponsor=typeof options.sponsor==="boolean"?options.sponsor:false}}exports.AceBaseBaseSettings=AceBaseBaseSettings;class AceBaseBase extends simple_event_emitter_1.SimpleEventEmitter{constructor(dbname,options){super();this._ready=false;options=new AceBaseBaseSettings(options||{});this.name=dbname;this.debug=new debug_1.DebugLogger(options.logLevel,`[${dbname}]`);(0,simple_colors_1.SetColorsEnabled)(options.logColors);const logoStyle=[simple_colors_1.ColorStyle.magenta,simple_colors_1.ColorStyle.bold];const logo=" ___ ______ "+"\n"+" / _ \\ | ___ \\ "+"\n"+" / /_\\ \\ ___ ___| |_/ / __ _ ___ ___ "+"\n"+" | _ |/ __/ _ \\ ___ \\/ _` / __|/ _ \\"+"\n"+" | | | | (_| __/ |_/ / (_| \\__ \\ __/"+"\n"+" \\_| |_/\\___\\___\\____/ \\__,_|___/\\___|";const info=options.info?"".padStart(40-options.info.length," ")+options.info+"\n":"";if(!options.sponsor){this.debug.write(logo.colorize(logoStyle));info&&this.debug.write(info.colorize(simple_colors_1.ColorStyle.magenta))}this.types=new type_mappings_1.TypeMappings(this);this.once("ready",(()=>{this._ready=true}))}async ready(callback){if(!this._ready){await new Promise((resolve=>this.on("ready",resolve)))}callback===null||callback===void 0?void 0:callback()}get isReady(){return this._ready}setObservable(ObservableImpl){(0,optional_observable_1.setObservable)(ObservableImpl)}ref(path){return new data_reference_1.DataReference(this,path)}get root(){return this.ref("")}query(path){const ref=new data_reference_1.DataReference(this,path);return new data_reference_1.DataReferenceQuery(ref)}get indexes(){return{get:()=>this.api.getIndexes(),create:(path,key,options)=>this.api.createIndex(path,key,options),delete:async filePath=>this.api.deleteIndex(filePath)}}get schema(){return{get:path=>this.api.getSchema(path),set:(path,schema)=>this.api.setSchema(path,schema),all:()=>this.api.getSchemas(),check:(path,value,isUpdate)=>this.api.validateSchema(path,value,isUpdate)}}}exports.AceBaseBase=AceBaseBase},{"./data-reference":26,"./debug":28,"./optional-observable":32,"./simple-colors":39,"./simple-event-emitter":40,"./type-mappings":43}],20:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.Api=void 0;class NotImplementedError extends Error{constructor(name){super(`${name} is not implemented`)}}class Api{constructor(){}stats(options){throw new NotImplementedError("stats")}subscribe(path,event,callback,settings){throw new NotImplementedError("subscribe")}unsubscribe(path,event,callback){throw new NotImplementedError("unsubscribe")}update(path,updates,options){throw new NotImplementedError("update")}set(path,value,options){throw new NotImplementedError("set")}get(path,options){throw new NotImplementedError("get")}transaction(path,callback,options){throw new NotImplementedError("transaction")}exists(path){throw new NotImplementedError("exists")}query(path,query,options){throw new NotImplementedError("query")}reflect(path,type,args){throw new NotImplementedError("reflect")}export(path,write,options){throw new NotImplementedError("export")}import(path,read,options){throw new NotImplementedError("import")}createIndex(path,key,options){throw new NotImplementedError("createIndex")}getIndexes(){throw new NotImplementedError("getIndexes")}deleteIndex(filePath){throw new NotImplementedError("deleteIndex")}setSchema(path,schema){throw new NotImplementedError("setSchema")}getSchema(path){throw new NotImplementedError("getSchema")}getSchemas(){throw new NotImplementedError("getSchemas")}validateSchema(path,value,isUpdate){throw new NotImplementedError("validateSchema")}getMutations(filter){throw new NotImplementedError("getMutations")}getChanges(filter){throw new NotImplementedError("getChanges")}}exports.Api=Api},{}],21:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.ascii85=void 0;function c(input,length,result){const b=[0,0,0,0,0];for(let i=0;i";return ret}exports.ascii85={encode:function(arr){if(arr instanceof ArrayBuffer){arr=new Uint8Array(arr,0,arr.byteLength)}return encode(arr)},decode:function(input){if(!input.startsWith("<~")||!input.endsWith("~>")){throw new Error("Invalid input string")}input=input.substr(2,input.length-4);const n=input.length,r=[],b=[0,0,0,0,0];let t,x,y,d;for(let i=0;i>>=8;y=t&255;t>>>=8;r.push(t>>>8,t&255,y,x);for(let j=d;j<5;++j,r.pop());i+=4}const data=new Uint8Array(r);return data.buffer.slice(data.byteOffset,data.byteOffset+data.byteLength)}}},{}],22:[function(require,module,exports){"use strict";var _a,_b;Object.defineProperty(exports,"__esModule",{value:true});const pad_1=require("../pad");const env=typeof window==="object"?window:self,globalCount=Object.keys(env).length,mimeTypesLength=(_b=(_a=navigator.mimeTypes)===null||_a===void 0?void 0:_a.length)!==null&&_b!==void 0?_b:0,clientId=(0,pad_1.default)((mimeTypesLength+navigator.userAgent.length).toString(36)+globalCount.toString(36),4);function fingerprint(){return clientId}exports.default=fingerprint},{"../pad":24}],23:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});const fingerprint_1=require("./fingerprint");const pad_1=require("./pad");let c=0;const blockSize=4,base=36,discreteValues=Math.pow(base,blockSize);function randomBlock(){return(0,pad_1.default)((Math.random()*discreteValues<<0).toString(base),blockSize)}function safeCounter(){c=ct2[i]===key))}static isAncestor(ancestor,other){return ancestor.lengthother[i]===key))}static isDescendant(descendant,other){return descendant.length>other.length&&other.every(((key,i)=>descendant[i]===key))}}const isProxy=Symbol("isProxy");class LiveDataProxy{static async create(ref,options){var _a;ref=new data_reference_1.DataReference(ref.db,ref.path);let cache,loaded=false;let latestCursor=options===null||options===void 0?void 0:options.cursor;let proxy;const proxyId=id_1.ID.generate();const clientSubscriptions=[];const clientEventEmitter=new simple_event_emitter_1.SimpleEventEmitter;clientEventEmitter.on("cursor",(cursor=>latestCursor=cursor));clientEventEmitter.on("error",(err=>{console.error(err.message,err.details)}));const applyChange=(keys,newValue)=>{if(keys.length===0){cache=newValue;return true}const allowCreation=false;if(allowCreation){cache=typeof keys[0]==="number"?[]:{}}let target=cache;const trailKeys=keys.slice();while(trailKeys.length>1){const key=trailKeys.shift();if(!(key in target)){if(allowCreation){target[key]=typeof key==="number"?[]:{}}else{return false}}target=target[key]}const prop=trailKeys.shift();if(newValue===null){target instanceof Array?target.splice(prop,1):delete target[prop]}else{target[prop]=newValue}return true};const syncFallback=async()=>{if(!loaded){return}await reload()};const subscription=ref.on("mutations",{syncFallback:syncFallback}).subscribe((async snap=>{var _a;if(!loaded){return}const context=snap.context();const isRemote=((_a=context.acebase_proxy)===null||_a===void 0?void 0:_a.id)!==proxyId;if(!isRemote){return}const mutations=snap.val(false);const proceed=mutations.every((mutation=>{if(!applyChange(mutation.target,mutation.val)){return false}const changeRef=mutation.target.reduce(((ref,key)=>ref.child(key)),ref);const changeSnap=new data_snapshot_1.DataSnapshot(changeRef,mutation.val,false,mutation.prev,snap.context());clientEventEmitter.emit("mutation",{snapshot:changeSnap,isRemote:isRemote});return true}));if(proceed){clientEventEmitter.emit("cursor",context.acebase_cursor);localMutationsEmitter.emit("mutations",{origin:"remote",snap:snap})}else{console.warn(`Cached value of live data proxy on "${ref.path}" appears outdated, will be reloaded`);await reload()}}));let processPromise=Promise.resolve();const mutationQueue=[];const transactions=[];const pushLocalMutations=async()=>{const mutations=[];for(let i=0,m=mutationQueue[0];iRelativeNodeTarget.areEqual(t.target,m.target)||RelativeNodeTarget.isAncestor(t.target,m.target)))){mutationQueue.splice(i,1);i--;mutations.push(m)}}if(mutations.length===0){return}mutations.forEach((mutation=>{mutation.value=(0,utils_1.cloneObject)(getTargetValue(cache,mutation.target))}));process_1.default.nextTick((()=>{const context={acebase_proxy:{id:proxyId,source:"update"}};mutations.forEach((mutation=>{const mutationRef=mutation.target.reduce(((ref,key)=>ref.child(key)),ref);const mutationSnap=new data_snapshot_1.DataSnapshot(mutationRef,mutation.value,false,mutation.previous,context);clientEventEmitter.emit("mutation",{snapshot:mutationSnap,isRemote:false})}));const snap=new data_snapshot_1.MutationsDataSnapshot(ref,mutations.map((m=>({target:m.target,val:m.value,prev:m.previous}))),context);localMutationsEmitter.emit("mutations",{origin:"local",snap:snap})}));processPromise=mutations.reduce(((mutations,m,i,arr)=>{if(!arr.some((other=>RelativeNodeTarget.isAncestor(other.target,m.target)))){mutations.push(m)}return mutations}),[]).reduce(((updates,m)=>{const target=m.target;if(target.length===0){updates.push({ref:ref,target:target,value:cache,type:"set",previous:m.previous})}else{const parentTarget=target.slice(0,-1);const key=target.slice(-1)[0];const parentRef=parentTarget.reduce(((ref,key)=>ref.child(key)),ref);const parentUpdate=updates.find((update=>update.ref.path===parentRef.path));const cacheValue=getTargetValue(cache,target);const prevValue=m.previous;if(parentUpdate){parentUpdate.value[key]=cacheValue;parentUpdate.previous[key]=prevValue}else{updates.push({ref:parentRef,target:parentTarget,value:{[key]:cacheValue},type:"update",previous:{[key]:prevValue}})}}return updates}),[]).reduce((async(promise,update)=>{const context={acebase_proxy:{id:proxyId,source:update.type}};await promise;await update.ref.context(context)[update.type](update.value).catch((err=>{clientEventEmitter.emit("error",{source:"update",message:`Error processing update of "/${ref.path}"`,details:err});const context={acebase_proxy:{id:proxyId,source:"update-rollback"}};const mutations=[];if(update.type==="set"){setTargetValue(cache,update.target,update.previous);const mutationSnap=new data_snapshot_1.DataSnapshot(update.ref,update.previous,false,update.value,context);clientEventEmitter.emit("mutation",{snapshot:mutationSnap,isRemote:false});mutations.push({target:update.target,val:update.previous,prev:update.value})}else{Object.keys(update.previous).forEach((key=>{setTargetValue(cache,update.target.concat(key),update.previous[key]);const mutationSnap=new data_snapshot_1.DataSnapshot(update.ref.child(key),update.previous[key],false,update.value[key],context);clientEventEmitter.emit("mutation",{snapshot:mutationSnap,isRemote:false});mutations.push({target:update.target.concat(key),val:update.previous[key],prev:update.value[key]})}))}mutations.forEach((m=>{const mutationRef=m.target.reduce(((ref,key)=>ref.child(key)),ref);const mutationSnap=new data_snapshot_1.DataSnapshot(mutationRef,m.val,false,m.prev,context);clientEventEmitter.emit("mutation",{snapshot:mutationSnap,isRemote:false})}));const snap=new data_snapshot_1.MutationsDataSnapshot(update.ref,mutations,context);localMutationsEmitter.emit("mutations",{origin:"local",snap:snap})}));if(update.ref.cursor){clientEventEmitter.emit("cursor",update.ref.cursor)}}),processPromise);await processPromise};let syncInProgress=false;const syncPromises=[];const syncCompleted=()=>{let resolve;const promise=new Promise((rs=>resolve=rs));syncPromises.push({resolve:resolve});return promise};let processQueueTimeout=null;const scheduleSync=()=>{if(!processQueueTimeout){processQueueTimeout=setTimeout((async()=>{syncInProgress=true;processQueueTimeout=null;await pushLocalMutations();syncInProgress=false;syncPromises.splice(0).forEach((p=>p.resolve()))}),0)}};const flagOverwritten=target=>{if(!mutationQueue.find((m=>RelativeNodeTarget.areEqual(m.target,target)))){mutationQueue.push({target:target,previous:(0,utils_1.cloneObject)(getTargetValue(cache,target))})}scheduleSync()};const localMutationsEmitter=new simple_event_emitter_1.SimpleEventEmitter;const addOnChangeHandler=(target,callback)=>{const isObject=val=>val!==null&&typeof val==="object";const mutationsHandler=async details=>{var _a;const{snap:snap,origin:origin}=details;const context=snap.context();const causedByOurProxy=((_a=context.acebase_proxy)===null||_a===void 0?void 0:_a.id)===proxyId;if(details.origin==="remote"&&causedByOurProxy){console.error("DEV ISSUE: mutationsHandler was called from remote event originating from our own proxy");return}const mutations=snap.val(false).filter((mutation=>mutation.target.slice(0,target.length).every(((key,i)=>target[i]===key))));if(mutations.length===0){return}let newValue,previousValue;const singleMutation=mutations.find((m=>m.target.length<=target.length));if(singleMutation){const trailKeys=target.slice(singleMutation.target.length);newValue=trailKeys.reduce(((val,key)=>!isObject(val)||!(key in val)?null:val[key]),singleMutation.val);previousValue=trailKeys.reduce(((val,key)=>!isObject(val)||!(key in val)?null:val[key]),singleMutation.prev)}else{const currentValue=getTargetValue(cache,target);newValue=(0,utils_1.cloneObject)(currentValue);previousValue=(0,utils_1.cloneObject)(newValue);mutations.forEach((mutation=>{const trailKeys=mutation.target.slice(target.length);for(let i=0,val=newValue,prev=previousValue;i{let keepSubscription=true;try{keepSubscription=false!==callback(Object.freeze(newValue),Object.freeze(previousValue),!causedByOurProxy,context)}catch(err){clientEventEmitter.emit("error",{source:origin==="remote"?"remote_update":"local_update",message:"Error running subscription callback",details:err})}if(keepSubscription===false){stop()}}))};localMutationsEmitter.on("mutations",mutationsHandler);const stop=()=>{localMutationsEmitter.off("mutations").off("mutations",mutationsHandler);clientSubscriptions.splice(clientSubscriptions.findIndex((cs=>cs.stop===stop)),1)};clientSubscriptions.push({target:target,stop:stop});return{stop:stop}};const handleFlag=(flag,target,args)=>{if(flag==="write"){return flagOverwritten(target)}else if(flag==="onChange"){return addOnChangeHandler(target,args.callback)}else if(flag==="subscribe"||flag==="observe"){const subscribe=subscriber=>{const currentValue=getTargetValue(cache,target);subscriber.next(currentValue);const subscription=addOnChangeHandler(target,(value=>{subscriber.next(value)}));return function unsubscribe(){subscription.stop()}};if(flag==="subscribe"){return subscribe}const Observable=(0,optional_observable_1.getObservable)();return new Observable(subscribe)}else if(flag==="transaction"){const hasConflictingTransaction=transactions.some((t=>RelativeNodeTarget.areEqual(target,t.target)||RelativeNodeTarget.isAncestor(target,t.target)||RelativeNodeTarget.isDescendant(target,t.target)));if(hasConflictingTransaction){return Promise.reject(new Error("Cannot start transaction because it conflicts with another transaction"))}return new Promise((async resolve=>{const hasPendingMutations=mutationQueue.some((m=>RelativeNodeTarget.areEqual(target,m.target)||RelativeNodeTarget.isAncestor(target,m.target)));if(hasPendingMutations){if(!syncInProgress){scheduleSync()}await syncCompleted()}const tx={target:target,status:"started",transaction:null};transactions.push(tx);tx.transaction={get status(){return tx.status},get completed(){return tx.status!=="started"},get mutations(){return mutationQueue.filter((m=>RelativeNodeTarget.areEqual(tx.target,m.target)||RelativeNodeTarget.isAncestor(tx.target,m.target)))},get hasMutations(){return this.mutations.length>0},async commit(){if(this.completed){throw new Error(`Transaction has completed already (status '${tx.status}')`)}tx.status="finished";transactions.splice(transactions.indexOf(tx),1);if(syncInProgress){await syncCompleted()}scheduleSync();await syncCompleted()},rollback(){if(this.completed){throw new Error(`Transaction has completed already (status '${tx.status}')`)}tx.status="canceled";const mutations=[];for(let i=0;i{if(m.target.length===0){cache=m.previous}else{setTargetValue(cache,m.target,m.previous)}}));transactions.splice(transactions.indexOf(tx),1)}};resolve(tx.transaction)}))}};const snap=await ref.get({cache_mode:"allow",cache_cursor:options===null||options===void 0?void 0:options.cursor});if(snap.context().acebase_origin!=="cache"){clientEventEmitter.emit("cursor",(_a=ref.cursor)!==null&&_a!==void 0?_a:null)}loaded=true;cache=snap.val();if(cache===null&&typeof(options===null||options===void 0?void 0:options.defaultValue)!=="undefined"){cache=options.defaultValue;const context={acebase_proxy:{id:proxyId,source:"default"}};await ref.context(context).set(cache)}proxy=createProxy({root:{ref:ref,get cache(){return cache}},target:[],id:proxyId,flag:handleFlag});const assertProxyAvailable=()=>{if(proxy===null){throw new Error("Proxy was destroyed")}};const reload=async()=>{assertProxyAvailable();mutationQueue.splice(0);const snap=await ref.get({allow_cache:false});const oldVal=cache,newVal=snap.val();cache=newVal;const mutations=(0,utils_1.getMutations)(oldVal,newVal);if(mutations.length===0){return}const context=snap.context();context.acebase_proxy={id:proxyId,source:"reload"};mutations.forEach((m=>{const targetRef=getTargetRef(ref,m.target);const newSnap=new data_snapshot_1.DataSnapshot(targetRef,m.val,m.val===null,m.prev,context);clientEventEmitter.emit("mutation",{snapshot:newSnap,isRemote:true})}));const mutationsSnap=new data_snapshot_1.MutationsDataSnapshot(ref,mutations,context);localMutationsEmitter.emit("mutations",{origin:"local",snap:mutationsSnap})};return{async destroy(){await processPromise;const promises=[subscription.stop(),...clientSubscriptions.map((cs=>cs.stop()))];await Promise.all(promises);["cursor","mutation","error"].forEach((event=>clientEventEmitter.off(event)));cache=null;proxy=null},stop(){this.destroy()},get value(){assertProxyAvailable();return proxy},get hasValue(){assertProxyAvailable();return cache!==null},set value(val){assertProxyAvailable();if(val!==null&&typeof val==="object"&&val[isProxy]){val=val.valueOf()}flagOverwritten([]);cache=val},get ref(){return ref},get cursor(){return latestCursor},reload:reload,onMutation(callback){assertProxyAvailable();clientEventEmitter.off("mutation");clientEventEmitter.on("mutation",(({snapshot:snapshot,isRemote:isRemote})=>{try{callback(snapshot,isRemote)}catch(err){clientEventEmitter.emit("error",{source:"mutation_callback",message:"Error in dataproxy onMutation callback",details:err})}}))},onError(callback){assertProxyAvailable();clientEventEmitter.off("error");clientEventEmitter.on("error",(err=>{try{callback(err)}catch(err){console.error(`Error in dataproxy onError callback: ${err.message}`)}}))},on(event,callback){clientEventEmitter.on(event,callback)},off(event,callback){clientEventEmitter.off(event,callback)}}}}exports.LiveDataProxy=LiveDataProxy;function getTargetValue(obj,target){let val=obj;for(const key of target){val=typeof val==="object"&&val!==null&&key in val?val[key]:null}return val}function setTargetValue(obj,target,value){if(target.length===0){throw new Error("Cannot update root target, caller must do that itself!")}const targetObject=target.slice(0,-1).reduce(((obj,key)=>obj[key]),obj);const prop=target.slice(-1)[0];if(value===null||typeof value==="undefined"){targetObject instanceof Array?targetObject.splice(prop,1):delete targetObject[prop]}else{targetObject[prop]=value}}function getTargetRef(ref,target){const path=path_info_1.PathInfo.get(ref.path).childPath(target);return new data_reference_1.DataReference(ref.db,path)}function createProxy(context){const targetRef=getTargetRef(context.root.ref,context.target);const childProxies=[];const handler={get(target,prop,receiver){target=getTargetValue(context.root.cache,context.target);if(typeof prop==="symbol"){if(prop.toString()===Symbol.iterator.toString()){prop="values"}else if(prop.toString()===isProxy.toString()){return true}else{return Reflect.get(target,prop,receiver)}}if(prop==="valueOf"){return function valueOf(){return target}}if(target===null||typeof target!=="object"){throw new Error(`Cannot read property "${prop}" of ${target}. Value of path "/${targetRef.path}" is not an object (anymore)`)}if(target instanceof Array&&typeof prop==="string"&&/^[0-9]+$/.test(prop)){prop=parseInt(prop)}const value=target[prop];if(value===null){delete target[prop];return}const childProxy=childProxies.find((proxy=>proxy.prop===prop));if(childProxy){if(childProxy.typeof===typeof value){return childProxy.value}childProxies.splice(childProxies.indexOf(childProxy),1)}const proxifyChildValue=prop=>{const value=target[prop];const childProxy=childProxies.find((child=>child.prop===prop));if(childProxy){if(childProxy.typeof===typeof value){return childProxy.value}childProxies.splice(childProxies.indexOf(childProxy),1)}if(typeof value!=="object"){return value}const newChildProxy=createProxy({root:context.root,target:context.target.concat(prop),id:context.id,flag:context.flag});childProxies.push({typeof:typeof value,prop:prop,value:newChildProxy});return newChildProxy};const unproxyValue=value=>value!==null&&typeof value==="object"&&value[isProxy]?value.getTarget():value;if(["string","number","boolean"].includes(typeof value)||value instanceof Date||value instanceof path_reference_1.PathReference||value instanceof ArrayBuffer||typeof value==="object"&&"buffer"in value){return value}const isArray=target instanceof Array;if(prop==="toString"){return function toString(){return`[LiveDataProxy for "${targetRef.path}"]`}}if(typeof value==="undefined"){if(prop==="push"){return function push(item){const childRef=targetRef.push();context.flag("write",context.target.concat(childRef.key));target[childRef.key]=item;return childRef.key}}if(prop==="getTarget"){return function(warn=true){warn&&console.warn("Use getTarget with caution - any changes will not be synchronized!");return target}}if(prop==="getRef"){return function getRef(){const ref=getTargetRef(context.root.ref,context.target);return ref}}if(prop==="forEach"){return function forEach(callback){const keys=Object.keys(target);let stop=false;for(let i=0;!stop&&iproxifyChildValue(key)));if(sortFn){arr.sort(sortFn)}return arr}}if(prop==="onChanged"){return function onChanged(callback){return context.flag("onChange",context.target,{callback:callback})}}if(prop==="subscribe"){return function subscribe(){return context.flag("subscribe",context.target)}}if(prop==="getObservable"){return function getObservable(){return context.flag("observe",context.target)}}if(prop==="getOrderedCollection"){return function getOrderedCollection(orderProperty,orderIncrement){return new OrderedCollectionProxy(this,orderProperty,orderIncrement)}}if(prop==="startTransaction"){return function startTransaction(){return context.flag("transaction",context.target)}}if(prop==="remove"&&!isArray){return function remove(){if(context.target.length===0){throw new Error("Can't remove proxy root value")}const parent=getTargetValue(context.root.cache,context.target.slice(0,-1));const key=context.target.slice(-1)[0];context.flag("write",context.target);delete parent[key]}}return}else if(typeof value==="function"){if(isArray){const writeArray=action=>{context.flag("write",context.target);return action()};const cleanArrayValues=values=>values.map((value=>{value=unproxyValue(value);removeVoidProperties(value);return value}));if(prop==="push"){return function push(...items){items=cleanArrayValues(items);return writeArray((()=>target.push(...items)))}}if(prop==="pop"){return function pop(){return writeArray((()=>target.pop()))}}if(prop==="splice"){return function splice(start,deleteCount,...items){items=cleanArrayValues(items);return writeArray((()=>target.splice(start,deleteCount,...items)))}}if(prop==="shift"){return function shift(){return writeArray((()=>target.shift()))}}if(prop==="unshift"){return function unshift(...items){items=cleanArrayValues(items);return writeArray((()=>target.unshift(...items)))}}if(prop==="sort"){return function sort(compareFn){return writeArray((()=>target.sort(compareFn)))}}if(prop==="reverse"){return function reverse(){return writeArray((()=>target.reverse()))}}if(["indexOf","lastIndexOf"].includes(prop)){return function indexOf(item,start){if(item!==null&&typeof item==="object"&&item[isProxy]){item=item.getTarget(false)}return target[prop](item,start)}}if(["forEach","every","some","filter","map"].includes(prop)){return function iterate(callback){return target[prop](((value,i)=>callback(proxifyChildValue(i),i,proxy)))}}if(["reduce","reduceRight"].includes(prop)){return function reduce(callback,initialValue){return target[prop](((prev,value,i)=>callback(prev,proxifyChildValue(i),i,proxy)),initialValue)}}if(["find","findIndex"].includes(prop)){return function find(callback){let value=target[prop](((value,i)=>callback(proxifyChildValue(i),i,proxy)));if(prop==="find"&&value){const index=target.indexOf(value);value=proxifyChildValue(index)}return value}}if(["values","entries","keys"].includes(prop)){return function*generator(){for(let i=0;itypeof key==="number"))){context.flag("write",context.target.slice(0,context.target.findIndex((key=>typeof key==="number"))))}else if(target instanceof Array){context.flag("write",context.target)}else{context.flag("write",context.target.concat(prop))}if(value===null){delete target[prop]}else{removeVoidProperties(value);target[prop]=value}return true},deleteProperty(target,prop){target=getTargetValue(context.root.cache,context.target);if(target===null){throw new Error(`Cannot delete property ${prop.toString()} of null`)}if(typeof prop==="symbol"){return Reflect.deleteProperty(target,prop)}if(!(prop in target)){return true}context.flag("write",context.target.concat(prop));delete target[prop];return true},ownKeys(target){target=getTargetValue(context.root.cache,context.target);return Reflect.ownKeys(target)},has(target,prop){target=getTargetValue(context.root.cache,context.target);return Reflect.has(target,prop)},getOwnPropertyDescriptor(target,prop){target=getTargetValue(context.root.cache,context.target);const descriptor=Reflect.getOwnPropertyDescriptor(target,prop);if(descriptor){descriptor.configurable=true}return descriptor},getPrototypeOf(target){target=getTargetValue(context.root.cache,context.target);return Reflect.getPrototypeOf(target)}};const proxy=new Proxy({},handler);return proxy}function removeVoidProperties(obj){if(typeof obj!=="object"){return}Object.keys(obj).forEach((key=>{const val=obj[key];if(val===null||typeof val==="undefined"){delete obj[key]}else if(typeof val==="object"){removeVoidProperties(val)}}))}function proxyAccess(proxiedValue){if(typeof proxiedValue!=="object"||!proxiedValue[isProxy]){throw new Error("Given value is not proxied. Make sure you are referencing the value through the live data proxy.")}return proxiedValue}exports.proxyAccess=proxyAccess;class OrderedCollectionProxy{constructor(collection,orderProperty="order",orderIncrement=10){this.collection=collection;this.orderProperty=orderProperty;this.orderIncrement=orderIncrement;if(typeof collection!=="object"||!collection[isProxy]){throw new Error("Collection is not proxied")}if(collection.valueOf()instanceof Array){throw new Error("Collection is an array, not an object collection")}if(!Object.keys(collection).every((key=>typeof collection[key]==="object"))){throw new Error("Collection has non-object children")}const ok=Object.keys(collection).every((key=>typeof collection[key][orderProperty]==="number"));if(!ok){const keys=Object.keys(collection);for(let i=0;i{const subscription=this.getObservable().subscribe((()=>{const newArray=this.getArray();subscriber.next(newArray)}));return function unsubscribe(){subscription.unsubscribe()}}))}getArray(){const arr=proxyAccess(this.collection).toArray(((a,b)=>a[this.orderProperty]-b[this.orderProperty]));return arr}add(item,index,from){const arr=this.getArray();let minOrder=Number.POSITIVE_INFINITY,maxOrder=Number.NEGATIVE_INFINITY;for(let i=0;ithis.collection[key]===item));if(!fromKey){throw new Error("item not found in collection")}if(from===index){return{key:fromKey,index:index}}if(Math.abs(from-index)===1){const otherItem=arr[index];const otherOrder=otherItem[this.orderProperty];otherItem[this.orderProperty]=item[this.orderProperty];item[this.orderProperty]=otherOrder;return{key:fromKey,index:index}}else{arr.splice(from,1)}}if(typeof index!=="number"||index>=arr.length){index=arr.length;item[this.orderProperty]=arr.length==0?0:maxOrder+this.orderIncrement}else if(index===0){item[this.orderProperty]=arr.length==0?0:minOrder-this.orderIncrement}else{const orders=arr.map((item=>item[this.orderProperty]));const gap=orders[index]-orders[index-1];if(gap>1){item[this.orderProperty]=orders[index]-Math.floor(gap/2)}else{arr.splice(index,0,item);for(let i=0;ithis.collection[key]===item));if(!key){throw new Error("Cannot find target object to delete")}this.collection[key]=null;return{key:key,index:index}}move(fromIndex,toIndex){const arr=this.getArray();return this.add(arr[fromIndex],toIndex,fromIndex)}sort(sortFn){const arr=this.getArray();arr.sort(sortFn);for(let i=0;i{newContext[key]=context[key]}))}this[_private].context=newContext;return this}else if(typeof context==="undefined"){console.warn("Use snap.context() instead of snap.ref.context() to get updating context in event callbacks");return currentContext}else{throw new Error("Invalid context argument")}}get cursor(){return this[_private].cursor}set cursor(value){var _a;this[_private].cursor=value;(_a=this.onCursor)===null||_a===void 0?void 0:_a.call(this,value)}get path(){return this[_private].path}get key(){return this[_private].key}get parent(){const currentPath=path_info_1.PathInfo.fillVariables2(this.path,this.vars);const info=path_info_1.PathInfo.get(currentPath);if(info.parentPath===null){return null}return new DataReference(this.db,info.parentPath).context(this[_private].context)}get vars(){return this[_private].vars}child(childPath){childPath=typeof childPath==="number"?childPath:childPath.replace(/^\/|\/$/g,"");const currentPath=path_info_1.PathInfo.fillVariables2(this.path,this.vars);const targetPath=path_info_1.PathInfo.getChildPath(currentPath,childPath);return new DataReference(this.db,targetPath).context(this[_private].context)}async set(value,onComplete){try{if(this.isWildcardPath){throw new Error(`Cannot set the value of wildcard path "/${this.path}"`)}if(this.parent===null){throw new Error("Cannot set the root object. Use update, or set individual child properties")}if(typeof value==="undefined"){throw new TypeError(`Cannot store undefined value in "/${this.path}"`)}if(!this.db.isReady){await this.db.ready()}value=this.db.types.serialize(this.path,value);const{cursor:cursor}=await this.db.api.set(this.path,value,{context:this[_private].context});this.cursor=cursor;if(typeof onComplete==="function"){try{onComplete(null,this)}catch(err){console.error("Error in onComplete callback:",err)}}}catch(err){if(typeof onComplete==="function"){try{onComplete(err,this)}catch(err){console.error("Error in onComplete callback:",err)}}else{throw err}}return this}async update(updates,onComplete){try{if(this.isWildcardPath){throw new Error(`Cannot update the value of wildcard path "/${this.path}"`)}if(!this.db.isReady){await this.db.ready()}if(typeof updates!=="object"||updates instanceof Array||updates instanceof ArrayBuffer||updates instanceof Date){await this.set(updates)}else if(Object.keys(updates).length===0){console.warn(`update called on path "/${this.path}", but there is nothing to update`)}else{updates=this.db.types.serialize(this.path,updates);const{cursor:cursor}=await this.db.api.update(this.path,updates,{context:this[_private].context});this.cursor=cursor}if(typeof onComplete==="function"){try{onComplete(null,this)}catch(err){console.error("Error in onComplete callback:",err)}}}catch(err){if(typeof onComplete==="function"){try{onComplete(err,this)}catch(err){console.error("Error in onComplete callback:",err)}}else{throw err}}return this}async transaction(callback){if(this.isWildcardPath){throw new Error(`Cannot start a transaction on wildcard path "/${this.path}"`)}if(!this.db.isReady){await this.db.ready()}let throwError;const cb=currentValue=>{currentValue=this.db.types.deserialize(this.path,currentValue);const snap=new data_snapshot_1.DataSnapshot(this,currentValue);let newValue;try{newValue=callback(snap)}catch(err){throwError=err;return}if(newValue instanceof Promise){return newValue.then((val=>this.db.types.serialize(this.path,val))).catch((err=>{throwError=err;return}))}else{return this.db.types.serialize(this.path,newValue)}};const{cursor:cursor}=await this.db.api.transaction(this.path,cb,{context:this[_private].context});this.cursor=cursor;if(throwError){throw throwError}return this}on(event,callback,cancelCallback){if(this.path===""&&["value","child_changed"].includes(event)){console.warn("WARNING: Listening for value and child_changed events on the root node is a bad practice. These events require loading of all data (value event), or potentially lots of data (child_changed event) each time they are fired")}let eventPublisher=null;const eventStream=new subscription_1.EventStream((publisher=>{eventPublisher=publisher}));const cb={event:event,stream:eventStream,userCallback:typeof callback==="function"&&callback,ourCallback:(err,path,newValue,oldValue,eventContext)=>{if(err){this.db.debug.error(`Error getting data for event ${event} on path "${path}"`,err);return}const ref=this.db.ref(path);ref[_private].vars=path_info_1.PathInfo.extractVariables(this.path,path);let callbackObject;if(event.startsWith("notify_")){callbackObject=ref.context(eventContext||{})}else{const values={previous:this.db.types.deserialize(path,oldValue),current:this.db.types.deserialize(path,newValue)};if(event==="child_removed"){callbackObject=new data_snapshot_1.DataSnapshot(ref,values.previous,true,values.previous,eventContext)}else if(event==="mutations"){callbackObject=new data_snapshot_1.MutationsDataSnapshot(ref,values.current,eventContext)}else{const isRemoved=event==="mutated"&&values.current===null;callbackObject=new data_snapshot_1.DataSnapshot(ref,values.current,isRemoved,values.previous,eventContext)}}eventPublisher.publish(callbackObject);if(eventContext===null||eventContext===void 0?void 0:eventContext.acebase_cursor){this.cursor=eventContext.acebase_cursor}}};this[_private].callbacks.push(cb);const subscribe=()=>{if(typeof callback==="function"){eventStream.subscribe(callback,((activated,cancelReason)=>{if(!activated){cancelCallback&&cancelCallback(cancelReason)}}))}const advancedOptions=typeof callback==="object"?callback:{newOnly:!callback};if(typeof advancedOptions.newOnly!=="boolean"){advancedOptions.newOnly=false}if(this.isWildcardPath){advancedOptions.newOnly=true}const cancelSubscription=err=>{const callbacks=this[_private].callbacks;callbacks.splice(callbacks.indexOf(cb),1);this.db.api.unsubscribe(this.path,event,cb.ourCallback);this.db.debug.error(`Subscription "${event}" on path "/${this.path}" canceled because of an error: ${err.message}`);eventPublisher.cancel(err.message)};const authorized=this.db.api.subscribe(this.path,event,cb.ourCallback,{newOnly:advancedOptions.newOnly,cancelCallback:cancelSubscription,syncFallback:advancedOptions.syncFallback});const allSubscriptionsStoppedCallback=()=>{const callbacks=this[_private].callbacks;callbacks.splice(callbacks.indexOf(cb),1);return this.db.api.unsubscribe(this.path,event,cb.ourCallback)};if(authorized instanceof Promise){authorized.then((()=>{eventPublisher.start(allSubscriptionsStoppedCallback)})).catch(cancelSubscription)}else{eventPublisher.start(allSubscriptionsStoppedCallback)}if(!advancedOptions.newOnly){if(event==="value"){this.get((snap=>{eventPublisher.publish(snap)}))}else if(event==="child_added"){this.get((snap=>{const val=snap.val();if(val===null||typeof val!=="object"){return}Object.keys(val).forEach((key=>{const childSnap=new data_snapshot_1.DataSnapshot(this.child(key),val[key]);eventPublisher.publish(childSnap)}))}))}else if(event==="notify_child_added"){const step=100,limit=step;let skip=0;const more=async()=>{const children=await this.db.api.reflect(this.path,"children",{limit:limit,skip:skip});children.list.forEach((child=>{const childRef=this.child(child.key);eventPublisher.publish(childRef)}));if(children.more){skip+=step;more()}};more()}}};if(this.db.isReady){subscribe()}else{this.db.ready(subscribe)}return eventStream}off(event,callback){const subscriptions=this[_private].callbacks;const stopSubs=subscriptions.filter((sub=>(!event||sub.event===event)&&(!callback||sub.userCallback===callback)));if(stopSubs.length===0){this.db.debug.warn(`Can't find event subscriptions to stop (path: "${this.path}", event: ${event||"(any)"}, callback: ${callback})`)}stopSubs.forEach((sub=>{sub.stream.stop()}));return this}get(optionsOrCallback,callback){if(!this.db.isReady){const promise=this.db.ready().then((()=>this.get(optionsOrCallback,callback)));return typeof optionsOrCallback!=="function"&&typeof callback!=="function"?promise:undefined}callback=typeof optionsOrCallback==="function"?optionsOrCallback:typeof callback==="function"?callback:undefined;if(this.isWildcardPath){const error=new Error(`Cannot get value of wildcard path "/${this.path}". Use .query() instead`);if(typeof callback==="function"){throw error}return Promise.reject(error)}const options=new DataRetrievalOptions(typeof optionsOrCallback==="object"?optionsOrCallback:{cache_mode:"allow"});const promise=this.db.api.get(this.path,options).then((result=>{var _a;const isNewApiResult="context"in result&&"value"in result;if(!isNewApiResult){console.warn("AceBase api.get method returned an old response value. Update your acebase or acebase-client package");result={value:result,context:{}}}const value=this.db.types.deserialize(this.path,result.value);const snapshot=new data_snapshot_1.DataSnapshot(this,value,undefined,undefined,result.context);if((_a=result.context)===null||_a===void 0?void 0:_a.acebase_cursor){this.cursor=result.context.acebase_cursor}return snapshot}));if(callback){promise.then(callback).catch((err=>{console.error("Uncaught error:",err)}));return}else{return promise}}once(event,options){if(event==="value"&&!this.isWildcardPath){return this.get(options)}return new Promise((resolve=>{const callback=snap=>{this.off(event,callback);resolve(snap)};this.on(event,callback)}))}push(value,onComplete){if(this.isWildcardPath){const error=new Error(`Cannot push to wildcard path "/${this.path}"`);if(typeof value==="undefined"||typeof onComplete==="function"){throw error}return Promise.reject(error)}const id=id_1.ID.generate();const ref=this.child(id);ref[_private].pushed=true;if(typeof value!=="undefined"){return ref.set(value,onComplete).then((()=>ref))}else{return ref}}async remove(){if(this.isWildcardPath){throw new Error(`Cannot remove wildcard path "/${this.path}". Use query().remove instead`)}if(this.parent===null){throw new Error("Cannot remove the root node")}return this.set(null)}async exists(){if(this.isWildcardPath){throw new Error(`Cannot check wildcard path "/${this.path}" existence`)}if(!this.db.isReady){await this.db.ready()}return this.db.api.exists(this.path)}get isWildcardPath(){return this.path.indexOf("*")>=0||this.path.indexOf("$")>=0}query(){return new DataReferenceQuery(this)}async count(){const info=await this.reflect("info",{child_count:true});return info.children.count}async reflect(type,args){if(this.isWildcardPath){throw new Error(`Cannot reflect on wildcard path "/${this.path}"`)}if(!this.db.isReady){await this.db.ready()}return this.db.api.reflect(this.path,type,args)}async export(write,options={format:"json",type_safe:true}){if(this.isWildcardPath){throw new Error(`Cannot export wildcard path "/${this.path}"`)}if(!this.db.isReady){await this.db.ready()}const writeFn=typeof write==="function"?write:write.write.bind(write);return this.db.api.export(this.path,writeFn,options)}async import(read,options={format:"json",suppress_events:false}){if(this.isWildcardPath){throw new Error(`Cannot import to wildcard path "/${this.path}"`)}if(!this.db.isReady){await this.db.ready()}return this.db.api.import(this.path,read,options)}proxy(options){const isOptionsArg=typeof options==="object"&&(typeof options.cursor!=="undefined"||typeof options.defaultValue!=="undefined");if(typeof options!=="undefined"&&!isOptionsArg){this.db.debug.warn("Warning: live data proxy is being initialized with a deprecated method signature. Use ref.proxy(options) instead of ref.proxy(defaultValue)");options={defaultValue:options}}return data_proxy_1.LiveDataProxy.create(this,options)}observe(options){if(options){throw new Error("observe does not support data retrieval options yet")}if(this.isWildcardPath){throw new Error(`Cannot observe wildcard path "/${this.path}"`)}const Observable=(0,optional_observable_1.getObservable)();return new Observable((observer=>{let cache,resolved=false;let promise=this.get(options).then((snap=>{resolved=true;cache=snap.val();observer.next(cache)}));const updateCache=snap=>{if(!resolved){promise=promise.then((()=>updateCache(snap)));return}const mutatedPath=snap.ref.path;if(mutatedPath===this.path){cache=snap.val();return observer.next(cache)}const trailKeys=path_info_1.PathInfo.getPathKeys(mutatedPath).slice(path_info_1.PathInfo.getPathKeys(this.path).length);let target=cache;while(trailKeys.length>1){const key=trailKeys.shift();if(!(key in target)){target[key]=typeof trailKeys[0]==="number"?[]:{}}target=target[key]}const prop=trailKeys.shift();const newValue=snap.val();if(newValue===null){target instanceof Array&&typeof prop==="number"?target.splice(prop,1):delete target[prop]}else{target[prop]=newValue}observer.next(cache)};this.on("mutated",updateCache);return()=>{this.off("mutated",updateCache)}}))}async forEach(callbackOrOptions,callback){let options;if(typeof callbackOrOptions==="function"){callback=callbackOrOptions}else{options=callbackOrOptions}if(typeof callback!=="function"){throw new TypeError("No callback function given")}const info=await this.reflect("children",{limit:0,skip:0});const summary={canceled:false,total:info.list.length,processed:0};for(let i=0;ithis.get(optionsOrCallback,callback)));return typeof optionsOrCallback!=="function"&&typeof callback!=="function"?promise:undefined}callback=typeof optionsOrCallback==="function"?optionsOrCallback:typeof callback==="function"?callback:undefined;const options=new QueryDataRetrievalOptions(typeof optionsOrCallback==="object"?optionsOrCallback:{snapshots:true,cache_mode:"allow"});options.allow_cache=options.cache_mode!=="bypass";options.eventHandler=ev=>{if(!this[_private].events[ev.name]){return false}const listeners=this[_private].events[ev.name];if(typeof listeners!=="object"||listeners.length===0){return false}if(["add","change","remove"].includes(ev.name)){const ref=new DataReference(this.ref.db,ev.path);const eventData={name:ev.name};if(options.snapshots&&ev.name!=="remove"){const val=db.types.deserialize(ev.path,ev.value);eventData.snapshot=new data_snapshot_1.DataSnapshot(ref,val,false)}else{eventData.ref=ref}ev=eventData}listeners.forEach((callback=>{try{callback(ev)}catch(e){}}))};options.monitor={add:false,change:false,remove:false};if(this[_private].events){if(this[_private].events["add"]&&this[_private].events["add"].length>0){options.monitor.add=true}if(this[_private].events["change"]&&this[_private].events["change"].length>0){options.monitor.change=true}if(this[_private].events["remove"]&&this[_private].events["remove"].length>0){options.monitor.remove=true}}this.stop();const db=this.ref.db;return db.api.query(this.ref.path,this[_private],options).catch((err=>{throw new Error(err)})).then((res=>{const{stop:stop}=res;let{results:results,context:context}=res;this.stop=async()=>{await stop()};if(!("results"in res&&"context"in res)){console.warn("Query results missing context. Update your acebase and/or acebase-client packages");results=res,context={}}if(options.snapshots){const snaps=results.map((result=>{const val=db.types.deserialize(result.path,result.val);return new data_snapshot_1.DataSnapshot(db.ref(result.path),val,false,undefined,context)}));return DataSnapshotsArray.from(snaps)}else{const refs=results.map((path=>db.ref(path)));return DataReferencesArray.from(refs)}})).then((results=>{callback&&callback(results);return results}))}async stop(){}getRefs(callback){return this.get({snapshots:false},callback)}find(){return this.get({snapshots:false})}async count(){const refs=await this.find();return refs.length}async exists(){const originalTake=this[_private].take;const p=this.take(1).find();this.take(originalTake);const refs=await p;return refs.length!==0}async remove(callback){const refs=await this.find();const parentUpdates=refs.reduce(((parents,ref)=>{const parent=parents[ref.parent.path];if(!parent){parents[ref.parent.path]=[ref]}else{parent.push(ref)}return parents}),{});const db=this.ref.db;const promises=Object.keys(parentUpdates).map((async parentPath=>{const updates=refs.reduce(((updates,ref)=>{updates[ref.key]=null;return updates}),{});const ref=db.ref(parentPath);try{await ref.update(updates);return{ref:ref,success:true}}catch(error){return{ref:ref,success:false,error:error}}}));const results=await Promise.all(promises);callback&&callback(results);return results}on(event,callback){if(!this[_private].events[event]){this[_private].events[event]=[]}this[_private].events[event].push(callback);return this}off(event,callback){if(typeof event==="undefined"){this[_private].events={};return this}if(!this[_private].events[event]){return this}if(typeof callback==="undefined"){delete this[_private].events[event];return this}const index=this[_private].events[event].indexOf(callback);if(!~index){return this}this[_private].events[event].splice(index,1);return this}async forEach(callbackOrOptions,callback){let options;if(typeof callbackOrOptions==="function"){callback=callbackOrOptions}else{options=callbackOrOptions}if(typeof callback!=="function"){throw new TypeError("No callback function given")}const refs=await this.find();const summary={canceled:false,total:refs.length,processed:0};for(let i=0;iarr[i]=snap));return arr}getValues(){return this.map((snap=>snap.val()))}}exports.DataSnapshotsArray=DataSnapshotsArray;class DataReferencesArray extends Array{static from(refs){const arr=new DataReferencesArray(refs.length);refs.forEach(((ref,i)=>arr[i]=ref));return arr}getPaths(){return this.map((ref=>ref.path))}}exports.DataReferencesArray=DataReferencesArray},{"./data-proxy":25,"./data-snapshot":27,"./id":29,"./optional-observable":32,"./path-info":34,"./subscription":41}],27:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.MutationsDataSnapshot=exports.DataSnapshot=void 0;const path_info_1=require("./path-info");function getChild(snapshot,path,previous=false){if(!snapshot.exists()){return null}let child=previous?snapshot.previous():snapshot.val();if(typeof path==="number"){return child[path]}path_info_1.PathInfo.getPathKeys(path).every((key=>{child=child[key];return typeof child!=="undefined"}));return child||null}function getChildren(snapshot){if(!snapshot.exists()){return[]}const value=snapshot.val();if(value instanceof Array){return new Array(value.length).map(((v,i)=>i))}if(typeof value==="object"){return Object.keys(value)}return[]}class DataSnapshot{constructor(ref,value,isRemoved=false,prevValue,context){this.ref=ref;this.val=()=>value;this.previous=()=>prevValue;this.exists=()=>{if(isRemoved){return false}return value!==null&&typeof value!=="undefined"};this.context=()=>context||{}}exists(){return false}static for(ref,value){return new DataSnapshot(ref,value)}child(path){const val=getChild(this,path,false);const prev=getChild(this,path,true);return new DataSnapshot(this.ref.child(path),val,false,prev)}hasChild(path){return getChild(this,path)!==null}hasChildren(){return getChildren(this).length>0}numChildren(){return getChildren(this).length}forEach(callback){const value=this.val();const prev=this.previous();return getChildren(this).every((key=>{const snap=new DataSnapshot(this.ref.child(key),value[key],false,prev[key]);return callback(snap)}))}get key(){return this.ref.key}}exports.DataSnapshot=DataSnapshot;class MutationsDataSnapshot extends DataSnapshot{constructor(ref,mutations,context){super(ref,mutations,false,undefined,context);this.previous=()=>{throw new Error("Iterate values to get previous values for each mutation")};this.val=(warn=true)=>{if(warn){console.warn("Unless you know what you are doing, it is best not to use the value of a mutations snapshot directly. Use child methods and forEach to iterate the mutations instead")}return mutations}}forEach(callback){const mutations=this.val();return mutations.every((mutation=>{const ref=mutation.target.reduce(((ref,key)=>ref.child(key)),this.ref);const snap=new DataSnapshot(ref,mutation.val,false,mutation.prev);return callback(snap)}))}child(index){if(typeof index!=="number"){throw new Error("child index must be a number")}const mutation=this.val()[index];const ref=mutation.target.reduce(((ref,key)=>ref.child(key)),this.ref);return new DataSnapshot(ref,mutation.val,false,mutation.prev)}}exports.MutationsDataSnapshot=MutationsDataSnapshot},{"./path-info":34}],28:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.DebugLogger=void 0;const process_1=require("./process");const noop=()=>{};class DebugLogger{constructor(level="log",prefix=""){this.level=level;this.prefix=prefix;this.setLevel(level)}setLevel(level){const prefix=this.prefix?this.prefix+" %s":"";this.verbose=["verbose"].includes(level)?prefix?console.log.bind(console,prefix):console.log.bind(console):noop;this.log=["verbose","log"].includes(level)?prefix?console.log.bind(console,prefix):console.log.bind(console):noop;this.warn=["verbose","log","warn"].includes(level)?prefix?console.warn.bind(console,prefix):console.warn.bind(console):noop;this.error=["verbose","log","warn","error"].includes(level)?prefix?console.error.bind(console,prefix):console.error.bind(console):noop;this.write=text=>{const isRunKit=typeof process_1.default!=="undefined"&&process_1.default.env&&typeof process_1.default.env.RUNKIT_ENDPOINT_PATH==="string";if(text&&isRunKit){text.split("\n").forEach((line=>console.log(line)))}else{console.log(text)}}}}exports.DebugLogger=DebugLogger},{"./process":36}],29:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.ID=void 0;const cuid_1=require("./cuid");let timeBias=0;class ID{static set timeBias(bias){if(typeof bias!=="number"){return}timeBias=bias}static generate(){return(0,cuid_1.default)(timeBias).slice(1)}}exports.ID=ID},{"./cuid":23}],30:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.ObjectCollection=exports.PartialArray=exports.SchemaDefinition=exports.Colorize=exports.ColorStyle=exports.SimpleEventEmitter=exports.SimpleCache=exports.ascii85=exports.PathInfo=exports.Utils=exports.TypeMappings=exports.Transport=exports.EventSubscription=exports.EventPublisher=exports.EventStream=exports.PathReference=exports.ID=exports.DebugLogger=exports.OrderedCollectionProxy=exports.proxyAccess=exports.MutationsDataSnapshot=exports.DataSnapshot=exports.DataReferencesArray=exports.DataSnapshotsArray=exports.QueryDataRetrievalOptions=exports.DataRetrievalOptions=exports.DataReferenceQuery=exports.DataReference=exports.Api=exports.AceBaseBaseSettings=exports.AceBaseBase=void 0;var acebase_base_1=require("./acebase-base");Object.defineProperty(exports,"AceBaseBase",{enumerable:true,get:function(){return acebase_base_1.AceBaseBase}});Object.defineProperty(exports,"AceBaseBaseSettings",{enumerable:true,get:function(){return acebase_base_1.AceBaseBaseSettings}});var api_1=require("./api");Object.defineProperty(exports,"Api",{enumerable:true,get:function(){return api_1.Api}});var data_reference_1=require("./data-reference");Object.defineProperty(exports,"DataReference",{enumerable:true,get:function(){return data_reference_1.DataReference}});Object.defineProperty(exports,"DataReferenceQuery",{enumerable:true,get:function(){return data_reference_1.DataReferenceQuery}});Object.defineProperty(exports,"DataRetrievalOptions",{enumerable:true,get:function(){return data_reference_1.DataRetrievalOptions}});Object.defineProperty(exports,"QueryDataRetrievalOptions",{enumerable:true,get:function(){return data_reference_1.QueryDataRetrievalOptions}});Object.defineProperty(exports,"DataSnapshotsArray",{enumerable:true,get:function(){return data_reference_1.DataSnapshotsArray}});Object.defineProperty(exports,"DataReferencesArray",{enumerable:true,get:function(){return data_reference_1.DataReferencesArray}});var data_snapshot_1=require("./data-snapshot");Object.defineProperty(exports,"DataSnapshot",{enumerable:true,get:function(){return data_snapshot_1.DataSnapshot}});Object.defineProperty(exports,"MutationsDataSnapshot",{enumerable:true,get:function(){return data_snapshot_1.MutationsDataSnapshot}});var data_proxy_1=require("./data-proxy");Object.defineProperty(exports,"proxyAccess",{enumerable:true,get:function(){return data_proxy_1.proxyAccess}});Object.defineProperty(exports,"OrderedCollectionProxy",{enumerable:true,get:function(){return data_proxy_1.OrderedCollectionProxy}});var debug_1=require("./debug");Object.defineProperty(exports,"DebugLogger",{enumerable:true,get:function(){return debug_1.DebugLogger}});var id_1=require("./id");Object.defineProperty(exports,"ID",{enumerable:true,get:function(){return id_1.ID}});var path_reference_1=require("./path-reference");Object.defineProperty(exports,"PathReference",{enumerable:true,get:function(){return path_reference_1.PathReference}});var subscription_1=require("./subscription");Object.defineProperty(exports,"EventStream",{enumerable:true,get:function(){return subscription_1.EventStream}});Object.defineProperty(exports,"EventPublisher",{enumerable:true,get:function(){return subscription_1.EventPublisher}});Object.defineProperty(exports,"EventSubscription",{enumerable:true,get:function(){return subscription_1.EventSubscription}});exports.Transport=require("./transport");var type_mappings_1=require("./type-mappings");Object.defineProperty(exports,"TypeMappings",{enumerable:true,get:function(){return type_mappings_1.TypeMappings}});exports.Utils=require("./utils");var path_info_1=require("./path-info");Object.defineProperty(exports,"PathInfo",{enumerable:true,get:function(){return path_info_1.PathInfo}});var ascii85_1=require("./ascii85");Object.defineProperty(exports,"ascii85",{enumerable:true,get:function(){return ascii85_1.ascii85}});var simple_cache_1=require("./simple-cache");Object.defineProperty(exports,"SimpleCache",{enumerable:true,get:function(){return simple_cache_1.SimpleCache}});var simple_event_emitter_1=require("./simple-event-emitter");Object.defineProperty(exports,"SimpleEventEmitter",{enumerable:true,get:function(){return simple_event_emitter_1.SimpleEventEmitter}});var simple_colors_1=require("./simple-colors");Object.defineProperty(exports,"ColorStyle",{enumerable:true,get:function(){return simple_colors_1.ColorStyle}});Object.defineProperty(exports,"Colorize",{enumerable:true,get:function(){return simple_colors_1.Colorize}});var schema_1=require("./schema");Object.defineProperty(exports,"SchemaDefinition",{enumerable:true,get:function(){return schema_1.SchemaDefinition}});var partial_array_1=require("./partial-array");Object.defineProperty(exports,"PartialArray",{enumerable:true,get:function(){return partial_array_1.PartialArray}});var object_collection_1=require("./object-collection");Object.defineProperty(exports,"ObjectCollection",{enumerable:true,get:function(){return object_collection_1.ObjectCollection}})},{"./acebase-base":19,"./api":20,"./ascii85":21,"./data-proxy":25,"./data-reference":26,"./data-snapshot":27,"./debug":28,"./id":29,"./object-collection":31,"./partial-array":33,"./path-info":34,"./path-reference":35,"./schema":37,"./simple-cache":38,"./simple-colors":39,"./simple-event-emitter":40,"./subscription":41,"./transport":42,"./type-mappings":43,"./utils":44}],31:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.ObjectCollection=void 0;const id_1=require("./id");class ObjectCollection{static from(array){const collection={};array.forEach((child=>{collection[id_1.ID.generate()]=child}));return collection}}exports.ObjectCollection=ObjectCollection},{"./id":29}],32:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.ObservableShim=exports.setObservable=exports.getObservable=void 0;let _observable;function getObservable(){if(_observable){return _observable}if(typeof window!=="undefined"&&window.Observable){_observable=window.Observable;return _observable}try{const{Observable:Observable}=require("rxjs");if(!Observable){throw new Error("not loaded")}_observable=Observable;return Observable}catch(err){throw new Error("RxJS Observable could not be loaded. If you are using a browser build, add it to AceBase using db.setObservable. For node.js builds, add it to your project with: npm i rxjs")}}exports.getObservable=getObservable;function setObservable(Observable){if(Observable==="shim"){console.warn("Using AceBase's simple Observable shim. Only use this if you know what you're doing.");Observable=ObservableShim}_observable=Observable}exports.setObservable=setObservable;class ObservableShim{constructor(create){this._active=false;this._subscribers=[];this._create=create}subscribe(subscriber){if(!this._active){const next=value=>{this._subscribers.forEach((s=>{try{s(value)}catch(err){console.error("Error in subscriber callback:",err)}}))};const observer={next:next};this._cleanup=this._create(observer);this._active=true}this._subscribers.push(subscriber);const unsubscribe=()=>{this._subscribers.splice(this._subscribers.indexOf(subscriber),1);if(this._subscribers.length===0){this._active=false;this._cleanup()}};const subscription={unsubscribe:unsubscribe};return subscription}}exports.ObservableShim=ObservableShim},{rxjs:15}],33:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.PartialArray=void 0;class PartialArray{constructor(sparseArray){if(sparseArray instanceof Array){for(let i=0;ikey.startsWith("[")?parseInt(key.slice(1,-1)):key))}class PathInfo{constructor(path){if(typeof path==="string"){this.keys=getPathKeys(path)}else if(path instanceof Array){this.keys=path}this.path=this.keys.reduce(((path,key,i)=>i===0?`${key}`:typeof key==="string"?`${path}/${key}`:`${path}[${key}]`),"")}static get(path){return new PathInfo(path)}static getChildPath(path,childKey){return PathInfo.get(path).child(childKey).path}static getPathKeys(path){return getPathKeys(path)}get key(){return this.keys.length===0?null:this.keys.slice(-1)[0]}get parent(){if(this.keys.length==0){return null}const parentKeys=this.keys.slice(0,-1);return new PathInfo(parentKeys)}get parentPath(){return this.keys.length===0?null:this.parent.path}child(childKey){if(typeof childKey==="string"){childKey=getPathKeys(childKey)}return new PathInfo(this.keys.concat(childKey))}childPath(childKey){return this.child(childKey).path}get pathKeys(){return this.keys}static extractVariables(varPath,fullPath){if(!varPath.includes("*")&&!varPath.includes("$")){return[]}const keys=getPathKeys(varPath);const pathKeys=getPathKeys(fullPath);let count=0;const variables={get length(){return count}};keys.forEach(((key,index)=>{const pathKey=pathKeys[index];if(key==="*"){variables[count++]=pathKey}else if(typeof key==="string"&&key[0]==="$"){variables[count++]=pathKey;variables[key]=pathKey;const varName=key.slice(1);if(typeof variables[varName]==="undefined"){variables[varName]=pathKey}}}));return variables}static fillVariables(varPath,fullPath){if(varPath.indexOf("*")<0&&varPath.indexOf("$")<0){return varPath}const keys=getPathKeys(varPath);const pathKeys=getPathKeys(fullPath);const merged=keys.map(((key,index)=>{if(key===pathKeys[index]||index>=pathKeys.length){return key}else if(typeof key==="string"&&(key==="*"||key[0]==="$")){return pathKeys[index]}else{throw new Error(`Path "${fullPath}" cannot be used to fill variables of path "${varPath}" because they do not match`)}}));let mergedPath="";merged.forEach((key=>{if(typeof key==="number"){mergedPath+=`[${key}]`}else{if(mergedPath.length>0){mergedPath+="/"}mergedPath+=key}}));return mergedPath}static fillVariables2(varPath,vars){if(typeof vars!=="object"||Object.keys(vars).length===0){return varPath}const pathKeys=getPathKeys(varPath);let n=0;const targetPath=pathKeys.reduce(((path,key)=>{if(typeof key==="string"&&(key==="*"||key.startsWith("$"))){return PathInfo.getChildPath(path,vars[n++])}else{return PathInfo.getChildPath(path,key)}}),"");return targetPath}equals(otherPath){const other=otherPath instanceof PathInfo?otherPath:new PathInfo(otherPath);if(this.path===other.path){return true}if(this.keys.length!==other.keys.length){return false}return this.keys.every(((key,index)=>{const otherKey=other.keys[index];return otherKey===key||typeof otherKey==="string"&&(otherKey==="*"||otherKey[0]==="$")||typeof key==="string"&&(key==="*"||key[0]==="$")}))}isAncestorOf(descendantPath){const descendant=descendantPath instanceof PathInfo?descendantPath:new PathInfo(descendantPath);if(descendant.path===""||this.path===descendant.path){return false}if(this.path===""){return true}if(this.keys.length>=descendant.keys.length){return false}return this.keys.every(((key,index)=>{const otherKey=descendant.keys[index];return otherKey===key||typeof otherKey==="string"&&(otherKey==="*"||otherKey[0]==="$")||typeof key==="string"&&(key==="*"||key[0]==="$")}))}isDescendantOf(ancestorPath){const ancestor=ancestorPath instanceof PathInfo?ancestorPath:new PathInfo(ancestorPath);if(this.path===""||this.path===ancestor.path){return false}if(ancestorPath===""){return true}if(ancestor.keys.length>=this.keys.length){return false}return ancestor.keys.every(((key,index)=>{const otherKey=this.keys[index];return otherKey===key||typeof otherKey==="string"&&(otherKey==="*"||otherKey[0]==="$")||typeof key==="string"&&(key==="*"||key[0]==="$")}))}isOnTrailOf(otherPath){const other=otherPath instanceof PathInfo?otherPath:new PathInfo(otherPath);if(this.path.length===0||other.path.length===0){return true}if(this.path===other.path){return true}return this.pathKeys.every(((key,index)=>{if(index>=other.keys.length){return true}const otherKey=other.keys[index];return otherKey===key||typeof otherKey==="string"&&(otherKey==="*"||otherKey[0]==="$")||typeof key==="string"&&(key==="*"||key[0]==="$")}))}isChildOf(otherPath){const other=otherPath instanceof PathInfo?otherPath:new PathInfo(otherPath);if(this.path===""){return false}return this.parent.equals(other)}isParentOf(otherPath){const other=otherPath instanceof PathInfo?otherPath:new PathInfo(otherPath);if(other.path===""){return false}return this.equals(other.parent)}}exports.PathInfo=PathInfo},{}],35:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.PathReference=void 0;class PathReference{constructor(path){this.path=path}}exports.PathReference=PathReference},{}],36:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.default={nextTick(fn){setTimeout(fn,0)}}},{}],37:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.SchemaDefinition=void 0;function parse(definition){let pos=0;function consumeSpaces(){let c;while(c=definition[pos],[" ","\r","\n","\t"].includes(c)){pos++}}function consumeCharacter(c){if(definition[pos]!==c){throw new Error(`Unexpected character at position ${pos}. Expected: '${c}', found '${definition[pos]}'`)}pos++}function readProperty(){consumeSpaces();const prop={name:"",optional:false,wildcard:false};let c;while(c=definition[pos],c==="_"||c==="$"||c>="a"&&c<="z"||c>="A"&&c<="Z"||prop.name.length>0&&c>="0"&&c<="9"||prop.name.length===0&&c==="*"){prop.name+=c;pos++}if(prop.name.length===0){throw new Error(`Property name expected at position ${pos}, found: ${definition.slice(pos,pos+10)}..`)}if(definition[pos]==="?"){prop.optional=true;pos++}if(prop.name==="*"||prop.name[0]==="$"){prop.optional=true;prop.wildcard=true}consumeSpaces();consumeCharacter(":");return prop}function readType(){consumeSpaces();let type={typeOf:"any"},c;let name="";while(c=definition[pos],c>="a"&&c<="z"||c>="A"&&c<="Z"){name+=c;pos++}if(name.length===0){if(definition[pos]==="*"){consumeCharacter("*");type.typeOf="any"}else if(["'",'"',"`"].includes(definition[pos])){type.typeOf="string";type.value="";const quote=definition[pos];consumeCharacter(quote);while(c=definition[pos],c&&c!==quote){type.value+=c;pos++}consumeCharacter(quote)}else if(definition[pos]>="0"&&definition[pos]<="9"){type.typeOf="number";let nr="";while(c=definition[pos],c==="."||c==="n"||c>="0"&&c<="9"){nr+=c;pos++}if(nr.endsWith("n")){type.value=BigInt(nr)}else if(nr.includes(".")){type.value=parseFloat(nr)}else{type.value=parseInt(nr)}}else if(definition[pos]==="{"){consumeCharacter("{");type.typeOf="object";type.instanceOf=Object;type.children=[];while(true){const prop=readProperty();const types=readTypes();type.children.push({name:prop.name,optional:prop.optional,wildcard:prop.wildcard,types:types});consumeSpaces();if(definition[pos]==="}"){break}consumeCharacter(",")}consumeCharacter("}")}else if(definition[pos]==="/"){consumeCharacter("/");let pattern="",flags="";while(c=definition[pos],c!=="/"||pattern.endsWith("\\")){pattern+=c;pos++}consumeCharacter("/");while(c=definition[pos],["g","i","m","s","u","y","d"].includes(c)){flags+=c;pos++}type.typeOf="string";type.matches=new RegExp(pattern,flags)}else{throw new Error(`Expected a type definition at position ${pos}, found character '${definition[pos]}'`)}}else if(["string","number","boolean","bigint","undefined","String","Number","Boolean","BigInt"].includes(name)){type.typeOf=name.toLowerCase()}else if(name==="Object"||name==="object"){type.typeOf="object";type.instanceOf=Object}else if(name==="Date"){type.typeOf="object";type.instanceOf=Date}else if(name==="Binary"||name==="binary"){type.typeOf="object";type.instanceOf=ArrayBuffer}else if(name==="any"){type.typeOf="any"}else if(name==="null"){type.typeOf="object";type.value=null}else if(name==="Array"){consumeCharacter("<");type.typeOf="object";type.instanceOf=Array;type.genericTypes=readTypes();consumeCharacter(">")}else if(["true","false"].includes(name)){type.typeOf="boolean";type.value=name==="true"}else{throw new Error(`Unknown type at position ${pos}: "${type}"`)}consumeSpaces();while(definition[pos]==="["){consumeCharacter("[");consumeCharacter("]");type={typeOf:"object",instanceOf:Array,genericTypes:[type]}}return type}function readTypes(){consumeSpaces();const types=[readType()];while(definition[pos]==="|"){consumeCharacter("|");types.push(readType());consumeSpaces()}return types}return readType()}function checkObject(path,properties,obj,partial){const invalidProperties=properties.find((prop=>prop.name==="*"||prop.name[0]==="$"))?[]:Object.keys(obj).filter((key=>![null,undefined].includes(obj[key])&&!properties.find((prop=>prop.name===key))));if(invalidProperties.length>0){return{ok:false,reason:`Object at path "${path}" cannot have propert${invalidProperties.length===1?"y":"ies"} ${invalidProperties.map((p=>`"${p}"`)).join(", ")}`}}function checkProperty(property){const hasValue=![null,undefined].includes(obj[property.name]);if(!property.optional&&(partial?obj[property.name]===null:!hasValue)){return{ok:false,reason:`Property at path "${path}/${property.name}" is not optional`}}if(hasValue&&property.types.length===1){return checkType(`${path}/${property.name}`,property.types[0],obj[property.name],false)}if(hasValue&&!property.types.some((type=>checkType(`${path}/${property.name}`,type,obj[property.name],false).ok))){return{ok:false,reason:`Property at path "${path}/${property.name}" does not match any of ${property.types.length} allowed types`}}return{ok:true}}const namedProperties=properties.filter((prop=>!prop.wildcard));const failedProperty=namedProperties.find((prop=>!checkProperty(prop).ok));if(failedProperty){const reason=checkProperty(failedProperty).reason;return{ok:false,reason:reason}}const wildcardProperty=properties.find((prop=>prop.wildcard));if(!wildcardProperty){return{ok:true}}const wildcardChildKeys=Object.keys(obj).filter((key=>!namedProperties.find((prop=>prop.name===key))));let result={ok:true};for(let i=0;i0){if(type.typeOf!=="object"){return{ok:false,reason:`path "${path}" must be typeof ${type.typeOf}`}}if(!type.children){return ok}const childKey=trailKeys[0];let property=type.children.find((prop=>prop.name===childKey));if(!property){property=type.children.find((prop=>prop.name==="*"||prop.name[0]==="$"))}if(!property){return{ok:false,reason:`Object at path "${path}" cannot have property "${childKey}"`}}if(property.optional&&value===null&&trailKeys.length===1){return ok}let result;property.types.some((type=>{const childPath=typeof childKey==="number"?`${path}[${childKey}]`:`${path}/${childKey}`;result=checkType(childPath,type,value,partial,trailKeys.slice(1));return result.ok}));return result}if(value===null){return ok}if(type.instanceOf===Object&&(typeof value!=="object"||value instanceof Array||value instanceof Date)){return{ok:false,reason:`path "${path}" must be an object collection`}}if(type.instanceOf&&(typeof value!=="object"||value.constructor!==type.instanceOf)){return{ok:false,reason:`path "${path}" must be an instance of ${type.instanceOf.name}`}}if("value"in type&&value!==type.value){return{ok:false,reason:`path "${path}" must be value: ${type.value}`}}if(typeof value!==type.typeOf){return{ok:false,reason:`path "${path}" must be typeof ${type.typeOf}`}}if(type.instanceOf===Array&&type.genericTypes&&!value.every((v=>type.genericTypes.some((t=>checkType(path,t,v,false).ok))))){return{ok:false,reason:`every array value of path "${path}" must match one of the specified types`}}if(type.typeOf==="object"&&type.children){return checkObject(path,type.children,value,partial)}if(type.matches&&!type.matches.test(value)){return{ok:false,reason:`path "${path}" must match regular expression /${type.matches.source}/${type.matches.flags}`}}return ok}function getConstructorType(val){switch(val){case String:return"string";case Number:return"number";case Boolean:return"boolean";case Date:return"Date";case BigInt:return"bigint";case Array:throw new Error("Schema error: Array cannot be used without a type. Use string[] or Array instead");default:throw new Error(`Schema error: unknown type used: ${val.name}`)}}class SchemaDefinition{constructor(definition){this.source=definition;if(typeof definition==="object"){const toTS=obj=>"{"+Object.keys(obj).map((key=>{let val=obj[key];if(val===undefined){val="undefined"}else if(val instanceof RegExp){val=`/${val.source}/${val.flags}`}else if(typeof val==="object"){val=toTS(val)}else if(typeof val==="function"){val=getConstructorType(val)}else if(!["string","number","boolean","bigint"].includes(typeof val)){throw new Error(`Type definition for key "${key}" must be a string, number, boolean, bigint, object, regular expression, or one of these classes: String, Number, Boolean, Date, BigInt`)}return`${key}:${val}`})).join(",")+"}";this.text=toTS(definition)}else if(typeof definition==="string"){this.text=definition}else{throw new Error("Type definiton must be a string or an object")}this.type=parse(this.text)}check(path,value,partial,trailKeys){return checkType(path,this.type,value,partial,trailKeys)}}exports.SchemaDefinition=SchemaDefinition},{}],38:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.SimpleCache=void 0;const utils_1=require("./utils");const calculateExpiryTime=expirySeconds=>expirySeconds>0?Date.now()+expirySeconds*1e3:Infinity;class SimpleCache{constructor(options){var _a;this.enabled=true;if(typeof options==="number"){options={expirySeconds:options}}options.cloneValues=options.cloneValues!==false;if(typeof options.expirySeconds!=="number"&&typeof options.maxEntries!=="number"){throw new Error("Either expirySeconds or maxEntries must be specified")}this.options=options;this.cache=new Map;const interval=setInterval((()=>{this.cleanUp()}),60*1e3);(_a=interval.unref)===null||_a===void 0?void 0:_a.call(interval)}get size(){return this.cache.size}has(key){if(!this.enabled){return false}return this.cache.has(key)}get(key){if(!this.enabled){return null}const entry=this.cache.get(key);if(!entry){return null}entry.expires=calculateExpiryTime(this.options.expirySeconds);entry.accessed=Date.now();return this.options.cloneValues?(0,utils_1.cloneObject)(entry.value):entry.value}set(key,value){if(this.options.maxEntries>0&&this.cache.size>=this.options.maxEntries&&!this.cache.has(key)){let oldest=null;const now=Date.now();for(const[key,entry]of this.cache.entries()){if(entry.expires<=now){this.cache.delete(key);oldest=null;break}if(!oldest||entry.accessed{if(entry.expires<=now){this.cache.delete(key)}}))}}exports.SimpleCache=SimpleCache},{"./utils":44}],39:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.Colorize=exports.SetColorsEnabled=exports.ColorsSupported=exports.ColorStyle=void 0;const process_1=require("./process");const FontCode={bold:1,dim:2,italic:3,underline:4,inverse:7,hidden:8,strikethrough:94};const ColorCode={black:30,red:31,green:32,yellow:33,blue:34,magenta:35,cyan:36,white:37,grey:90,brightRed:91};const BgColorCode={bgBlack:40,bgRed:41,bgGreen:42,bgYellow:43,bgBlue:44,bgMagenta:45,bgCyan:46,bgWhite:47,bgGrey:100,bgBrightRed:101};const ResetCode={all:0,color:39,background:49,bold:22,dim:22,italic:23,underline:24,inverse:27,hidden:28,strikethrough:29};var ColorStyle;(function(ColorStyle){ColorStyle["reset"]="reset";ColorStyle["bold"]="bold";ColorStyle["dim"]="dim";ColorStyle["italic"]="italic";ColorStyle["underline"]="underline";ColorStyle["inverse"]="inverse";ColorStyle["hidden"]="hidden";ColorStyle["strikethrough"]="strikethrough";ColorStyle["black"]="black";ColorStyle["red"]="red";ColorStyle["green"]="green";ColorStyle["yellow"]="yellow";ColorStyle["blue"]="blue";ColorStyle["magenta"]="magenta";ColorStyle["cyan"]="cyan";ColorStyle["grey"]="grey";ColorStyle["bgBlack"]="bgBlack";ColorStyle["bgRed"]="bgRed";ColorStyle["bgGreen"]="bgGreen";ColorStyle["bgYellow"]="bgYellow";ColorStyle["bgBlue"]="bgBlue";ColorStyle["bgMagenta"]="bgMagenta";ColorStyle["bgCyan"]="bgCyan";ColorStyle["bgWhite"]="bgWhite";ColorStyle["bgGrey"]="bgGrey"})(ColorStyle=exports.ColorStyle||(exports.ColorStyle={}));function ColorsSupported(){if(typeof process_1.default==="undefined"||!process_1.default.stdout||!process_1.default.env||!process_1.default.platform||process_1.default.platform==="browser"){return false}if(process_1.default.platform==="win32"){return true}const env=process_1.default.env;if(env.COLORTERM){return true}if(env.TERM==="dumb"){return false}if(env.CI||env.TEAMCITY_VERSION){return!!env.TRAVIS}if(["iTerm.app","HyperTerm","Hyper","MacTerm","Apple_Terminal","vscode"].includes(env.TERM_PROGRAM)){return true}if(/^xterm-256|^screen|^xterm|^vt100|color|ansi|cygwin|linux/i.test(env.TERM)){return true}return false}exports.ColorsSupported=ColorsSupported;let _enabled=ColorsSupported();function SetColorsEnabled(enabled){_enabled=ColorsSupported()&&enabled}exports.SetColorsEnabled=SetColorsEnabled;function Colorize(str,style){if(!_enabled){return str}const openCodes=[],closeCodes=[];const addStyle=style=>{if(style===ColorStyle.reset){openCodes.push(ResetCode.all)}else if(style in FontCode){openCodes.push(FontCode[style]);closeCodes.push(ResetCode[style])}else if(style in ColorCode){openCodes.push(ColorCode[style]);closeCodes.push(ResetCode.color)}else if(style in BgColorCode){openCodes.push(BgColorCode[style]);closeCodes.push(ResetCode.background)}};if(style instanceof Array){style.forEach(addStyle)}else{addStyle(style)}const open=openCodes.map((code=>"["+code+"m")).join("");const close=closeCodes.map((code=>"["+code+"m")).join("");return str.split("\n").map((line=>open+line+close)).join("\n")}exports.Colorize=Colorize;String.prototype.colorize=function(style){return Colorize(this,style)}},{"./process":36}],40:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.SimpleEventEmitter=void 0;function runCallback(callback,data){try{callback(data)}catch(err){console.error("Error in subscription callback",err)}}class SimpleEventEmitter{constructor(){this._subscriptions=[];this._oneTimeEvents=new Map}on(event,callback){if(this._oneTimeEvents.has(event)){return runCallback(callback,this._oneTimeEvents.get(event))}this._subscriptions.push({event:event,callback:callback,once:false});return this}off(event,callback){this._subscriptions=this._subscriptions.filter((s=>s.event!==event||callback&&s.callback!==callback));return this}once(event,callback){return new Promise((resolve=>{const ourCallback=data=>{resolve(data);callback===null||callback===void 0?void 0:callback(data)};if(this._oneTimeEvents.has(event)){runCallback(ourCallback,this._oneTimeEvents.get(event))}else{this._subscriptions.push({event:event,callback:ourCallback,once:true})}}))}emit(event,data){if(this._oneTimeEvents.has(event)){throw new Error(`Event "${event}" was supposed to be emitted only once`)}for(let i=0;i{if(this._internal.state==="active"){return resolve()}else if(this._internal.state==="canceled"&&!callback){return reject(new Error(this._internal.cancelReason))}const noop=()=>{};this._internal.activatePromises.push({resolve:resolve,reject:callback?noop:reject})}))}_setActivationState(activated,cancelReason){this._internal.cancelReason=cancelReason;this._internal.state=activated?"active":"canceled";while(this._internal.activatePromises.length>0){const p=this._internal.activatePromises.shift();if(activated){p.callback&&p.callback(true);p.resolve&&p.resolve()}else{p.callback&&p.callback(false,cancelReason);p.reject&&p.reject(cancelReason)}}}}exports.EventSubscription=EventSubscription;class EventPublisher{constructor(publish,start,cancel){this.publish=publish;this.start=start;this.cancel=cancel}}exports.EventPublisher=EventPublisher;class EventStream{constructor(eventPublisherCallback){const subscribers=[];let noMoreSubscribersCallback;let activationState;const _stoppedState="stopped (no more subscribers)";this.subscribe=(callback,activationCallback)=>{if(typeof callback!=="function"){throw new TypeError("callback must be a function")}else if(activationState===_stoppedState){throw new Error("stream can't be used anymore because all subscribers were stopped")}const sub={callback:callback,activationCallback:function(activated,cancelReason){activationCallback&&activationCallback(activated,cancelReason);this.subscription._setActivationState(activated,cancelReason)},subscription:new EventSubscription((function stop(){subscribers.splice(subscribers.indexOf(this),1);return checkActiveSubscribers()}))};subscribers.push(sub);if(typeof activationState!=="undefined"){if(activationState===true){activationCallback&&activationCallback(true);sub.subscription._setActivationState(true)}else if(typeof activationState==="string"){activationCallback&&activationCallback(false,activationState);sub.subscription._setActivationState(false,activationState)}}return sub.subscription};const checkActiveSubscribers=()=>{let ret;if(subscribers.length===0){ret=noMoreSubscribersCallback&&noMoreSubscribersCallback();activationState=_stoppedState}return Promise.resolve(ret)};this.unsubscribe=callback=>{const remove=callback?subscribers.filter((sub=>sub.callback===callback)):subscribers;remove.forEach((sub=>{const i=subscribers.indexOf(sub);subscribers.splice(i,1)}));checkActiveSubscribers()};this.stop=()=>{subscribers.splice(0);checkActiveSubscribers()};const publish=val=>{subscribers.forEach((sub=>{try{sub.callback(val)}catch(err){console.error(`Error running subscriber callback: ${err.message}`)}}));if(subscribers.length===0){checkActiveSubscribers()}return subscribers.length>0};const start=allSubscriptionsStoppedCallback=>{activationState=true;noMoreSubscribersCallback=allSubscriptionsStoppedCallback;subscribers.forEach((sub=>{sub.activationCallback&&sub.activationCallback(true)}))};const cancel=reason=>{activationState=reason;subscribers.forEach((sub=>{sub.activationCallback&&sub.activationCallback(false,reason||new Error("unknown reason"))}));subscribers.splice(0)};const publisher=new EventPublisher(publish,start,cancel);eventPublisherCallback(publisher)}}exports.EventStream=EventStream},{}],42:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.deserialize2=exports.serialize2=exports.serialize=exports.detectSerializeVersion=exports.deserialize=void 0;const path_reference_1=require("./path-reference");const utils_1=require("./utils");const ascii85_1=require("./ascii85");const path_info_1=require("./path-info");const partial_array_1=require("./partial-array");const deserialize=data=>{if(data.map===null||typeof data.map==="undefined"){if(typeof data.val==="undefined"){throw new Error("serialized value must have a val property")}return data.val}const deserializeValue=(type,val)=>{if(type==="date"){return new Date(val)}else if(type==="binary"){return ascii85_1.ascii85.decode(val)}else if(type==="reference"){return new path_reference_1.PathReference(val)}else if(type==="regexp"){return new RegExp(val.pattern,val.flags)}else if(type==="array"){return new partial_array_1.PartialArray(val)}else if(type==="bigint"){return BigInt(val)}return val};if(typeof data.map==="string"){return deserializeValue(data.map,data.val)}Object.keys(data.map).forEach((path=>{const type=data.map[path];const keys=path_info_1.PathInfo.getPathKeys(path);let parent=data;let key="val";let val=data.val;keys.forEach((k=>{key=k;parent=val;val=val[key]}));parent[key]=deserializeValue(type,val)}));return data.val};exports.deserialize=deserialize;const detectSerializeVersion=data=>{if(typeof data!=="object"||data===null){return 2}if("map"in data&&"val"in data){return 1}else if("val"in data){if(Object.keys(data).length>1){return 2}return 1}return 2};exports.detectSerializeVersion=detectSerializeVersion;const serialize=obj=>{var _a;if(obj===null||typeof obj!=="object"||obj instanceof Date||obj instanceof ArrayBuffer||obj instanceof path_reference_1.PathReference||obj instanceof RegExp){const ser=(0,exports.serialize)({value:obj});return{map:(_a=ser.map)===null||_a===void 0?void 0:_a.value,val:ser.val.value}}obj=(0,utils_1.cloneObject)(obj);const process=(obj,mappings,prefix)=>{if(obj instanceof partial_array_1.PartialArray){mappings[prefix]="array"}Object.keys(obj).forEach((key=>{const val=obj[key];const path=prefix.length===0?key:`${prefix}/${key}`;if(typeof val==="bigint"){obj[key]=val.toString();mappings[path]="bigint"}else if(val instanceof Date){obj[key]=val.toISOString();mappings[path]="date"}else if(val instanceof ArrayBuffer){obj[key]=ascii85_1.ascii85.encode(val);mappings[path]="binary"}else if(val instanceof path_reference_1.PathReference){obj[key]=val.path;mappings[path]="reference"}else if(val instanceof RegExp){obj[key]={pattern:val.source,flags:val.flags};mappings[path]="regexp"}else if(typeof val==="object"&&val!==null){process(val,mappings,path)}}))};const mappings={};process(obj,mappings,"");const serialized={val:obj};if(Object.keys(mappings).length>0){serialized.map=mappings}return serialized};exports.serialize=serialize;const serialize2=obj=>{const getSerializedValue=val=>{if(typeof val==="bigint"){return{".type":"bigint",".val":val.toString()}}else if(val instanceof Date){return{".type":"date",".val":val.toISOString()}}else if(val instanceof ArrayBuffer){return{".type":"binary",".val":ascii85_1.ascii85.encode(val)}}else if(val instanceof path_reference_1.PathReference){return{".type":"reference",".val":val.path}}else if(val instanceof RegExp){return{".type":"regexp",".val":`/${val.source}/${val.flags}`}}else if(typeof val==="object"&&val!==null){if(val instanceof Array){const copy=[];for(let i=0;i{if(typeof data!=="object"||data===null){return data}switch(data[".type"]){case undefined:{if(data instanceof Array){const copy=[];const arr=data;for(let i=0;i{const mkeys=path_info_1.PathInfo.getPathKeys(mpath);if(mkeys.length!==keys.length){return false}return mkeys.every(((mkey,index)=>{if(mkey==="*"||mkey[0]==="$"){return true}return mkey===keys[index]}))}));const mapping=mappings[mappedPath];return mapping}function map(mappings,path){const targetPath=path_info_1.PathInfo.get(path).parentPath;if(targetPath===null){return}return get(mappings,targetPath)}function mapDeep(mappings,entryPath){entryPath=entryPath.replace(/^\/|\/$/g,"");const pathInfo=path_info_1.PathInfo.get(entryPath);const startPath=pathInfo.parentPath;const keys=startPath?path_info_1.PathInfo.getPathKeys(startPath):[];const matches=Object.keys(mappings).reduce(((m,mpath)=>{const mkeys=path_info_1.PathInfo.getPathKeys(mpath);if(mkeys.length{if(index>=keys.length){return false}else if(mkey==="*"||mkey[0]==="$"||mkey===keys[index]){return true}else{isMatch=false;return false}}))}if(isMatch){const mapping=mappings[mpath];m.push({path:mpath,type:mapping})}return m}),[]);return matches}function process(db,mappings,path,obj,action){if(obj===null||typeof obj!=="object"){return obj}const keys=path_info_1.PathInfo.getPathKeys(path);const m=mapDeep(mappings,path);const changes=[];m.sort(((a,b)=>path_info_1.PathInfo.getPathKeys(a.path).length>path_info_1.PathInfo.getPathKeys(b.path).length?-1:1));m.forEach((mapping=>{const mkeys=path_info_1.PathInfo.getPathKeys(mapping.path);mkeys.push("*");const mTrailKeys=mkeys.slice(keys.length);if(mTrailKeys.length===0){const vars=path_info_1.PathInfo.extractVariables(mapping.path,path);const ref=new data_reference_1.DataReference(db,path,vars);if(action==="serialize"){obj=mapping.type.serialize(obj,ref)}else if(action==="deserialize"){const snap=new data_snapshot_1.DataSnapshot(ref,obj);obj=mapping.type.deserialize(snap)}return}const process=(parentPath,parent,keys)=>{if(obj===null||typeof obj!=="object"){return obj}const key=keys[0];let children=[];if(key==="*"||key[0]==="$"){if(parent instanceof Array){children=parent.map(((val,index)=>({key:index,val:val})))}else{children=Object.keys(parent).map((k=>({key:k,val:parent[k]})))}}else{const child=parent[key];if(typeof child==="object"){children.push({key:key,val:child})}}children.forEach((child=>{const childPath=path_info_1.PathInfo.getChildPath(parentPath,child.key);const vars=path_info_1.PathInfo.extractVariables(mapping.path,childPath);const ref=new data_reference_1.DataReference(db,childPath,vars);if(keys.length===1){if(action==="serialize"){changes.push({parent:parent,key:child.key,original:parent[child.key]});parent[child.key]=mapping.type.serialize(child.val,ref)}else if(action==="deserialize"){const snap=new data_snapshot_1.DataSnapshot(ref,child.val);parent[child.key]=mapping.type.deserialize(snap)}}else{process(childPath,child.val,keys.slice(1))}}))};process(path,obj,mTrailKeys)}));if(action==="serialize"){obj=(0,utils_1.cloneObject)(obj);if(changes.length>0){changes.forEach((change=>{change.parent[change.key]=change.original}))}}return obj}const _mappings=Symbol("mappings");class TypeMappings{constructor(db){this.db=db;this[_mappings]={}}get mappings(){return this[_mappings]}map(path){return map(this[_mappings],path)}bind(path,type,options={}){if(typeof path!=="string"){throw new TypeError("path must be a string")}if(typeof type!=="function"){throw new TypeError("constructor must be a function")}if(typeof options.serializer==="undefined"){}else if(typeof options.serializer==="string"){if(typeof type.prototype[options.serializer]==="function"){options.serializer=type.prototype[options.serializer]}else{throw new TypeError(`${type.name}.prototype.${options.serializer} is not a function, cannot use it as serializer`)}}else if(typeof options.serializer!=="function"){throw new TypeError(`serializer for class ${type.name} must be a function, or the name of a prototype method`)}if(typeof options.creator==="undefined"){if(typeof type.create==="function"){options.creator=type.create}}else if(typeof options.creator==="string"){if(typeof type[options.creator]==="function"){options.creator=type[options.creator]}else{throw new TypeError(`${type.name}.${options.creator} is not a function, cannot use it as creator`)}}else if(typeof options.creator!=="function"){throw new TypeError(`creator for class ${type.name} must be a function, or the name of a static method`)}path=path.replace(/^\/|\/$/g,"");this[_mappings][path]={db:this.db,type:type,creator:options.creator,serializer:options.serializer,deserialize(snap){let obj;if(this.creator){obj=this.creator.call(this.type,snap)}else{obj=new this.type(snap)}return obj},serialize(obj,ref){if(this.serializer){obj=this.serializer.call(obj,ref,obj)}else if(obj&&typeof obj.serialize==="function"){obj=obj.serialize(ref,obj)}return obj}}}serialize(path,obj){return process(this.db,this[_mappings],path,obj,"serialize")}deserialize(path,obj){return process(this.db,this[_mappings],path,obj,"deserialize")}}exports.TypeMappings=TypeMappings},{"./data-reference":26,"./data-snapshot":27,"./path-info":34,"./utils":44}],44:[function(require,module,exports){(function(Buffer){(function(){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.defer=exports.getChildValues=exports.getMutations=exports.compareValues=exports.ObjectDifferences=exports.valuesAreEqual=exports.cloneObject=exports.concatTypedArrays=exports.decodeString=exports.encodeString=exports.bytesToBigint=exports.bigintToBytes=exports.bytesToNumber=exports.numberToBytes=void 0;const path_reference_1=require("./path-reference");const process_1=require("./process");const partial_array_1=require("./partial-array");function numberToBytes(number){const bytes=new Uint8Array(8);const view=new DataView(bytes.buffer);view.setFloat64(0,number);return new Array(...bytes)}exports.numberToBytes=numberToBytes;function bytesToNumber(bytes){const length=Array.isArray(bytes)?bytes.length:bytes.byteLength;if(length!==8){throw new TypeError("must be 8 bytes")}const bin=new Uint8Array(bytes);const view=new DataView(bin.buffer);const nr=view.getFloat64(0);return nr}exports.bytesToNumber=bytesToNumber;const big={zero:BigInt(0),one:BigInt(1),two:BigInt(2),eight:BigInt(8),ff:BigInt(255)};function bigintToBytes(number){if(typeof number!=="bigint"){throw new Error("number must be a bigint")}const bytes=[];const negative=number>big.eight}while(number!==(negative?-big.one:big.zero));bytes.reverse();if(negative?bytes[0]<128:bytes[0]>=128){bytes.unshift(negative?255:0)}return bytes}exports.bigintToBytes=bigintToBytes;function bytesToBigint(bytes){const negative=bytes[0]>=128;let number=big.zero;for(let b of bytes){if(negative){b=~b&255}number=(number<128){if((code&55296)===55296){const nextCode=str.charCodeAt(i+1);if((nextCode&56320)!==56320){throw new Error("follow-up utf-16 character does not start with 0xDC00")}i++;const p1=code&1023;const p2=nextCode&1023;code=65536|p1<<10|p2}if(code<2048){const b1=192|code>>6&31;const b2=128|code&63;arr.push(b1,b2)}else if(code<65536){const b1=224|code>>12&15;const b2=128|code>>6&63;const b3=128|code&63;arr.push(b1,b2,b3)}else if(code<2097152){const b1=240|code>>18&7;const b2=128|code>>12&63;const b3=128|code>>6&63;const b4=128|code&63;arr.push(b1,b2,b3,b4)}else{throw new Error(`Cannot convert character ${str.charAt(i)} (code ${code}) to utf-8`)}}else{arr.push(code<128?code:63)}}return new Uint8Array(arr)}}exports.encodeString=encodeString;function decodeString(buffer){if(typeof TextDecoder!=="undefined"){const decoder=new TextDecoder;if(buffer instanceof Uint8Array){return decoder.decode(buffer)}const buf=Uint8Array.from(buffer);return decoder.decode(buf)}else if(typeof Buffer==="function"){if(buffer instanceof Array){buffer=Uint8Array.from(buffer)}if(!(buffer instanceof Buffer)&&"buffer"in buffer&&buffer.buffer instanceof ArrayBuffer){const typedArray=buffer;buffer=Buffer.from(typedArray.buffer,typedArray.byteOffset,typedArray.byteLength)}if(!(buffer instanceof Buffer)){throw new Error("Unsupported buffer argument")}return buffer.toString("utf-8")}else{if(!(buffer instanceof Uint8Array)&&"buffer"in buffer&&buffer["buffer"]instanceof ArrayBuffer){const typedArray=buffer;buffer=new Uint8Array(typedArray.buffer,typedArray.byteOffset,typedArray.byteLength)}if(buffer instanceof Buffer||buffer instanceof Array||buffer instanceof Uint8Array){let str="";for(let i=0;i128){if((code&240)===240){const b1=code,b2=buffer[i+1],b3=buffer[i+2],b4=buffer[i+3];code=(b1&7)<<18|(b2&63)<<12|(b3&63)<<6|b4&63;i+=3}else if((code&224)===224){const b1=code,b2=buffer[i+1],b3=buffer[i+2];code=(b1&15)<<12|(b2&63)<<6|b3&63;i+=2}else if((code&192)===192){const b1=code,b2=buffer[i+1];code=(b1&31)<<6|b2&63;i++}else{throw new Error("invalid utf-8 data")}}if(code>=65536){code^=65536;const p1=55296|code>>10;const p2=56320|code&1023;str+=String.fromCharCode(p1);str+=String.fromCharCode(p2)}else{str+=String.fromCharCode(code)}}return str}else{throw new Error("Unsupported buffer argument")}}}exports.decodeString=decodeString;function concatTypedArrays(a,b){const c=new a.constructor(a.length+b.length);c.set(a);c.set(b,a.length);return c}exports.concatTypedArrays=concatTypedArrays;function cloneObject(original,stack){var _a;if(((_a=original===null||original===void 0?void 0:original.constructor)===null||_a===void 0?void 0:_a.name)==="DataSnapshot"){throw new TypeError(`Object to clone is a DataSnapshot (path "${original.ref.path}")`)}const checkAndFixTypedArray=obj=>{if(obj!==null&&typeof obj==="object"&&typeof obj.constructor==="function"&&typeof obj.constructor.name==="string"&&["Buffer","Uint8Array","Int8Array","Uint16Array","Int16Array","Uint32Array","Int32Array","BigUint64Array","BigInt64Array"].includes(obj.constructor.name)){obj=obj.buffer.slice(obj.byteOffset,obj.byteOffset+obj.byteLength)}return obj};original=checkAndFixTypedArray(original);if(typeof original!=="object"||original===null||original instanceof Date||original instanceof ArrayBuffer||original instanceof path_reference_1.PathReference||original instanceof RegExp){return original}const cloneValue=val=>{if(stack.indexOf(val)>=0){throw new ReferenceError("object contains a circular reference")}val=checkAndFixTypedArray(val);if(val===null||val instanceof Date||val instanceof ArrayBuffer||val instanceof path_reference_1.PathReference||val instanceof RegExp){return val}else if(typeof val==="object"){stack.push(val);val=cloneObject(val,stack);stack.pop();return val}else{return val}};if(typeof stack==="undefined"){stack=[original]}const clone=original instanceof Array?[]:original instanceof partial_array_1.PartialArray?new partial_array_1.PartialArray:{};Object.keys(original).forEach((key=>{const val=original[key];if(typeof val==="function"){return}clone[key]=cloneValue(val)}));return clone}exports.cloneObject=cloneObject;const isTypedArray=val=>typeof val==="object"&&["ArrayBuffer","Buffer","Uint8Array","Uint16Array","Uint32Array","Int8Array","Int16Array","Int32Array"].includes(val.constructor.name);function valuesAreEqual(val1,val2){if(val1===val2){return true}if(typeof val1!==typeof val2){return false}if(typeof val1==="object"||typeof val2==="object"){if(val1===null||val2===null){return false}if(val1 instanceof path_reference_1.PathReference||val2 instanceof path_reference_1.PathReference){return val1 instanceof path_reference_1.PathReference&&val2 instanceof path_reference_1.PathReference&&val1.path===val2.path}if(val1 instanceof Date||val2 instanceof Date){return val1 instanceof Date&&val2 instanceof Date&&val1.getTime()===val2.getTime()}if(val1 instanceof Array||val2 instanceof Array){return val1 instanceof Array&&val2 instanceof Array&&val1.length===val2.length&&val1.every(((item,i)=>valuesAreEqual(val1[i],val2[i])))}if(isTypedArray(val1)||isTypedArray(val2)){if(!isTypedArray(val1)||!isTypedArray(val2)||val1.byteLength===val2.byteLength){return false}const typed1=val1 instanceof ArrayBuffer?new Uint8Array(val1):new Uint8Array(val1.buffer,val1.byteOffset,val1.byteLength),typed2=val2 instanceof ArrayBuffer?new Uint8Array(val2):new Uint8Array(val2.buffer,val2.byteOffset,val2.byteLength);return typed1.every(((val,i)=>typed2[i]===val))}const keys1=Object.keys(val1),keys2=Object.keys(val2);return keys1.length===keys2.length&&keys1.every((key=>keys2.includes(key)))&&keys1.every((key=>valuesAreEqual(val1[key],val2[key])))}return false}exports.valuesAreEqual=valuesAreEqual;class ObjectDifferences{constructor(added,removed,changed){this.added=added;this.removed=removed;this.changed=changed}forChild(key){if(this.added.includes(key)){return"added"}if(this.removed.includes(key)){return"removed"}const changed=this.changed.find((ch=>ch.key===key));return changed?changed.change:"identical"}}exports.ObjectDifferences=ObjectDifferences;function compareValues(oldVal,newVal,sortedResults=false){const voids=[undefined,null];if(oldVal===newVal){return"identical"}else if(voids.indexOf(oldVal)>=0&&voids.indexOf(newVal)<0){return"added"}else if(voids.indexOf(oldVal)<0&&voids.indexOf(newVal)>=0){return"removed"}else if(typeof oldVal!==typeof newVal){return"changed"}else if(isTypedArray(oldVal)||isTypedArray(newVal)){if(!isTypedArray(oldVal)||!isTypedArray(newVal)){return"changed"}const typed1=oldVal instanceof Uint8Array?oldVal:oldVal instanceof ArrayBuffer?new Uint8Array(oldVal):new Uint8Array(oldVal.buffer,oldVal.byteOffset,oldVal.byteLength);const typed2=newVal instanceof Uint8Array?newVal:newVal instanceof ArrayBuffer?new Uint8Array(newVal):new Uint8Array(newVal.buffer,newVal.byteOffset,newVal.byteLength);return typed1.byteLength===typed2.byteLength&&typed1.every(((val,i)=>typed2[i]===val))?"identical":"changed"}else if(oldVal instanceof Date||newVal instanceof Date){return oldVal instanceof Date&&newVal instanceof Date&&oldVal.getTime()===newVal.getTime()?"identical":"changed"}else if(oldVal instanceof path_reference_1.PathReference||newVal instanceof path_reference_1.PathReference){return oldVal instanceof path_reference_1.PathReference&&newVal instanceof path_reference_1.PathReference&&oldVal.path===newVal.path?"identical":"changed"}else if(typeof oldVal==="object"){const isArray=oldVal instanceof Array;const getKeys=obj=>{let keys=Object.keys(obj).filter((key=>!voids.includes(obj[key])));if(isArray){keys=keys.map((v=>parseInt(v)))}return keys};const oldKeys=getKeys(oldVal);const newKeys=getKeys(newVal);const removedKeys=oldKeys.filter((key=>!newKeys.includes(key)));const addedKeys=newKeys.filter((key=>!oldKeys.includes(key)));const changedKeys=newKeys.reduce(((changed,key)=>{if(oldKeys.includes(key)){const val1=oldVal[key];const val2=newVal[key];const c=compareValues(val1,val2);if(c!=="identical"){changed.push({key:key,change:c})}}return changed}),[]);if(addedKeys.length===0&&removedKeys.length===0&&changedKeys.length===0){return"identical"}else{return new ObjectDifferences(addedKeys,removedKeys,sortedResults?changedKeys.sort(((a,b)=>a.key{switch(compareResult){case"identical":return[];case"changed":return[{target:target,prev:prev,val:val}];case"added":return[{target:target,prev:null,val:val}];case"removed":return[{target:target,prev:prev,val:null}];default:{let changes=[];compareResult.added.forEach((key=>changes.push({target:target.concat(key),prev:null,val:val[key]})));compareResult.removed.forEach((key=>changes.push({target:target.concat(key),prev:prev[key],val:null})));compareResult.changed.forEach((item=>{const childChanges=process(target.concat(item.key),item.change,prev[item.key],val[item.key]);changes=changes.concat(childChanges)}));return changes}}};const compareResult=compareValues(oldVal,newVal,sortedResults);return process([],compareResult,oldVal,newVal)}exports.getMutations=getMutations;function getChildValues(childKey,oldValue,newValue){oldValue=oldValue===null?null:oldValue[childKey];if(typeof oldValue==="undefined"){oldValue=null}newValue=newValue===null?null:newValue[childKey];if(typeof newValue==="undefined"){newValue=null}return{oldValue:oldValue,newValue:newValue}}exports.getChildValues=getChildValues;function defer(fn){process_1.default.nextTick(fn)}exports.defer=defer}).call(this)}).call(this,require("buffer").Buffer)},{"./partial-array":33,"./path-reference":35,"./process":36,buffer:16}]},{},[5])(5)})); \ No newline at end of file +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.io=e():t.io=e()}(this,(function(){return function(t){function e(n){if(r[n])return r[n].exports;var o=r[n]={exports:{},id:n,loaded:!1};return t[n].call(o.exports,o,o.exports,e),o.loaded=!0,o.exports}var r={};return e.m=t,e.c=r,e.p="",e(0)}([function(t,e,r){"use strict";function n(t,e){"object"===("undefined"==typeof t?"undefined":o(t))&&(e=t,t=void 0),e=e||{};var r,n=i(t),s=n.source,p=n.id,h=n.path,u=c[p]&&h in c[p].nsps,f=e.forceNew||e["force new connection"]||!1===e.multiplex||u;return f?r=a(s,e):(c[p]||(c[p]=a(s,e)),r=c[p]),n.query&&!e.query&&(e.query=n.query),r.socket(n.path,e)}var o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i=r(1),s=r(4),a=r(9);r(3)("socket.io-client");t.exports=e=n;var c=e.managers={};e.protocol=s.protocol,e.connect=n,e.Manager=r(9),e.Socket=r(34)},function(t,e,r){"use strict";function n(t,e){var r=t;e=e||"undefined"!=typeof location&&location,null==t&&(t=e.protocol+"//"+e.host),"string"==typeof t&&("/"===t.charAt(0)&&(t="/"===t.charAt(1)?e.protocol+t:e.host+t),/^(https?|wss?):\/\//.test(t)||(t="undefined"!=typeof e?e.protocol+"//"+t:"https://"+t),r=o(t)),r.port||(/^(http|ws)$/.test(r.protocol)?r.port="80":/^(http|ws)s$/.test(r.protocol)&&(r.port="443")),r.path=r.path||"/";var n=r.host.indexOf(":")!==-1,i=n?"["+r.host+"]":r.host;return r.id=r.protocol+"://"+i+":"+r.port,r.href=r.protocol+"://"+i+(e&&e.port===r.port?"":":"+r.port),r}var o=r(2);r(3)("socket.io-client:url");t.exports=n},function(t,e){function r(t,e){var r=/\/{2,9}/g,n=e.replace(r,"/").split("/");return"/"!=e.substr(0,1)&&0!==e.length||n.splice(0,1),"/"==e.substr(e.length-1,1)&&n.splice(n.length-1,1),n}function n(t,e){var r={};return e.replace(/(?:^|&)([^&=]*)=?([^&]*)/g,(function(t,e,n){e&&(r[e]=n)})),r}var o=/^(?:(?![^:@]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/,i=["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"];t.exports=function(t){var e=t,s=t.indexOf("["),a=t.indexOf("]");s!=-1&&a!=-1&&(t=t.substring(0,s)+t.substring(s,a).replace(/:/g,";")+t.substring(a,t.length));for(var c=o.exec(t||""),p={},h=14;h--;)p[i[h]]=c[h]||"";return s!=-1&&a!=-1&&(p.source=e,p.host=p.host.substring(1,p.host.length-1).replace(/;/g,":"),p.authority=p.authority.replace("[","").replace("]","").replace(/;/g,":"),p.ipv6uri=!0),p.pathNames=r(p,p.path),p.queryKey=n(p,p.query),p}},function(t,e){"use strict";t.exports=function(){return function(){}}},function(t,e,r){function n(){}function o(t){var r=""+t.type;if(e.BINARY_EVENT!==t.type&&e.BINARY_ACK!==t.type||(r+=t.attachments+"-"),t.nsp&&"/"!==t.nsp&&(r+=t.nsp+","),null!=t.id&&(r+=t.id),null!=t.data){var n=i(t.data);if(n===!1)return m;r+=n}return r}function i(t){try{return JSON.stringify(t)}catch(t){return!1}}function s(t,e){function r(t){var r=l.deconstructPacket(t),n=o(r.packet),i=r.buffers;i.unshift(n),e(i)}l.removeBlobs(t,r)}function a(){this.reconstructor=null}function c(t){var r=0,n={type:Number(t.charAt(0))};if(null==e.types[n.type])return u("unknown packet type "+n.type);if(e.BINARY_EVENT===n.type||e.BINARY_ACK===n.type){for(var o="";"-"!==t.charAt(++r)&&(o+=t.charAt(r),r!=t.length););if(o!=Number(o)||"-"!==t.charAt(r))throw new Error("Illegal attachments");n.attachments=Number(o)}if("/"===t.charAt(r+1))for(n.nsp="";++r;){var i=t.charAt(r);if(","===i)break;if(n.nsp+=i,r===t.length)break}else n.nsp="/";var s=t.charAt(r+1);if(""!==s&&Number(s)==s){for(n.id="";++r;){var i=t.charAt(r);if(null==i||Number(i)!=i){--r;break}if(n.id+=t.charAt(r),r===t.length)break}n.id=Number(n.id)}if(t.charAt(++r)){var a=p(t.substr(r)),c=a!==!1&&(n.type===e.ERROR||d(a));if(!c)return u("invalid payload");n.data=a}return n}function p(t){try{return JSON.parse(t)}catch(t){return!1}}function h(t){this.reconPack=t,this.buffers=[]}function u(t){return{type:e.ERROR,data:"parser error: "+t}}var f=(r(3)("socket.io-parser"),r(5)),l=r(6),d=r(7),y=r(8);e.protocol=4,e.types=["CONNECT","DISCONNECT","EVENT","ACK","ERROR","BINARY_EVENT","BINARY_ACK"],e.CONNECT=0,e.DISCONNECT=1,e.EVENT=2,e.ACK=3,e.ERROR=4,e.BINARY_EVENT=5,e.BINARY_ACK=6,e.Encoder=n,e.Decoder=a;var m=e.ERROR+'"encode error"';n.prototype.encode=function(t,r){if(e.BINARY_EVENT===t.type||e.BINARY_ACK===t.type)s(t,r);else{var n=o(t);r([n])}},f(a.prototype),a.prototype.add=function(t){var r;if("string"==typeof t)r=c(t),e.BINARY_EVENT===r.type||e.BINARY_ACK===r.type?(this.reconstructor=new h(r),0===this.reconstructor.reconPack.attachments&&this.emit("decoded",r)):this.emit("decoded",r);else{if(!y(t)&&!t.base64)throw new Error("Unknown type: "+t);if(!this.reconstructor)throw new Error("got binary data when not reconstructing a packet");r=this.reconstructor.takeBinaryData(t),r&&(this.reconstructor=null,this.emit("decoded",r))}},a.prototype.destroy=function(){this.reconstructor&&this.reconstructor.finishedReconstruction()},h.prototype.takeBinaryData=function(t){if(this.buffers.push(t),this.buffers.length===this.reconPack.attachments){var e=l.reconstructPacket(this.reconPack,this.buffers);return this.finishedReconstruction(),e}return null},h.prototype.finishedReconstruction=function(){this.reconPack=null,this.buffers=[]}},function(t,e,r){function n(t){if(t)return o(t)}function o(t){for(var e in n.prototype)t[e]=n.prototype[e];return t}t.exports=n,n.prototype.on=n.prototype.addEventListener=function(t,e){return this._callbacks=this._callbacks||{},(this._callbacks["$"+t]=this._callbacks["$"+t]||[]).push(e),this},n.prototype.once=function(t,e){function r(){this.off(t,r),e.apply(this,arguments)}return r.fn=e,this.on(t,r),this},n.prototype.off=n.prototype.removeListener=n.prototype.removeAllListeners=n.prototype.removeEventListener=function(t,e){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var r=this._callbacks["$"+t];if(!r)return this;if(1==arguments.length)return delete this._callbacks["$"+t],this;for(var n,o=0;o0&&!this.encoding){var t=this.packetBuffer.shift();this.packet(t)}},n.prototype.cleanup=function(){for(var t=this.subs.length,e=0;e=this._reconnectionAttempts)this.backoff.reset(),this.emitAll("reconnect_failed"),this.reconnecting=!1;else{var e=this.backoff.duration();this.reconnecting=!0;var r=setTimeout((function(){t.skipReconnect||(t.emitAll("reconnect_attempt",t.backoff.attempts),t.emitAll("reconnecting",t.backoff.attempts),t.skipReconnect||t.open((function(e){e?(t.reconnecting=!1,t.reconnect(),t.emitAll("reconnect_error",e.data)):t.onreconnect()})))}),e);this.subs.push({destroy:function(){clearTimeout(r)}})}},n.prototype.onreconnect=function(){var t=this.backoff.attempts;this.reconnecting=!1,this.backoff.reset(),this.updateSocketIds(),this.emitAll("reconnect",t)}},function(t,e,r){t.exports=r(11),t.exports.parser=r(19)},function(t,e,r){function n(t,e){return this instanceof n?(e=e||{},t&&"object"==typeof t&&(e=t,t=null),t?(t=p(t),e.hostname=t.host,e.secure="https"===t.protocol||"wss"===t.protocol,e.port=t.port,t.query&&(e.query=t.query)):e.host&&(e.hostname=p(e.host).host),this.secure=null!=e.secure?e.secure:"undefined"!=typeof location&&"https:"===location.protocol,e.hostname&&!e.port&&(e.port=this.secure?"443":"80"),this.agent=e.agent||!1,this.hostname=e.hostname||("undefined"!=typeof location?location.hostname:"localhost"),this.port=e.port||("undefined"!=typeof location&&location.port?location.port:this.secure?443:80),this.query=e.query||{},"string"==typeof this.query&&(this.query=h.decode(this.query)),this.upgrade=!1!==e.upgrade,this.path=(e.path||"/engine.io").replace(/\/$/,"")+"/",this.forceJSONP=!!e.forceJSONP,this.jsonp=!1!==e.jsonp,this.forceBase64=!!e.forceBase64,this.enablesXDR=!!e.enablesXDR,this.withCredentials=!1!==e.withCredentials,this.timestampParam=e.timestampParam||"t",this.timestampRequests=e.timestampRequests,this.transports=e.transports||["polling","websocket"],this.transportOptions=e.transportOptions||{},this.readyState="",this.writeBuffer=[],this.prevBufferLen=0,this.policyPort=e.policyPort||843,this.rememberUpgrade=e.rememberUpgrade||!1,this.binaryType=null,this.onlyBinaryUpgrades=e.onlyBinaryUpgrades,this.perMessageDeflate=!1!==e.perMessageDeflate&&(e.perMessageDeflate||{}),!0===this.perMessageDeflate&&(this.perMessageDeflate={}),this.perMessageDeflate&&null==this.perMessageDeflate.threshold&&(this.perMessageDeflate.threshold=1024),this.pfx=e.pfx||null,this.key=e.key||null,this.passphrase=e.passphrase||null,this.cert=e.cert||null,this.ca=e.ca||null,this.ciphers=e.ciphers||null,this.rejectUnauthorized=void 0===e.rejectUnauthorized||e.rejectUnauthorized,this.forceNode=!!e.forceNode,this.isReactNative="undefined"!=typeof navigator&&"string"==typeof navigator.product&&"reactnative"===navigator.product.toLowerCase(),("undefined"==typeof self||this.isReactNative)&&(e.extraHeaders&&Object.keys(e.extraHeaders).length>0&&(this.extraHeaders=e.extraHeaders),e.localAddress&&(this.localAddress=e.localAddress)),this.id=null,this.upgrades=null,this.pingInterval=null,this.pingTimeout=null,this.pingIntervalTimer=null,this.pingTimeoutTimer=null,void this.open()):new n(t,e)}function o(t){var e={};for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r]);return e}var i=r(12),s=r(5),a=(r(3)("engine.io-client:socket"),r(33)),c=r(19),p=r(2),h=r(27);t.exports=n,n.priorWebsocketSuccess=!1,s(n.prototype),n.protocol=c.protocol,n.Socket=n,n.Transport=r(18),n.transports=r(12),n.parser=r(19),n.prototype.createTransport=function(t){var e=o(this.query);e.EIO=c.protocol,e.transport=t;var r=this.transportOptions[t]||{};this.id&&(e.sid=this.id);var n=new i[t]({query:e,socket:this,agent:r.agent||this.agent,hostname:r.hostname||this.hostname,port:r.port||this.port,secure:r.secure||this.secure,path:r.path||this.path,forceJSONP:r.forceJSONP||this.forceJSONP,jsonp:r.jsonp||this.jsonp,forceBase64:r.forceBase64||this.forceBase64,enablesXDR:r.enablesXDR||this.enablesXDR,withCredentials:r.withCredentials||this.withCredentials,timestampRequests:r.timestampRequests||this.timestampRequests,timestampParam:r.timestampParam||this.timestampParam,policyPort:r.policyPort||this.policyPort,pfx:r.pfx||this.pfx,key:r.key||this.key,passphrase:r.passphrase||this.passphrase,cert:r.cert||this.cert,ca:r.ca||this.ca,ciphers:r.ciphers||this.ciphers,rejectUnauthorized:r.rejectUnauthorized||this.rejectUnauthorized,perMessageDeflate:r.perMessageDeflate||this.perMessageDeflate,extraHeaders:r.extraHeaders||this.extraHeaders,forceNode:r.forceNode||this.forceNode,localAddress:r.localAddress||this.localAddress,requestTimeout:r.requestTimeout||this.requestTimeout,protocols:r.protocols||void 0,isReactNative:this.isReactNative});return n},n.prototype.open=function(){var t;if(this.rememberUpgrade&&n.priorWebsocketSuccess&&this.transports.indexOf("websocket")!==-1)t="websocket";else{if(0===this.transports.length){var e=this;return void setTimeout((function(){e.emit("error","No transports available")}),0)}t=this.transports[0]}this.readyState="opening";try{t=this.createTransport(t)}catch(t){return this.transports.shift(),void this.open()}t.open(),this.setTransport(t)},n.prototype.setTransport=function(t){var e=this;this.transport&&this.transport.removeAllListeners(),this.transport=t,t.on("drain",(function(){e.onDrain()})).on("packet",(function(t){e.onPacket(t)})).on("error",(function(t){e.onError(t)})).on("close",(function(){e.onClose("transport close")}))},n.prototype.probe=function(t){function e(){if(u.onlyBinaryUpgrades){var t=!this.supportsBinary&&u.transport.supportsBinary;h=h||t}h||(p.send([{type:"ping",data:"probe"}]),p.once("packet",(function(t){if(!h)if("pong"===t.type&&"probe"===t.data){if(u.upgrading=!0,u.emit("upgrading",p),!p)return;n.priorWebsocketSuccess="websocket"===p.name,u.transport.pause((function(){h||"closed"!==u.readyState&&(c(),u.setTransport(p),p.send([{type:"upgrade"}]),u.emit("upgrade",p),p=null,u.upgrading=!1,u.flush())}))}else{var e=new Error("probe error");e.transport=p.name,u.emit("upgradeError",e)}})))}function r(){h||(h=!0,c(),p.close(),p=null)}function o(t){var e=new Error("probe error: "+t);e.transport=p.name,r(),u.emit("upgradeError",e)}function i(){o("transport closed")}function s(){o("socket closed")}function a(t){p&&t.name!==p.name&&r()}function c(){p.removeListener("open",e),p.removeListener("error",o),p.removeListener("close",i),u.removeListener("close",s),u.removeListener("upgrading",a)}var p=this.createTransport(t,{probe:1}),h=!1,u=this;n.priorWebsocketSuccess=!1,p.once("open",e),p.once("error",o),p.once("close",i),this.once("close",s),this.once("upgrading",a),p.open()},n.prototype.onOpen=function(){if(this.readyState="open",n.priorWebsocketSuccess="websocket"===this.transport.name,this.emit("open"),this.flush(),"open"===this.readyState&&this.upgrade&&this.transport.pause)for(var t=0,e=this.upgrades.length;t1?{type:b[o],data:t.substring(1)}:{type:b[o]}:k}var i=new Uint8Array(t),o=i[0],s=f(t,1);return w&&"blob"===r&&(s=new w([s])),{type:b[o],data:s}},e.decodeBase64Packet=function(t,e){var r=b[t.charAt(0)];if(!p)return{type:r,data:{base64:!0,data:t.substr(1)}};var n=p.decode(t.substr(1));return"blob"===e&&w&&(n=new w([n])),{type:r,data:n}},e.encodePayload=function(t,r,n){function o(t){return t.length+":"+t}function i(t,n){e.encodePacket(t,!!s&&r,!1,(function(t){n(null,o(t))}))}"function"==typeof r&&(n=r,r=null);var s=u(t);return r&&s?w&&!g?e.encodePayloadAsBlob(t,n):e.encodePayloadAsArrayBuffer(t,n):t.length?void c(t,i,(function(t,e){return n(e.join(""))})):n("0:")},e.decodePayload=function(t,r,n){if("string"!=typeof t)return e.decodePayloadAsBinary(t,r,n);"function"==typeof r&&(n=r,r=null);var o;if(""===t)return n(k,0,1);for(var i,s,a="",c=0,p=t.length;c0;){for(var s=new Uint8Array(o),a=0===s[0],c="",p=1;255!==s[p];p++){if(c.length>310)return n(k,0,1);c+=s[p]}o=f(o,2+c.length),c=parseInt(c);var h=f(o,0,c);if(a)try{h=String.fromCharCode.apply(null,new Uint8Array(h))}catch(t){var u=new Uint8Array(h);h="";for(var p=0;pn&&(r=n),e>=n||e>=r||0===n)return new ArrayBuffer(0);for(var o=new Uint8Array(t),i=new Uint8Array(r-e),s=e,a=0;s=55296&&e<=56319&&o65535&&(e-=65536,o+=d(e>>>10&1023|55296),e=56320|1023&e),o+=d(e);return o}function o(t,e){if(t>=55296&&t<=57343){if(e)throw Error("Lone surrogate U+"+t.toString(16).toUpperCase()+" is not a scalar value");return!1}return!0}function i(t,e){return d(t>>e&63|128)}function s(t,e){if(0==(4294967168&t))return d(t);var r="";return 0==(4294965248&t)?r=d(t>>6&31|192):0==(4294901760&t)?(o(t,e)||(t=65533),r=d(t>>12&15|224),r+=i(t,6)):0==(4292870144&t)&&(r=d(t>>18&7|240),r+=i(t,12),r+=i(t,6)),r+=d(63&t|128)}function a(t,e){e=e||{};for(var n,o=!1!==e.strict,i=r(t),a=i.length,c=-1,p="";++c=f)throw Error("Invalid byte index");var t=255&u[l];if(l++,128==(192&t))return 63&t;throw Error("Invalid continuation byte")}function p(t){var e,r,n,i,s;if(l>f)throw Error("Invalid byte index");if(l==f)return!1;if(e=255&u[l],l++,0==(128&e))return e;if(192==(224&e)){if(r=c(),s=(31&e)<<6|r,s>=128)return s;throw Error("Invalid continuation byte")}if(224==(240&e)){if(r=c(),n=c(),s=(15&e)<<12|r<<6|n,s>=2048)return o(s,t)?s:65533;throw Error("Invalid continuation byte")}if(240==(248&e)&&(r=c(),n=c(),i=c(),s=(7&e)<<18|r<<12|n<<6|i,s>=65536&&s<=1114111))return s;throw Error("Invalid UTF-8 detected")}function h(t,e){e=e||{};var o=!1!==e.strict;u=r(t),f=u.length,l=0;for(var i,s=[];(i=p(o))!==!1;)s.push(i);return n(s)}/*! https://mths.be/utf8js v2.1.2 by @mathias */var u,f,l,d=String.fromCharCode;t.exports={version:"2.1.2",encode:a,decode:h}},function(t,e){!function(t){"use strict";e.encode=function(e){var r,n=new Uint8Array(e),o=n.length,i="";for(r=0;r>2],i+=t[(3&n[r])<<4|n[r+1]>>4],i+=t[(15&n[r+1])<<2|n[r+2]>>6],i+=t[63&n[r+2]];return o%3===2?i=i.substring(0,i.length-1)+"=":o%3===1&&(i=i.substring(0,i.length-2)+"=="),i},e.decode=function(e){var r,n,o,i,s,a=.75*e.length,c=e.length,p=0;"="===e[e.length-1]&&(a--,"="===e[e.length-2]&&a--);var h=new ArrayBuffer(a),u=new Uint8Array(h);for(r=0;r>4,u[p++]=(15&o)<<4|i>>2,u[p++]=(3&i)<<6|63&s;return h}}("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/")},function(t,e){function r(t){return t.map((function(t){if(t.buffer instanceof ArrayBuffer){var e=t.buffer;if(t.byteLength!==e.byteLength){var r=new Uint8Array(t.byteLength);r.set(new Uint8Array(e,t.byteOffset,t.byteLength)),e=r.buffer}return e}return t}))}function n(t,e){e=e||{};var n=new i;return r(t).forEach((function(t){n.append(t)})),e.type?n.getBlob(e.type):n.getBlob()}function o(t,e){return new Blob(r(t),e||{})}var i="undefined"!=typeof i?i:"undefined"!=typeof WebKitBlobBuilder?WebKitBlobBuilder:"undefined"!=typeof MSBlobBuilder?MSBlobBuilder:"undefined"!=typeof MozBlobBuilder&&MozBlobBuilder,s=function(){try{var t=new Blob(["hi"]);return 2===t.size}catch(t){return!1}}(),a=s&&function(){try{var t=new Blob([new Uint8Array([1,2])]);return 2===t.size}catch(t){return!1}}(),c=i&&i.prototype.append&&i.prototype.getBlob;"undefined"!=typeof Blob&&(n.prototype=Blob.prototype,o.prototype=Blob.prototype),t.exports=function(){return s?a?Blob:o:c?n:void 0}()},function(t,e){e.encode=function(t){var e="";for(var r in t)t.hasOwnProperty(r)&&(e.length&&(e+="&"),e+=encodeURIComponent(r)+"="+encodeURIComponent(t[r]));return e},e.decode=function(t){for(var e={},r=t.split("&"),n=0,o=r.length;n0);return e}function n(t){var e=0;for(h=0;h';i=document.createElement(t)}catch(t){i=document.createElement("iframe"),i.name=o.iframeId,i.src="javascript:0"}i.id=o.iframeId,o.form.appendChild(i),o.iframe=i}var o=this;if(!this.form){var i,s=document.createElement("form"),a=document.createElement("textarea"),c=this.iframeId="eio_iframe_"+this.index;s.className="socketio",s.style.position="absolute",s.style.top="-1000px",s.style.left="-1000px",s.target=c,s.method="POST",s.setAttribute("accept-charset","utf-8"),a.name="d",s.appendChild(a),document.body.appendChild(s),this.form=s,this.area=a}this.form.action=this.uri(),n(),t=t.replace(h,"\\\n"),this.area.value=t.replace(p,"\\n");try{this.form.submit()}catch(t){}this.iframe.attachEvent?this.iframe.onreadystatechange=function(){"complete"===o.iframe.readyState&&r()}:this.iframe.onload=r}},function(t,e,r){function n(t){var e=t&&t.forceBase64;e&&(this.supportsBinary=!1),this.perMessageDeflate=t.perMessageDeflate,this.usingBrowserWebSocket=o&&!t.forceNode,this.protocols=t.protocols,this.usingBrowserWebSocket||(u=i),s.call(this,t)}var o,i,s=r(18),a=r(19),c=r(27),p=r(28),h=r(29);r(3)("engine.io-client:websocket");if("undefined"!=typeof WebSocket?o=WebSocket:"undefined"!=typeof self&&(o=self.WebSocket||self.MozWebSocket),"undefined"==typeof window)try{i=r(32)}catch(t){}var u=o||i;t.exports=n,p(n,s),n.prototype.name="websocket",n.prototype.supportsBinary=!0,n.prototype.doOpen=function(){if(this.check()){var t=this.uri(),e=this.protocols,r={};this.isReactNative||(r.agent=this.agent,r.perMessageDeflate=this.perMessageDeflate,r.pfx=this.pfx,r.key=this.key,r.passphrase=this.passphrase,r.cert=this.cert,r.ca=this.ca,r.ciphers=this.ciphers,r.rejectUnauthorized=this.rejectUnauthorized),this.extraHeaders&&(r.headers=this.extraHeaders),this.localAddress&&(r.localAddress=this.localAddress);try{this.ws=this.usingBrowserWebSocket&&!this.isReactNative?e?new u(t,e):new u(t):new u(t,e,r)}catch(t){return this.emit("error",t)}void 0===this.ws.binaryType&&(this.supportsBinary=!1),this.ws.supports&&this.ws.supports.binary?(this.supportsBinary=!0,this.ws.binaryType="nodebuffer"):this.ws.binaryType="arraybuffer",this.addEventListeners()}},n.prototype.addEventListeners=function(){var t=this;this.ws.onopen=function(){t.onOpen()},this.ws.onclose=function(){t.onClose()},this.ws.onmessage=function(e){t.onData(e.data)},this.ws.onerror=function(e){t.onError("websocket error",e)}},n.prototype.write=function(t){function e(){r.emit("flush"),setTimeout((function(){r.writable=!0,r.emit("drain")}),0)}var r=this;this.writable=!1;for(var n=t.length,o=0,i=n;o0&&t.jitter<=1?t.jitter:0,this.attempts=0}t.exports=r,r.prototype.duration=function(){var t=this.ms*Math.pow(this.factor,this.attempts++);if(this.jitter){var e=Math.random(),r=Math.floor(e*this.jitter*t);t=0==(1&Math.floor(10*e))?t-r:t+r}return 0|Math.min(t,this.max)},r.prototype.reset=function(){this.attempts=0},r.prototype.setMin=function(t){this.ms=t},r.prototype.setMax=function(t){this.max=t},r.prototype.setJitter=function(t){this.jitter=t}}])}))}).call(this)}).call(this,require("buffer").Buffer)},{buffer:16}],19:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.AceBaseBase=exports.AceBaseBaseSettings=void 0;const simple_event_emitter_1=require("./simple-event-emitter");const data_reference_1=require("./data-reference");const type_mappings_1=require("./type-mappings");const optional_observable_1=require("./optional-observable");const debug_1=require("./debug");const simple_colors_1=require("./simple-colors");class AceBaseBaseSettings{constructor(options){this.logLevel="log";this.logColors=true;this.info="realtime database";this.sponsor=false;if(typeof options!=="object"){options={}}if(typeof options.logLevel==="string"){this.logLevel=options.logLevel}if(typeof options.logColors==="boolean"){this.logColors=options.logColors}if(typeof options.info==="string"){this.info=options.info}if(typeof options.sponsor==="boolean"){this.sponsor=options.sponsor}}}exports.AceBaseBaseSettings=AceBaseBaseSettings;class AceBaseBase extends simple_event_emitter_1.SimpleEventEmitter{constructor(dbname,options={}){super();this._ready=false;options=new AceBaseBaseSettings(options);this.name=dbname;this.debug=new debug_1.DebugLogger(options.logLevel,`[${dbname}]`);(0,simple_colors_1.SetColorsEnabled)(options.logColors);const logoStyle=[simple_colors_1.ColorStyle.magenta,simple_colors_1.ColorStyle.bold];const logo=" ___ ______ "+"\n"+" / _ \\ | ___ \\ "+"\n"+" / /_\\ \\ ___ ___| |_/ / __ _ ___ ___ "+"\n"+" | _ |/ __/ _ \\ ___ \\/ _` / __|/ _ \\"+"\n"+" | | | | (_| __/ |_/ / (_| \\__ \\ __/"+"\n"+" \\_| |_/\\___\\___\\____/ \\__,_|___/\\___|";const info=options.info?"".padStart(40-options.info.length," ")+options.info+"\n":"";if(!options.sponsor){this.debug.write(logo.colorize(logoStyle));info&&this.debug.write(info.colorize(simple_colors_1.ColorStyle.magenta))}this.types=new type_mappings_1.TypeMappings(this);this.once("ready",(()=>{this._ready=true}))}async ready(callback){if(!this._ready){await new Promise((resolve=>this.on("ready",resolve)))}callback===null||callback===void 0?void 0:callback()}get isReady(){return this._ready}setObservable(ObservableImpl){(0,optional_observable_1.setObservable)(ObservableImpl)}ref(path){return new data_reference_1.DataReference(this,path)}get root(){return this.ref("")}query(path){const ref=new data_reference_1.DataReference(this,path);return new data_reference_1.DataReferenceQuery(ref)}get indexes(){return{get:()=>this.api.getIndexes(),create:(path,key,options)=>this.api.createIndex(path,key,options),delete:async filePath=>this.api.deleteIndex(filePath)}}get schema(){return{get:path=>this.api.getSchema(path),set:(path,schema)=>this.api.setSchema(path,schema),all:()=>this.api.getSchemas(),check:(path,value,isUpdate)=>this.api.validateSchema(path,value,isUpdate)}}}exports.AceBaseBase=AceBaseBase},{"./data-reference":26,"./debug":28,"./optional-observable":32,"./simple-colors":39,"./simple-event-emitter":40,"./type-mappings":43}],20:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.Api=void 0;class NotImplementedError extends Error{constructor(name){super(`${name} is not implemented`)}}class Api{constructor(){}stats(options){throw new NotImplementedError("stats")}subscribe(path,event,callback,settings){throw new NotImplementedError("subscribe")}unsubscribe(path,event,callback){throw new NotImplementedError("unsubscribe")}update(path,updates,options){throw new NotImplementedError("update")}set(path,value,options){throw new NotImplementedError("set")}get(path,options){throw new NotImplementedError("get")}transaction(path,callback,options){throw new NotImplementedError("transaction")}exists(path){throw new NotImplementedError("exists")}query(path,query,options){throw new NotImplementedError("query")}reflect(path,type,args){throw new NotImplementedError("reflect")}export(path,write,options){throw new NotImplementedError("export")}import(path,read,options){throw new NotImplementedError("import")}createIndex(path,key,options){throw new NotImplementedError("createIndex")}getIndexes(){throw new NotImplementedError("getIndexes")}deleteIndex(filePath){throw new NotImplementedError("deleteIndex")}setSchema(path,schema){throw new NotImplementedError("setSchema")}getSchema(path){throw new NotImplementedError("getSchema")}getSchemas(){throw new NotImplementedError("getSchemas")}validateSchema(path,value,isUpdate){throw new NotImplementedError("validateSchema")}getMutations(filter){throw new NotImplementedError("getMutations")}getChanges(filter){throw new NotImplementedError("getChanges")}}exports.Api=Api},{}],21:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.ascii85=void 0;function c(input,length,result){const b=[0,0,0,0,0];for(let i=0;i";return ret}exports.ascii85={encode:function(arr){if(arr instanceof ArrayBuffer){arr=new Uint8Array(arr,0,arr.byteLength)}return encode(arr)},decode:function(input){if(!input.startsWith("<~")||!input.endsWith("~>")){throw new Error("Invalid input string")}input=input.substr(2,input.length-4);const n=input.length,r=[],b=[0,0,0,0,0];let t,x,y,d;for(let i=0;i>>=8;y=t&255;t>>>=8;r.push(t>>>8,t&255,y,x);for(let j=d;j<5;++j,r.pop());i+=4}const data=new Uint8Array(r);return data.buffer.slice(data.byteOffset,data.byteOffset+data.byteLength)}}},{}],22:[function(require,module,exports){"use strict";var _a,_b;Object.defineProperty(exports,"__esModule",{value:true});const pad_1=require("../pad");const env=typeof window==="object"?window:self,globalCount=Object.keys(env).length,mimeTypesLength=(_b=(_a=navigator.mimeTypes)===null||_a===void 0?void 0:_a.length)!==null&&_b!==void 0?_b:0,clientId=(0,pad_1.default)((mimeTypesLength+navigator.userAgent.length).toString(36)+globalCount.toString(36),4);function fingerprint(){return clientId}exports.default=fingerprint},{"../pad":24}],23:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});const fingerprint_1=require("./fingerprint");const pad_1=require("./pad");let c=0;const blockSize=4,base=36,discreteValues=Math.pow(base,blockSize);function randomBlock(){return(0,pad_1.default)((Math.random()*discreteValues<<0).toString(base),blockSize)}function safeCounter(){c=ct2[i]===key))}static isAncestor(ancestor,other){return ancestor.lengthother[i]===key))}static isDescendant(descendant,other){return descendant.length>other.length&&other.every(((key,i)=>descendant[i]===key))}}const isProxy=Symbol("isProxy");class LiveDataProxy{static async create(ref,options){var _a;ref=new data_reference_1.DataReference(ref.db,ref.path);let cache,loaded=false;let latestCursor=options===null||options===void 0?void 0:options.cursor;let proxy;const proxyId=id_1.ID.generate();const clientSubscriptions=[];const clientEventEmitter=new simple_event_emitter_1.SimpleEventEmitter;clientEventEmitter.on("cursor",(cursor=>latestCursor=cursor));clientEventEmitter.on("error",(err=>{console.error(err.message,err.details)}));const applyChange=(keys,newValue)=>{if(keys.length===0){cache=newValue;return true}const allowCreation=false;if(allowCreation){cache=typeof keys[0]==="number"?[]:{}}let target=cache;const trailKeys=keys.slice();while(trailKeys.length>1){const key=trailKeys.shift();if(!(key in target)){if(allowCreation){target[key]=typeof key==="number"?[]:{}}else{return false}}target=target[key]}const prop=trailKeys.shift();if(newValue===null){target instanceof Array?target.splice(prop,1):delete target[prop]}else{target[prop]=newValue}return true};const syncFallback=async()=>{if(!loaded){return}await reload()};const subscription=ref.on("mutations",{syncFallback:syncFallback}).subscribe((async snap=>{var _a;if(!loaded){return}const context=snap.context();const isRemote=((_a=context.acebase_proxy)===null||_a===void 0?void 0:_a.id)!==proxyId;if(!isRemote){return}const mutations=snap.val(false);const proceed=mutations.every((mutation=>{if(!applyChange(mutation.target,mutation.val)){return false}const changeRef=mutation.target.reduce(((ref,key)=>ref.child(key)),ref);const changeSnap=new data_snapshot_1.DataSnapshot(changeRef,mutation.val,false,mutation.prev,snap.context());clientEventEmitter.emit("mutation",{snapshot:changeSnap,isRemote:isRemote});return true}));if(proceed){clientEventEmitter.emit("cursor",context.acebase_cursor);localMutationsEmitter.emit("mutations",{origin:"remote",snap:snap})}else{console.warn(`Cached value of live data proxy on "${ref.path}" appears outdated, will be reloaded`);await reload()}}));let processPromise=Promise.resolve();const mutationQueue=[];const transactions=[];const pushLocalMutations=async()=>{const mutations=[];for(let i=0,m=mutationQueue[0];iRelativeNodeTarget.areEqual(t.target,m.target)||RelativeNodeTarget.isAncestor(t.target,m.target)))){mutationQueue.splice(i,1);i--;mutations.push(m)}}if(mutations.length===0){return}mutations.forEach((mutation=>{mutation.value=(0,utils_1.cloneObject)(getTargetValue(cache,mutation.target))}));process_1.default.nextTick((()=>{const context={acebase_proxy:{id:proxyId,source:"update"}};mutations.forEach((mutation=>{const mutationRef=mutation.target.reduce(((ref,key)=>ref.child(key)),ref);const mutationSnap=new data_snapshot_1.DataSnapshot(mutationRef,mutation.value,false,mutation.previous,context);clientEventEmitter.emit("mutation",{snapshot:mutationSnap,isRemote:false})}));const snap=new data_snapshot_1.MutationsDataSnapshot(ref,mutations.map((m=>({target:m.target,val:m.value,prev:m.previous}))),context);localMutationsEmitter.emit("mutations",{origin:"local",snap:snap})}));processPromise=mutations.reduce(((mutations,m,i,arr)=>{if(!arr.some((other=>RelativeNodeTarget.isAncestor(other.target,m.target)))){mutations.push(m)}return mutations}),[]).reduce(((updates,m)=>{const target=m.target;if(target.length===0){updates.push({ref:ref,target:target,value:cache,type:"set",previous:m.previous})}else{const parentTarget=target.slice(0,-1);const key=target.slice(-1)[0];const parentRef=parentTarget.reduce(((ref,key)=>ref.child(key)),ref);const parentUpdate=updates.find((update=>update.ref.path===parentRef.path));const cacheValue=getTargetValue(cache,target);const prevValue=m.previous;if(parentUpdate){parentUpdate.value[key]=cacheValue;parentUpdate.previous[key]=prevValue}else{updates.push({ref:parentRef,target:parentTarget,value:{[key]:cacheValue},type:"update",previous:{[key]:prevValue}})}}return updates}),[]).reduce((async(promise,update)=>{const context={acebase_proxy:{id:proxyId,source:update.type}};await promise;await update.ref.context(context)[update.type](update.value).catch((err=>{clientEventEmitter.emit("error",{source:"update",message:`Error processing update of "/${ref.path}"`,details:err});const context={acebase_proxy:{id:proxyId,source:"update-rollback"}};const mutations=[];if(update.type==="set"){setTargetValue(cache,update.target,update.previous);const mutationSnap=new data_snapshot_1.DataSnapshot(update.ref,update.previous,false,update.value,context);clientEventEmitter.emit("mutation",{snapshot:mutationSnap,isRemote:false});mutations.push({target:update.target,val:update.previous,prev:update.value})}else{Object.keys(update.previous).forEach((key=>{setTargetValue(cache,update.target.concat(key),update.previous[key]);const mutationSnap=new data_snapshot_1.DataSnapshot(update.ref.child(key),update.previous[key],false,update.value[key],context);clientEventEmitter.emit("mutation",{snapshot:mutationSnap,isRemote:false});mutations.push({target:update.target.concat(key),val:update.previous[key],prev:update.value[key]})}))}mutations.forEach((m=>{const mutationRef=m.target.reduce(((ref,key)=>ref.child(key)),ref);const mutationSnap=new data_snapshot_1.DataSnapshot(mutationRef,m.val,false,m.prev,context);clientEventEmitter.emit("mutation",{snapshot:mutationSnap,isRemote:false})}));const snap=new data_snapshot_1.MutationsDataSnapshot(update.ref,mutations,context);localMutationsEmitter.emit("mutations",{origin:"local",snap:snap})}));if(update.ref.cursor){clientEventEmitter.emit("cursor",update.ref.cursor)}}),processPromise);await processPromise};let syncInProgress=false;const syncPromises=[];const syncCompleted=()=>{let resolve;const promise=new Promise((rs=>resolve=rs));syncPromises.push({resolve:resolve});return promise};let processQueueTimeout=null;const scheduleSync=()=>{if(!processQueueTimeout){processQueueTimeout=setTimeout((async()=>{syncInProgress=true;processQueueTimeout=null;await pushLocalMutations();syncInProgress=false;syncPromises.splice(0).forEach((p=>p.resolve()))}),0)}};const flagOverwritten=target=>{if(!mutationQueue.find((m=>RelativeNodeTarget.areEqual(m.target,target)))){mutationQueue.push({target:target,previous:(0,utils_1.cloneObject)(getTargetValue(cache,target))})}scheduleSync()};const localMutationsEmitter=new simple_event_emitter_1.SimpleEventEmitter;const addOnChangeHandler=(target,callback)=>{const isObject=val=>val!==null&&typeof val==="object";const mutationsHandler=async details=>{var _a;const{snap:snap,origin:origin}=details;const context=snap.context();const causedByOurProxy=((_a=context.acebase_proxy)===null||_a===void 0?void 0:_a.id)===proxyId;if(details.origin==="remote"&&causedByOurProxy){console.error("DEV ISSUE: mutationsHandler was called from remote event originating from our own proxy");return}const mutations=snap.val(false).filter((mutation=>mutation.target.slice(0,target.length).every(((key,i)=>target[i]===key))));if(mutations.length===0){return}let newValue,previousValue;const singleMutation=mutations.find((m=>m.target.length<=target.length));if(singleMutation){const trailKeys=target.slice(singleMutation.target.length);newValue=trailKeys.reduce(((val,key)=>!isObject(val)||!(key in val)?null:val[key]),singleMutation.val);previousValue=trailKeys.reduce(((val,key)=>!isObject(val)||!(key in val)?null:val[key]),singleMutation.prev)}else{const currentValue=getTargetValue(cache,target);newValue=(0,utils_1.cloneObject)(currentValue);previousValue=(0,utils_1.cloneObject)(newValue);mutations.forEach((mutation=>{const trailKeys=mutation.target.slice(target.length);for(let i=0,val=newValue,prev=previousValue;i{let keepSubscription=true;try{keepSubscription=false!==callback(Object.freeze(newValue),Object.freeze(previousValue),!causedByOurProxy,context)}catch(err){clientEventEmitter.emit("error",{source:origin==="remote"?"remote_update":"local_update",message:"Error running subscription callback",details:err})}if(keepSubscription===false){stop()}}))};localMutationsEmitter.on("mutations",mutationsHandler);const stop=()=>{localMutationsEmitter.off("mutations").off("mutations",mutationsHandler);clientSubscriptions.splice(clientSubscriptions.findIndex((cs=>cs.stop===stop)),1)};clientSubscriptions.push({target:target,stop:stop});return{stop:stop}};const handleFlag=(flag,target,args)=>{if(flag==="write"){return flagOverwritten(target)}else if(flag==="onChange"){return addOnChangeHandler(target,args.callback)}else if(flag==="subscribe"||flag==="observe"){const subscribe=subscriber=>{const currentValue=getTargetValue(cache,target);subscriber.next(currentValue);const subscription=addOnChangeHandler(target,(value=>{subscriber.next(value)}));return function unsubscribe(){subscription.stop()}};if(flag==="subscribe"){return subscribe}const Observable=(0,optional_observable_1.getObservable)();return new Observable(subscribe)}else if(flag==="transaction"){const hasConflictingTransaction=transactions.some((t=>RelativeNodeTarget.areEqual(target,t.target)||RelativeNodeTarget.isAncestor(target,t.target)||RelativeNodeTarget.isDescendant(target,t.target)));if(hasConflictingTransaction){return Promise.reject(new Error("Cannot start transaction because it conflicts with another transaction"))}return new Promise((async resolve=>{const hasPendingMutations=mutationQueue.some((m=>RelativeNodeTarget.areEqual(target,m.target)||RelativeNodeTarget.isAncestor(target,m.target)));if(hasPendingMutations){if(!syncInProgress){scheduleSync()}await syncCompleted()}const tx={target:target,status:"started",transaction:null};transactions.push(tx);tx.transaction={get status(){return tx.status},get completed(){return tx.status!=="started"},get mutations(){return mutationQueue.filter((m=>RelativeNodeTarget.areEqual(tx.target,m.target)||RelativeNodeTarget.isAncestor(tx.target,m.target)))},get hasMutations(){return this.mutations.length>0},async commit(){if(this.completed){throw new Error(`Transaction has completed already (status '${tx.status}')`)}tx.status="finished";transactions.splice(transactions.indexOf(tx),1);if(syncInProgress){await syncCompleted()}scheduleSync();await syncCompleted()},rollback(){if(this.completed){throw new Error(`Transaction has completed already (status '${tx.status}')`)}tx.status="canceled";const mutations=[];for(let i=0;i{if(m.target.length===0){cache=m.previous}else{setTargetValue(cache,m.target,m.previous)}}));transactions.splice(transactions.indexOf(tx),1)}};resolve(tx.transaction)}))}};const snap=await ref.get({cache_mode:"allow",cache_cursor:options===null||options===void 0?void 0:options.cursor});if(snap.context().acebase_origin!=="cache"){clientEventEmitter.emit("cursor",(_a=ref.cursor)!==null&&_a!==void 0?_a:null)}loaded=true;cache=snap.val();if(cache===null&&typeof(options===null||options===void 0?void 0:options.defaultValue)!=="undefined"){cache=options.defaultValue;const context={acebase_proxy:{id:proxyId,source:"default"}};await ref.context(context).set(cache)}proxy=createProxy({root:{ref:ref,get cache(){return cache}},target:[],id:proxyId,flag:handleFlag});const assertProxyAvailable=()=>{if(proxy===null){throw new Error("Proxy was destroyed")}};const reload=async()=>{assertProxyAvailable();mutationQueue.splice(0);const snap=await ref.get({allow_cache:false});const oldVal=cache,newVal=snap.val();cache=newVal;const mutations=(0,utils_1.getMutations)(oldVal,newVal);if(mutations.length===0){return}const context=snap.context();context.acebase_proxy={id:proxyId,source:"reload"};mutations.forEach((m=>{const targetRef=getTargetRef(ref,m.target);const newSnap=new data_snapshot_1.DataSnapshot(targetRef,m.val,m.val===null,m.prev,context);clientEventEmitter.emit("mutation",{snapshot:newSnap,isRemote:true})}));const mutationsSnap=new data_snapshot_1.MutationsDataSnapshot(ref,mutations,context);localMutationsEmitter.emit("mutations",{origin:"local",snap:mutationsSnap})};return{async destroy(){await processPromise;const promises=[subscription.stop(),...clientSubscriptions.map((cs=>cs.stop()))];await Promise.all(promises);["cursor","mutation","error"].forEach((event=>clientEventEmitter.off(event)));cache=null;proxy=null},stop(){this.destroy()},get value(){assertProxyAvailable();return proxy},get hasValue(){assertProxyAvailable();return cache!==null},set value(val){assertProxyAvailable();if(val!==null&&typeof val==="object"&&val[isProxy]){val=val.valueOf()}flagOverwritten([]);cache=val},get ref(){return ref},get cursor(){return latestCursor},reload:reload,onMutation(callback){assertProxyAvailable();clientEventEmitter.off("mutation");clientEventEmitter.on("mutation",(({snapshot:snapshot,isRemote:isRemote})=>{try{callback(snapshot,isRemote)}catch(err){clientEventEmitter.emit("error",{source:"mutation_callback",message:"Error in dataproxy onMutation callback",details:err})}}))},onError(callback){assertProxyAvailable();clientEventEmitter.off("error");clientEventEmitter.on("error",(err=>{try{callback(err)}catch(err){console.error(`Error in dataproxy onError callback: ${err.message}`)}}))},on(event,callback){clientEventEmitter.on(event,callback)},off(event,callback){clientEventEmitter.off(event,callback)}}}}exports.LiveDataProxy=LiveDataProxy;function getTargetValue(obj,target){let val=obj;for(const key of target){val=typeof val==="object"&&val!==null&&key in val?val[key]:null}return val}function setTargetValue(obj,target,value){if(target.length===0){throw new Error("Cannot update root target, caller must do that itself!")}const targetObject=target.slice(0,-1).reduce(((obj,key)=>obj[key]),obj);const prop=target.slice(-1)[0];if(value===null||typeof value==="undefined"){targetObject instanceof Array?targetObject.splice(prop,1):delete targetObject[prop]}else{targetObject[prop]=value}}function getTargetRef(ref,target){const path=path_info_1.PathInfo.get(ref.path).childPath(target);return new data_reference_1.DataReference(ref.db,path)}function createProxy(context){const targetRef=getTargetRef(context.root.ref,context.target);const childProxies=[];const handler={get(target,prop,receiver){target=getTargetValue(context.root.cache,context.target);if(typeof prop==="symbol"){if(prop.toString()===Symbol.iterator.toString()){prop="values"}else if(prop.toString()===isProxy.toString()){return true}else{return Reflect.get(target,prop,receiver)}}if(prop==="valueOf"){return function valueOf(){return target}}if(target===null||typeof target!=="object"){throw new Error(`Cannot read property "${prop}" of ${target}. Value of path "/${targetRef.path}" is not an object (anymore)`)}if(target instanceof Array&&typeof prop==="string"&&/^[0-9]+$/.test(prop)){prop=parseInt(prop)}const value=target[prop];if(value===null){delete target[prop];return}const childProxy=childProxies.find((proxy=>proxy.prop===prop));if(childProxy){if(childProxy.typeof===typeof value){return childProxy.value}childProxies.splice(childProxies.indexOf(childProxy),1)}const proxifyChildValue=prop=>{const value=target[prop];const childProxy=childProxies.find((child=>child.prop===prop));if(childProxy){if(childProxy.typeof===typeof value){return childProxy.value}childProxies.splice(childProxies.indexOf(childProxy),1)}if(typeof value!=="object"){return value}const newChildProxy=createProxy({root:context.root,target:context.target.concat(prop),id:context.id,flag:context.flag});childProxies.push({typeof:typeof value,prop:prop,value:newChildProxy});return newChildProxy};const unproxyValue=value=>value!==null&&typeof value==="object"&&value[isProxy]?value.getTarget():value;if(["string","number","boolean"].includes(typeof value)||value instanceof Date||value instanceof path_reference_1.PathReference||value instanceof ArrayBuffer||typeof value==="object"&&"buffer"in value){return value}const isArray=target instanceof Array;if(prop==="toString"){return function toString(){return`[LiveDataProxy for "${targetRef.path}"]`}}if(typeof value==="undefined"){if(prop==="push"){return function push(item){const childRef=targetRef.push();context.flag("write",context.target.concat(childRef.key));target[childRef.key]=item;return childRef.key}}if(prop==="getTarget"){return function(warn=true){warn&&console.warn("Use getTarget with caution - any changes will not be synchronized!");return target}}if(prop==="getRef"){return function getRef(){const ref=getTargetRef(context.root.ref,context.target);return ref}}if(prop==="forEach"){return function forEach(callback){const keys=Object.keys(target);let stop=false;for(let i=0;!stop&&iproxifyChildValue(key)));if(sortFn){arr.sort(sortFn)}return arr}}if(prop==="onChanged"){return function onChanged(callback){return context.flag("onChange",context.target,{callback:callback})}}if(prop==="subscribe"){return function subscribe(){return context.flag("subscribe",context.target)}}if(prop==="getObservable"){return function getObservable(){return context.flag("observe",context.target)}}if(prop==="getOrderedCollection"){return function getOrderedCollection(orderProperty,orderIncrement){return new OrderedCollectionProxy(this,orderProperty,orderIncrement)}}if(prop==="startTransaction"){return function startTransaction(){return context.flag("transaction",context.target)}}if(prop==="remove"&&!isArray){return function remove(){if(context.target.length===0){throw new Error("Can't remove proxy root value")}const parent=getTargetValue(context.root.cache,context.target.slice(0,-1));const key=context.target.slice(-1)[0];context.flag("write",context.target);delete parent[key]}}return}else if(typeof value==="function"){if(isArray){const writeArray=action=>{context.flag("write",context.target);return action()};const cleanArrayValues=values=>values.map((value=>{value=unproxyValue(value);removeVoidProperties(value);return value}));if(prop==="push"){return function push(...items){items=cleanArrayValues(items);return writeArray((()=>target.push(...items)))}}if(prop==="pop"){return function pop(){return writeArray((()=>target.pop()))}}if(prop==="splice"){return function splice(start,deleteCount,...items){items=cleanArrayValues(items);return writeArray((()=>target.splice(start,deleteCount,...items)))}}if(prop==="shift"){return function shift(){return writeArray((()=>target.shift()))}}if(prop==="unshift"){return function unshift(...items){items=cleanArrayValues(items);return writeArray((()=>target.unshift(...items)))}}if(prop==="sort"){return function sort(compareFn){return writeArray((()=>target.sort(compareFn)))}}if(prop==="reverse"){return function reverse(){return writeArray((()=>target.reverse()))}}if(["indexOf","lastIndexOf"].includes(prop)){return function indexOf(item,start){if(item!==null&&typeof item==="object"&&item[isProxy]){item=item.getTarget(false)}return target[prop](item,start)}}if(["forEach","every","some","filter","map"].includes(prop)){return function iterate(callback){return target[prop](((value,i)=>callback(proxifyChildValue(i),i,proxy)))}}if(["reduce","reduceRight"].includes(prop)){return function reduce(callback,initialValue){return target[prop](((prev,value,i)=>callback(prev,proxifyChildValue(i),i,proxy)),initialValue)}}if(["find","findIndex"].includes(prop)){return function find(callback){let value=target[prop](((value,i)=>callback(proxifyChildValue(i),i,proxy)));if(prop==="find"&&value){const index=target.indexOf(value);value=proxifyChildValue(index)}return value}}if(["values","entries","keys"].includes(prop)){return function*generator(){for(let i=0;itypeof key==="number"))){context.flag("write",context.target.slice(0,context.target.findIndex((key=>typeof key==="number"))))}else if(target instanceof Array){context.flag("write",context.target)}else{context.flag("write",context.target.concat(prop))}if(value===null){delete target[prop]}else{removeVoidProperties(value);target[prop]=value}return true},deleteProperty(target,prop){target=getTargetValue(context.root.cache,context.target);if(target===null){throw new Error(`Cannot delete property ${prop.toString()} of null`)}if(typeof prop==="symbol"){return Reflect.deleteProperty(target,prop)}if(!(prop in target)){return true}context.flag("write",context.target.concat(prop));delete target[prop];return true},ownKeys(target){target=getTargetValue(context.root.cache,context.target);return Reflect.ownKeys(target)},has(target,prop){target=getTargetValue(context.root.cache,context.target);return Reflect.has(target,prop)},getOwnPropertyDescriptor(target,prop){target=getTargetValue(context.root.cache,context.target);const descriptor=Reflect.getOwnPropertyDescriptor(target,prop);if(descriptor){descriptor.configurable=true}return descriptor},getPrototypeOf(target){target=getTargetValue(context.root.cache,context.target);return Reflect.getPrototypeOf(target)}};const proxy=new Proxy({},handler);return proxy}function removeVoidProperties(obj){if(typeof obj!=="object"){return}Object.keys(obj).forEach((key=>{const val=obj[key];if(val===null||typeof val==="undefined"){delete obj[key]}else if(typeof val==="object"){removeVoidProperties(val)}}))}function proxyAccess(proxiedValue){if(typeof proxiedValue!=="object"||!proxiedValue[isProxy]){throw new Error("Given value is not proxied. Make sure you are referencing the value through the live data proxy.")}return proxiedValue}exports.proxyAccess=proxyAccess;class OrderedCollectionProxy{constructor(collection,orderProperty="order",orderIncrement=10){this.collection=collection;this.orderProperty=orderProperty;this.orderIncrement=orderIncrement;if(typeof collection!=="object"||!collection[isProxy]){throw new Error("Collection is not proxied")}if(collection.valueOf()instanceof Array){throw new Error("Collection is an array, not an object collection")}if(!Object.keys(collection).every((key=>typeof collection[key]==="object"))){throw new Error("Collection has non-object children")}const ok=Object.keys(collection).every((key=>typeof collection[key][orderProperty]==="number"));if(!ok){const keys=Object.keys(collection);for(let i=0;i{const subscription=this.getObservable().subscribe((()=>{const newArray=this.getArray();subscriber.next(newArray)}));return function unsubscribe(){subscription.unsubscribe()}}))}getArray(){const arr=proxyAccess(this.collection).toArray(((a,b)=>a[this.orderProperty]-b[this.orderProperty]));return arr}add(item,index,from){const arr=this.getArray();let minOrder=Number.POSITIVE_INFINITY,maxOrder=Number.NEGATIVE_INFINITY;for(let i=0;ithis.collection[key]===item));if(!fromKey){throw new Error("item not found in collection")}if(from===index){return{key:fromKey,index:index}}if(Math.abs(from-index)===1){const otherItem=arr[index];const otherOrder=otherItem[this.orderProperty];otherItem[this.orderProperty]=item[this.orderProperty];item[this.orderProperty]=otherOrder;return{key:fromKey,index:index}}else{arr.splice(from,1)}}if(typeof index!=="number"||index>=arr.length){index=arr.length;item[this.orderProperty]=arr.length==0?0:maxOrder+this.orderIncrement}else if(index===0){item[this.orderProperty]=arr.length==0?0:minOrder-this.orderIncrement}else{const orders=arr.map((item=>item[this.orderProperty]));const gap=orders[index]-orders[index-1];if(gap>1){item[this.orderProperty]=orders[index]-Math.floor(gap/2)}else{arr.splice(index,0,item);for(let i=0;ithis.collection[key]===item));if(!key){throw new Error("Cannot find target object to delete")}this.collection[key]=null;return{key:key,index:index}}move(fromIndex,toIndex){const arr=this.getArray();return this.add(arr[fromIndex],toIndex,fromIndex)}sort(sortFn){const arr=this.getArray();arr.sort(sortFn);for(let i=0;i{newContext[key]=context[key]}))}this[_private].context=newContext;return this}else if(typeof context==="undefined"){console.warn("Use snap.context() instead of snap.ref.context() to get updating context in event callbacks");return currentContext}else{throw new Error("Invalid context argument")}}get cursor(){return this[_private].cursor}set cursor(value){var _a;this[_private].cursor=value;(_a=this.onCursor)===null||_a===void 0?void 0:_a.call(this,value)}get path(){return this[_private].path}get key(){const key=this[_private].key;return typeof key==="number"?`[${key}]`:key}get index(){const key=this[_private].key;if(typeof key!=="number"){throw new Error(`"${key}" is not a number`)}return key}get parent(){const currentPath=path_info_1.PathInfo.fillVariables2(this.path,this.vars);const info=path_info_1.PathInfo.get(currentPath);if(info.parentPath===null){return null}return new DataReference(this.db,info.parentPath).context(this[_private].context)}get vars(){return this[_private].vars}child(childPath){childPath=typeof childPath==="number"?childPath:childPath.replace(/^\/|\/$/g,"");const currentPath=path_info_1.PathInfo.fillVariables2(this.path,this.vars);const targetPath=path_info_1.PathInfo.getChildPath(currentPath,childPath);return new DataReference(this.db,targetPath).context(this[_private].context)}async set(value,onComplete){try{if(this.isWildcardPath){throw new Error(`Cannot set the value of wildcard path "/${this.path}"`)}if(this.parent===null){throw new Error("Cannot set the root object. Use update, or set individual child properties")}if(typeof value==="undefined"){throw new TypeError(`Cannot store undefined value in "/${this.path}"`)}if(!this.db.isReady){await this.db.ready()}value=this.db.types.serialize(this.path,value);const{cursor:cursor}=await this.db.api.set(this.path,value,{context:this[_private].context});this.cursor=cursor;if(typeof onComplete==="function"){try{onComplete(null,this)}catch(err){console.error("Error in onComplete callback:",err)}}}catch(err){if(typeof onComplete==="function"){try{onComplete(err,this)}catch(err){console.error("Error in onComplete callback:",err)}}else{throw err}}return this}async update(updates,onComplete){try{if(this.isWildcardPath){throw new Error(`Cannot update the value of wildcard path "/${this.path}"`)}if(!this.db.isReady){await this.db.ready()}if(typeof updates!=="object"||updates instanceof Array||updates instanceof ArrayBuffer||updates instanceof Date){await this.set(updates)}else if(Object.keys(updates).length===0){console.warn(`update called on path "/${this.path}", but there is nothing to update`)}else{updates=this.db.types.serialize(this.path,updates);const{cursor:cursor}=await this.db.api.update(this.path,updates,{context:this[_private].context});this.cursor=cursor}if(typeof onComplete==="function"){try{onComplete(null,this)}catch(err){console.error("Error in onComplete callback:",err)}}}catch(err){if(typeof onComplete==="function"){try{onComplete(err,this)}catch(err){console.error("Error in onComplete callback:",err)}}else{throw err}}return this}async transaction(callback){if(this.isWildcardPath){throw new Error(`Cannot start a transaction on wildcard path "/${this.path}"`)}if(!this.db.isReady){await this.db.ready()}let throwError;const cb=currentValue=>{currentValue=this.db.types.deserialize(this.path,currentValue);const snap=new data_snapshot_1.DataSnapshot(this,currentValue);let newValue;try{newValue=callback(snap)}catch(err){throwError=err;return}if(newValue instanceof Promise){return newValue.then((val=>this.db.types.serialize(this.path,val))).catch((err=>{throwError=err;return}))}else{return this.db.types.serialize(this.path,newValue)}};const{cursor:cursor}=await this.db.api.transaction(this.path,cb,{context:this[_private].context});this.cursor=cursor;if(throwError){throw throwError}return this}on(event,callback,cancelCallback){if(this.path===""&&["value","child_changed"].includes(event)){console.warn("WARNING: Listening for value and child_changed events on the root node is a bad practice. These events require loading of all data (value event), or potentially lots of data (child_changed event) each time they are fired")}let eventPublisher=null;const eventStream=new subscription_1.EventStream((publisher=>{eventPublisher=publisher}));const cb={event:event,stream:eventStream,userCallback:typeof callback==="function"&&callback,ourCallback:(err,path,newValue,oldValue,eventContext)=>{if(err){this.db.debug.error(`Error getting data for event ${event} on path "${path}"`,err);return}const ref=this.db.ref(path);ref[_private].vars=path_info_1.PathInfo.extractVariables(this.path,path);let callbackObject;if(event.startsWith("notify_")){callbackObject=ref.context(eventContext||{})}else{const values={previous:this.db.types.deserialize(path,oldValue),current:this.db.types.deserialize(path,newValue)};if(event==="child_removed"){callbackObject=new data_snapshot_1.DataSnapshot(ref,values.previous,true,values.previous,eventContext)}else if(event==="mutations"){callbackObject=new data_snapshot_1.MutationsDataSnapshot(ref,values.current,eventContext)}else{const isRemoved=event==="mutated"&&values.current===null;callbackObject=new data_snapshot_1.DataSnapshot(ref,values.current,isRemoved,values.previous,eventContext)}}eventPublisher.publish(callbackObject);if(eventContext===null||eventContext===void 0?void 0:eventContext.acebase_cursor){this.cursor=eventContext.acebase_cursor}}};this[_private].callbacks.push(cb);const subscribe=()=>{if(typeof callback==="function"){eventStream.subscribe(callback,((activated,cancelReason)=>{if(!activated){cancelCallback&&cancelCallback(cancelReason)}}))}const advancedOptions=typeof callback==="object"?callback:{newOnly:!callback};if(typeof advancedOptions.newOnly!=="boolean"){advancedOptions.newOnly=false}if(this.isWildcardPath){advancedOptions.newOnly=true}const cancelSubscription=err=>{const callbacks=this[_private].callbacks;callbacks.splice(callbacks.indexOf(cb),1);this.db.api.unsubscribe(this.path,event,cb.ourCallback);this.db.debug.error(`Subscription "${event}" on path "/${this.path}" canceled because of an error: ${err.message}`);eventPublisher.cancel(err.message)};const authorized=this.db.api.subscribe(this.path,event,cb.ourCallback,{newOnly:advancedOptions.newOnly,cancelCallback:cancelSubscription,syncFallback:advancedOptions.syncFallback});const allSubscriptionsStoppedCallback=()=>{const callbacks=this[_private].callbacks;callbacks.splice(callbacks.indexOf(cb),1);return this.db.api.unsubscribe(this.path,event,cb.ourCallback)};if(authorized instanceof Promise){authorized.then((()=>{eventPublisher.start(allSubscriptionsStoppedCallback)})).catch(cancelSubscription)}else{eventPublisher.start(allSubscriptionsStoppedCallback)}if(!advancedOptions.newOnly){if(event==="value"){this.get((snap=>{eventPublisher.publish(snap)}))}else if(event==="child_added"){this.get((snap=>{const val=snap.val();if(val===null||typeof val!=="object"){return}Object.keys(val).forEach((key=>{const childSnap=new data_snapshot_1.DataSnapshot(this.child(key),val[key]);eventPublisher.publish(childSnap)}))}))}else if(event==="notify_child_added"){const step=100,limit=step;let skip=0;const more=async()=>{const children=await this.db.api.reflect(this.path,"children",{limit:limit,skip:skip});children.list.forEach((child=>{const childRef=this.child(child.key);eventPublisher.publish(childRef)}));if(children.more){skip+=step;more()}};more()}}};if(this.db.isReady){subscribe()}else{this.db.ready(subscribe)}return eventStream}off(event,callback){const subscriptions=this[_private].callbacks;const stopSubs=subscriptions.filter((sub=>(!event||sub.event===event)&&(!callback||sub.userCallback===callback)));if(stopSubs.length===0){this.db.debug.warn(`Can't find event subscriptions to stop (path: "${this.path}", event: ${event||"(any)"}, callback: ${callback})`)}stopSubs.forEach((sub=>{sub.stream.stop()}));return this}get(optionsOrCallback,callback){if(!this.db.isReady){const promise=this.db.ready().then((()=>this.get(optionsOrCallback,callback)));return typeof optionsOrCallback!=="function"&&typeof callback!=="function"?promise:undefined}callback=typeof optionsOrCallback==="function"?optionsOrCallback:typeof callback==="function"?callback:undefined;if(this.isWildcardPath){const error=new Error(`Cannot get value of wildcard path "/${this.path}". Use .query() instead`);if(typeof callback==="function"){throw error}return Promise.reject(error)}const options=new DataRetrievalOptions(typeof optionsOrCallback==="object"?optionsOrCallback:{cache_mode:"allow"});const promise=this.db.api.get(this.path,options).then((result=>{var _a;const isNewApiResult="context"in result&&"value"in result;if(!isNewApiResult){console.warn("AceBase api.get method returned an old response value. Update your acebase or acebase-client package");result={value:result,context:{}}}const value=this.db.types.deserialize(this.path,result.value);const snapshot=new data_snapshot_1.DataSnapshot(this,value,undefined,undefined,result.context);if((_a=result.context)===null||_a===void 0?void 0:_a.acebase_cursor){this.cursor=result.context.acebase_cursor}return snapshot}));if(callback){promise.then(callback).catch((err=>{console.error("Uncaught error:",err)}));return}else{return promise}}once(event,options){if(event==="value"&&!this.isWildcardPath){return this.get(options)}return new Promise((resolve=>{const callback=snap=>{this.off(event,callback);resolve(snap)};this.on(event,callback)}))}push(value,onComplete){if(this.isWildcardPath){const error=new Error(`Cannot push to wildcard path "/${this.path}"`);if(typeof value==="undefined"||typeof onComplete==="function"){throw error}return Promise.reject(error)}const id=id_1.ID.generate();const ref=this.child(id);ref[_private].pushed=true;if(typeof value!=="undefined"){return ref.set(value,onComplete).then((()=>ref))}else{return ref}}async remove(){if(this.isWildcardPath){throw new Error(`Cannot remove wildcard path "/${this.path}". Use query().remove instead`)}if(this.parent===null){throw new Error("Cannot remove the root node")}return this.set(null)}async exists(){if(this.isWildcardPath){throw new Error(`Cannot check wildcard path "/${this.path}" existence`)}if(!this.db.isReady){await this.db.ready()}return this.db.api.exists(this.path)}get isWildcardPath(){return this.path.indexOf("*")>=0||this.path.indexOf("$")>=0}query(){return new DataReferenceQuery(this)}async count(){const info=await this.reflect("info",{child_count:true});return info.children.count}async reflect(type,args){if(this.isWildcardPath){throw new Error(`Cannot reflect on wildcard path "/${this.path}"`)}if(!this.db.isReady){await this.db.ready()}return this.db.api.reflect(this.path,type,args)}async export(write,options={format:"json",type_safe:true}){if(this.isWildcardPath){throw new Error(`Cannot export wildcard path "/${this.path}"`)}if(!this.db.isReady){await this.db.ready()}const writeFn=typeof write==="function"?write:write.write.bind(write);return this.db.api.export(this.path,writeFn,options)}async import(read,options={format:"json",suppress_events:false}){if(this.isWildcardPath){throw new Error(`Cannot import to wildcard path "/${this.path}"`)}if(!this.db.isReady){await this.db.ready()}return this.db.api.import(this.path,read,options)}proxy(options){const isOptionsArg=typeof options==="object"&&(typeof options.cursor!=="undefined"||typeof options.defaultValue!=="undefined");if(typeof options!=="undefined"&&!isOptionsArg){this.db.debug.warn("Warning: live data proxy is being initialized with a deprecated method signature. Use ref.proxy(options) instead of ref.proxy(defaultValue)");options={defaultValue:options}}return data_proxy_1.LiveDataProxy.create(this,options)}observe(options){if(options){throw new Error("observe does not support data retrieval options yet")}if(this.isWildcardPath){throw new Error(`Cannot observe wildcard path "/${this.path}"`)}const Observable=(0,optional_observable_1.getObservable)();return new Observable((observer=>{let cache,resolved=false;let promise=this.get(options).then((snap=>{resolved=true;cache=snap.val();observer.next(cache)}));const updateCache=snap=>{if(!resolved){promise=promise.then((()=>updateCache(snap)));return}const mutatedPath=snap.ref.path;if(mutatedPath===this.path){cache=snap.val();return observer.next(cache)}const trailKeys=path_info_1.PathInfo.getPathKeys(mutatedPath).slice(path_info_1.PathInfo.getPathKeys(this.path).length);let target=cache;while(trailKeys.length>1){const key=trailKeys.shift();if(!(key in target)){target[key]=typeof trailKeys[0]==="number"?[]:{}}target=target[key]}const prop=trailKeys.shift();const newValue=snap.val();if(newValue===null){target instanceof Array&&typeof prop==="number"?target.splice(prop,1):delete target[prop]}else{target[prop]=newValue}observer.next(cache)};this.on("mutated",updateCache);return()=>{this.off("mutated",updateCache)}}))}async forEach(callbackOrOptions,callback){let options;if(typeof callbackOrOptions==="function"){callback=callbackOrOptions}else{options=callbackOrOptions}if(typeof callback!=="function"){throw new TypeError("No callback function given")}const info=await this.reflect("children",{limit:0,skip:0});const summary={canceled:false,total:info.list.length,processed:0};for(let i=0;ithis.get(optionsOrCallback,callback)));return typeof optionsOrCallback!=="function"&&typeof callback!=="function"?promise:undefined}callback=typeof optionsOrCallback==="function"?optionsOrCallback:typeof callback==="function"?callback:undefined;const options=new QueryDataRetrievalOptions(typeof optionsOrCallback==="object"?optionsOrCallback:{snapshots:true,cache_mode:"allow"});options.allow_cache=options.cache_mode!=="bypass";options.eventHandler=ev=>{if(!this[_private].events[ev.name]){return false}const listeners=this[_private].events[ev.name];if(typeof listeners!=="object"||listeners.length===0){return false}if(["add","change","remove"].includes(ev.name)){const ref=new DataReference(this.ref.db,ev.path);const eventData={name:ev.name};if(options.snapshots&&ev.name!=="remove"){const val=db.types.deserialize(ev.path,ev.value);eventData.snapshot=new data_snapshot_1.DataSnapshot(ref,val,false)}else{eventData.ref=ref}ev=eventData}listeners.forEach((callback=>{try{callback(ev)}catch(e){}}))};options.monitor={add:false,change:false,remove:false};if(this[_private].events){if(this[_private].events["add"]&&this[_private].events["add"].length>0){options.monitor.add=true}if(this[_private].events["change"]&&this[_private].events["change"].length>0){options.monitor.change=true}if(this[_private].events["remove"]&&this[_private].events["remove"].length>0){options.monitor.remove=true}}this.stop();const db=this.ref.db;return db.api.query(this.ref.path,this[_private],options).catch((err=>{throw new Error(err)})).then((res=>{const{stop:stop}=res;let{results:results,context:context}=res;this.stop=async()=>{await stop()};if(!("results"in res&&"context"in res)){console.warn("Query results missing context. Update your acebase and/or acebase-client packages");results=res,context={}}if(options.snapshots){const snaps=results.map((result=>{const val=db.types.deserialize(result.path,result.val);return new data_snapshot_1.DataSnapshot(db.ref(result.path),val,false,undefined,context)}));return DataSnapshotsArray.from(snaps)}else{const refs=results.map((path=>db.ref(path)));return DataReferencesArray.from(refs)}})).then((results=>{callback&&callback(results);return results}))}async stop(){}getRefs(callback){return this.get({snapshots:false},callback)}find(){return this.get({snapshots:false})}async count(){const refs=await this.find();return refs.length}async exists(){const originalTake=this[_private].take;const p=this.take(1).find();this.take(originalTake);const refs=await p;return refs.length!==0}async remove(callback){const refs=await this.find();const parentUpdates=refs.reduce(((parents,ref)=>{const parent=parents[ref.parent.path];if(!parent){parents[ref.parent.path]=[ref]}else{parent.push(ref)}return parents}),{});const db=this.ref.db;const promises=Object.keys(parentUpdates).map((async parentPath=>{const updates=refs.reduce(((updates,ref)=>{updates[ref.key]=null;return updates}),{});const ref=db.ref(parentPath);try{await ref.update(updates);return{ref:ref,success:true}}catch(error){return{ref:ref,success:false,error:error}}}));const results=await Promise.all(promises);callback&&callback(results);return results}on(event,callback){if(!this[_private].events[event]){this[_private].events[event]=[]}this[_private].events[event].push(callback);return this}off(event,callback){if(typeof event==="undefined"){this[_private].events={};return this}if(!this[_private].events[event]){return this}if(typeof callback==="undefined"){delete this[_private].events[event];return this}const index=this[_private].events[event].indexOf(callback);if(!~index){return this}this[_private].events[event].splice(index,1);return this}async forEach(callbackOrOptions,callback){let options;if(typeof callbackOrOptions==="function"){callback=callbackOrOptions}else{options=callbackOrOptions}if(typeof callback!=="function"){throw new TypeError("No callback function given")}const refs=await this.find();const summary={canceled:false,total:refs.length,processed:0};for(let i=0;iarr[i]=snap));return arr}getValues(){return this.map((snap=>snap.val()))}}exports.DataSnapshotsArray=DataSnapshotsArray;class DataReferencesArray extends Array{static from(refs){const arr=new DataReferencesArray(refs.length);refs.forEach(((ref,i)=>arr[i]=ref));return arr}getPaths(){return this.map((ref=>ref.path))}}exports.DataReferencesArray=DataReferencesArray},{"./data-proxy":25,"./data-snapshot":27,"./id":29,"./optional-observable":32,"./path-info":34,"./subscription":41}],27:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.MutationsDataSnapshot=exports.DataSnapshot=void 0;const path_info_1=require("./path-info");function getChild(snapshot,path,previous=false){if(!snapshot.exists()){return null}let child=previous?snapshot.previous():snapshot.val();if(typeof path==="number"){return child[path]}path_info_1.PathInfo.getPathKeys(path).every((key=>{child=child[key];return typeof child!=="undefined"}));return child||null}function getChildren(snapshot){if(!snapshot.exists()){return[]}const value=snapshot.val();if(value instanceof Array){return new Array(value.length).map(((v,i)=>i))}if(typeof value==="object"){return Object.keys(value)}return[]}class DataSnapshot{constructor(ref,value,isRemoved=false,prevValue,context){this.ref=ref;this.val=()=>value;this.previous=()=>prevValue;this.exists=()=>{if(isRemoved){return false}return value!==null&&typeof value!=="undefined"};this.context=()=>context||{}}exists(){return false}static for(ref,value){return new DataSnapshot(ref,value)}child(path){const val=getChild(this,path,false);const prev=getChild(this,path,true);return new DataSnapshot(this.ref.child(path),val,false,prev)}hasChild(path){return getChild(this,path)!==null}hasChildren(){return getChildren(this).length>0}numChildren(){return getChildren(this).length}forEach(callback){const value=this.val();const prev=this.previous();return getChildren(this).every((key=>{const snap=new DataSnapshot(this.ref.child(key),value[key],false,prev[key]);return callback(snap)}))}get key(){return this.ref.key}}exports.DataSnapshot=DataSnapshot;class MutationsDataSnapshot extends DataSnapshot{constructor(ref,mutations,context){super(ref,mutations,false,undefined,context);this.previous=()=>{throw new Error("Iterate values to get previous values for each mutation")};this.val=(warn=true)=>{if(warn){console.warn("Unless you know what you are doing, it is best not to use the value of a mutations snapshot directly. Use child methods and forEach to iterate the mutations instead")}return mutations}}forEach(callback){const mutations=this.val();return mutations.every((mutation=>{const ref=mutation.target.reduce(((ref,key)=>ref.child(key)),this.ref);const snap=new DataSnapshot(ref,mutation.val,false,mutation.prev);return callback(snap)}))}child(index){if(typeof index!=="number"){throw new Error("child index must be a number")}const mutation=this.val()[index];const ref=mutation.target.reduce(((ref,key)=>ref.child(key)),this.ref);return new DataSnapshot(ref,mutation.val,false,mutation.prev)}}exports.MutationsDataSnapshot=MutationsDataSnapshot},{"./path-info":34}],28:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.DebugLogger=void 0;const process_1=require("./process");const noop=()=>{};class DebugLogger{constructor(level="log",prefix=""){this.level=level;this.prefix=prefix;this.setLevel(level)}setLevel(level){const prefix=this.prefix?this.prefix+" %s":"";this.verbose=["verbose"].includes(level)?prefix?console.log.bind(console,prefix):console.log.bind(console):noop;this.log=["verbose","log"].includes(level)?prefix?console.log.bind(console,prefix):console.log.bind(console):noop;this.warn=["verbose","log","warn"].includes(level)?prefix?console.warn.bind(console,prefix):console.warn.bind(console):noop;this.error=["verbose","log","warn","error"].includes(level)?prefix?console.error.bind(console,prefix):console.error.bind(console):noop;this.write=text=>{const isRunKit=typeof process_1.default!=="undefined"&&process_1.default.env&&typeof process_1.default.env.RUNKIT_ENDPOINT_PATH==="string";if(text&&isRunKit){text.split("\n").forEach((line=>console.log(line)))}else{console.log(text)}}}}exports.DebugLogger=DebugLogger},{"./process":36}],29:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.ID=void 0;const cuid_1=require("./cuid");let timeBias=0;class ID{static set timeBias(bias){if(typeof bias!=="number"){return}timeBias=bias}static generate(){return(0,cuid_1.default)(timeBias).slice(1)}}exports.ID=ID},{"./cuid":23}],30:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.ObjectCollection=exports.PartialArray=exports.SchemaDefinition=exports.Colorize=exports.ColorStyle=exports.SimpleEventEmitter=exports.SimpleCache=exports.ascii85=exports.PathInfo=exports.Utils=exports.TypeMappings=exports.Transport=exports.EventSubscription=exports.EventPublisher=exports.EventStream=exports.PathReference=exports.ID=exports.DebugLogger=exports.OrderedCollectionProxy=exports.proxyAccess=exports.MutationsDataSnapshot=exports.DataSnapshot=exports.DataReferencesArray=exports.DataSnapshotsArray=exports.QueryDataRetrievalOptions=exports.DataRetrievalOptions=exports.DataReferenceQuery=exports.DataReference=exports.Api=exports.AceBaseBaseSettings=exports.AceBaseBase=void 0;var acebase_base_1=require("./acebase-base");Object.defineProperty(exports,"AceBaseBase",{enumerable:true,get:function(){return acebase_base_1.AceBaseBase}});Object.defineProperty(exports,"AceBaseBaseSettings",{enumerable:true,get:function(){return acebase_base_1.AceBaseBaseSettings}});var api_1=require("./api");Object.defineProperty(exports,"Api",{enumerable:true,get:function(){return api_1.Api}});var data_reference_1=require("./data-reference");Object.defineProperty(exports,"DataReference",{enumerable:true,get:function(){return data_reference_1.DataReference}});Object.defineProperty(exports,"DataReferenceQuery",{enumerable:true,get:function(){return data_reference_1.DataReferenceQuery}});Object.defineProperty(exports,"DataRetrievalOptions",{enumerable:true,get:function(){return data_reference_1.DataRetrievalOptions}});Object.defineProperty(exports,"QueryDataRetrievalOptions",{enumerable:true,get:function(){return data_reference_1.QueryDataRetrievalOptions}});Object.defineProperty(exports,"DataSnapshotsArray",{enumerable:true,get:function(){return data_reference_1.DataSnapshotsArray}});Object.defineProperty(exports,"DataReferencesArray",{enumerable:true,get:function(){return data_reference_1.DataReferencesArray}});var data_snapshot_1=require("./data-snapshot");Object.defineProperty(exports,"DataSnapshot",{enumerable:true,get:function(){return data_snapshot_1.DataSnapshot}});Object.defineProperty(exports,"MutationsDataSnapshot",{enumerable:true,get:function(){return data_snapshot_1.MutationsDataSnapshot}});var data_proxy_1=require("./data-proxy");Object.defineProperty(exports,"proxyAccess",{enumerable:true,get:function(){return data_proxy_1.proxyAccess}});Object.defineProperty(exports,"OrderedCollectionProxy",{enumerable:true,get:function(){return data_proxy_1.OrderedCollectionProxy}});var debug_1=require("./debug");Object.defineProperty(exports,"DebugLogger",{enumerable:true,get:function(){return debug_1.DebugLogger}});var id_1=require("./id");Object.defineProperty(exports,"ID",{enumerable:true,get:function(){return id_1.ID}});var path_reference_1=require("./path-reference");Object.defineProperty(exports,"PathReference",{enumerable:true,get:function(){return path_reference_1.PathReference}});var subscription_1=require("./subscription");Object.defineProperty(exports,"EventStream",{enumerable:true,get:function(){return subscription_1.EventStream}});Object.defineProperty(exports,"EventPublisher",{enumerable:true,get:function(){return subscription_1.EventPublisher}});Object.defineProperty(exports,"EventSubscription",{enumerable:true,get:function(){return subscription_1.EventSubscription}});exports.Transport=require("./transport");var type_mappings_1=require("./type-mappings");Object.defineProperty(exports,"TypeMappings",{enumerable:true,get:function(){return type_mappings_1.TypeMappings}});exports.Utils=require("./utils");var path_info_1=require("./path-info");Object.defineProperty(exports,"PathInfo",{enumerable:true,get:function(){return path_info_1.PathInfo}});var ascii85_1=require("./ascii85");Object.defineProperty(exports,"ascii85",{enumerable:true,get:function(){return ascii85_1.ascii85}});var simple_cache_1=require("./simple-cache");Object.defineProperty(exports,"SimpleCache",{enumerable:true,get:function(){return simple_cache_1.SimpleCache}});var simple_event_emitter_1=require("./simple-event-emitter");Object.defineProperty(exports,"SimpleEventEmitter",{enumerable:true,get:function(){return simple_event_emitter_1.SimpleEventEmitter}});var simple_colors_1=require("./simple-colors");Object.defineProperty(exports,"ColorStyle",{enumerable:true,get:function(){return simple_colors_1.ColorStyle}});Object.defineProperty(exports,"Colorize",{enumerable:true,get:function(){return simple_colors_1.Colorize}});var schema_1=require("./schema");Object.defineProperty(exports,"SchemaDefinition",{enumerable:true,get:function(){return schema_1.SchemaDefinition}});var partial_array_1=require("./partial-array");Object.defineProperty(exports,"PartialArray",{enumerable:true,get:function(){return partial_array_1.PartialArray}});var object_collection_1=require("./object-collection");Object.defineProperty(exports,"ObjectCollection",{enumerable:true,get:function(){return object_collection_1.ObjectCollection}})},{"./acebase-base":19,"./api":20,"./ascii85":21,"./data-proxy":25,"./data-reference":26,"./data-snapshot":27,"./debug":28,"./id":29,"./object-collection":31,"./partial-array":33,"./path-info":34,"./path-reference":35,"./schema":37,"./simple-cache":38,"./simple-colors":39,"./simple-event-emitter":40,"./subscription":41,"./transport":42,"./type-mappings":43,"./utils":44}],31:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.ObjectCollection=void 0;const id_1=require("./id");class ObjectCollection{static from(array){const collection={};array.forEach((child=>{collection[id_1.ID.generate()]=child}));return collection}}exports.ObjectCollection=ObjectCollection},{"./id":29}],32:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.ObservableShim=exports.setObservable=exports.getObservable=void 0;let _observable;function getObservable(){if(_observable){return _observable}if(typeof window!=="undefined"&&window.Observable){_observable=window.Observable;return _observable}try{const{Observable:Observable}=require("rxjs");if(!Observable){throw new Error("not loaded")}_observable=Observable;return Observable}catch(err){throw new Error("RxJS Observable could not be loaded. If you are using a browser build, add it to AceBase using db.setObservable. For node.js builds, add it to your project with: npm i rxjs")}}exports.getObservable=getObservable;function setObservable(Observable){if(Observable==="shim"){console.warn("Using AceBase's simple Observable shim. Only use this if you know what you're doing.");Observable=ObservableShim}_observable=Observable}exports.setObservable=setObservable;class ObservableShim{constructor(create){this._active=false;this._subscribers=[];this._create=create}subscribe(subscriber){if(!this._active){const next=value=>{this._subscribers.forEach((s=>{try{s(value)}catch(err){console.error("Error in subscriber callback:",err)}}))};const observer={next:next};this._cleanup=this._create(observer);this._active=true}this._subscribers.push(subscriber);const unsubscribe=()=>{this._subscribers.splice(this._subscribers.indexOf(subscriber),1);if(this._subscribers.length===0){this._active=false;this._cleanup()}};const subscription={unsubscribe:unsubscribe};return subscription}}exports.ObservableShim=ObservableShim},{rxjs:15}],33:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.PartialArray=void 0;class PartialArray{constructor(sparseArray){if(sparseArray instanceof Array){for(let i=0;ikey.startsWith("[")?parseInt(key.slice(1,-1)):key))}class PathInfo{constructor(path){if(typeof path==="string"){this.keys=getPathKeys(path)}else if(path instanceof Array){this.keys=path}this.path=this.keys.reduce(((path,key,i)=>i===0?`${key}`:typeof key==="string"?`${path}/${key}`:`${path}[${key}]`),"")}static get(path){return new PathInfo(path)}static getChildPath(path,childKey){return PathInfo.get(path).child(childKey).path}static getPathKeys(path){return getPathKeys(path)}get key(){return this.keys.length===0?null:this.keys.slice(-1)[0]}get parent(){if(this.keys.length==0){return null}const parentKeys=this.keys.slice(0,-1);return new PathInfo(parentKeys)}get parentPath(){return this.keys.length===0?null:this.parent.path}child(childKey){if(typeof childKey==="string"){childKey=getPathKeys(childKey)}return new PathInfo(this.keys.concat(childKey))}childPath(childKey){return this.child(childKey).path}get pathKeys(){return this.keys}static extractVariables(varPath,fullPath){if(!varPath.includes("*")&&!varPath.includes("$")){return[]}const keys=getPathKeys(varPath);const pathKeys=getPathKeys(fullPath);let count=0;const variables={get length(){return count}};keys.forEach(((key,index)=>{const pathKey=pathKeys[index];if(key==="*"){variables[count++]=pathKey}else if(typeof key==="string"&&key[0]==="$"){variables[count++]=pathKey;variables[key]=pathKey;const varName=key.slice(1);if(typeof variables[varName]==="undefined"){variables[varName]=pathKey}}}));return variables}static fillVariables(varPath,fullPath){if(varPath.indexOf("*")<0&&varPath.indexOf("$")<0){return varPath}const keys=getPathKeys(varPath);const pathKeys=getPathKeys(fullPath);const merged=keys.map(((key,index)=>{if(key===pathKeys[index]||index>=pathKeys.length){return key}else if(typeof key==="string"&&(key==="*"||key[0]==="$")){return pathKeys[index]}else{throw new Error(`Path "${fullPath}" cannot be used to fill variables of path "${varPath}" because they do not match`)}}));let mergedPath="";merged.forEach((key=>{if(typeof key==="number"){mergedPath+=`[${key}]`}else{if(mergedPath.length>0){mergedPath+="/"}mergedPath+=key}}));return mergedPath}static fillVariables2(varPath,vars){if(typeof vars!=="object"||Object.keys(vars).length===0){return varPath}const pathKeys=getPathKeys(varPath);let n=0;const targetPath=pathKeys.reduce(((path,key)=>{if(typeof key==="string"&&(key==="*"||key.startsWith("$"))){return PathInfo.getChildPath(path,vars[n++])}else{return PathInfo.getChildPath(path,key)}}),"");return targetPath}equals(otherPath){const other=otherPath instanceof PathInfo?otherPath:new PathInfo(otherPath);if(this.path===other.path){return true}if(this.keys.length!==other.keys.length){return false}return this.keys.every(((key,index)=>{const otherKey=other.keys[index];return otherKey===key||typeof otherKey==="string"&&(otherKey==="*"||otherKey[0]==="$")||typeof key==="string"&&(key==="*"||key[0]==="$")}))}isAncestorOf(descendantPath){const descendant=descendantPath instanceof PathInfo?descendantPath:new PathInfo(descendantPath);if(descendant.path===""||this.path===descendant.path){return false}if(this.path===""){return true}if(this.keys.length>=descendant.keys.length){return false}return this.keys.every(((key,index)=>{const otherKey=descendant.keys[index];return otherKey===key||typeof otherKey==="string"&&(otherKey==="*"||otherKey[0]==="$")||typeof key==="string"&&(key==="*"||key[0]==="$")}))}isDescendantOf(ancestorPath){const ancestor=ancestorPath instanceof PathInfo?ancestorPath:new PathInfo(ancestorPath);if(this.path===""||this.path===ancestor.path){return false}if(ancestorPath===""){return true}if(ancestor.keys.length>=this.keys.length){return false}return ancestor.keys.every(((key,index)=>{const otherKey=this.keys[index];return otherKey===key||typeof otherKey==="string"&&(otherKey==="*"||otherKey[0]==="$")||typeof key==="string"&&(key==="*"||key[0]==="$")}))}isOnTrailOf(otherPath){const other=otherPath instanceof PathInfo?otherPath:new PathInfo(otherPath);if(this.path.length===0||other.path.length===0){return true}if(this.path===other.path){return true}return this.pathKeys.every(((key,index)=>{if(index>=other.keys.length){return true}const otherKey=other.keys[index];return otherKey===key||typeof otherKey==="string"&&(otherKey==="*"||otherKey[0]==="$")||typeof key==="string"&&(key==="*"||key[0]==="$")}))}isChildOf(otherPath){const other=otherPath instanceof PathInfo?otherPath:new PathInfo(otherPath);if(this.path===""){return false}return this.parent.equals(other)}isParentOf(otherPath){const other=otherPath instanceof PathInfo?otherPath:new PathInfo(otherPath);if(other.path===""){return false}return this.equals(other.parent)}}exports.PathInfo=PathInfo},{}],35:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.PathReference=void 0;class PathReference{constructor(path){this.path=path}}exports.PathReference=PathReference},{}],36:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.default={nextTick(fn){setTimeout(fn,0)}}},{}],37:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.SchemaDefinition=void 0;function parse(definition){let pos=0;function consumeSpaces(){let c;while(c=definition[pos],[" ","\r","\n","\t"].includes(c)){pos++}}function consumeCharacter(c){if(definition[pos]!==c){throw new Error(`Unexpected character at position ${pos}. Expected: '${c}', found '${definition[pos]}'`)}pos++}function readProperty(){consumeSpaces();const prop={name:"",optional:false,wildcard:false};let c;while(c=definition[pos],c==="_"||c==="$"||c>="a"&&c<="z"||c>="A"&&c<="Z"||prop.name.length>0&&c>="0"&&c<="9"||prop.name.length===0&&c==="*"){prop.name+=c;pos++}if(prop.name.length===0){throw new Error(`Property name expected at position ${pos}, found: ${definition.slice(pos,pos+10)}..`)}if(definition[pos]==="?"){prop.optional=true;pos++}if(prop.name==="*"||prop.name[0]==="$"){prop.optional=true;prop.wildcard=true}consumeSpaces();consumeCharacter(":");return prop}function readType(){consumeSpaces();let type={typeOf:"any"},c;let name="";while(c=definition[pos],c>="a"&&c<="z"||c>="A"&&c<="Z"){name+=c;pos++}if(name.length===0){if(definition[pos]==="*"){consumeCharacter("*");type.typeOf="any"}else if(["'",'"',"`"].includes(definition[pos])){type.typeOf="string";type.value="";const quote=definition[pos];consumeCharacter(quote);while(c=definition[pos],c&&c!==quote){type.value+=c;pos++}consumeCharacter(quote)}else if(definition[pos]>="0"&&definition[pos]<="9"){type.typeOf="number";let nr="";while(c=definition[pos],c==="."||c==="n"||c>="0"&&c<="9"){nr+=c;pos++}if(nr.endsWith("n")){type.value=BigInt(nr)}else if(nr.includes(".")){type.value=parseFloat(nr)}else{type.value=parseInt(nr)}}else if(definition[pos]==="{"){consumeCharacter("{");type.typeOf="object";type.instanceOf=Object;type.children=[];while(true){const prop=readProperty();const types=readTypes();type.children.push({name:prop.name,optional:prop.optional,wildcard:prop.wildcard,types:types});consumeSpaces();if(definition[pos]==="}"){break}consumeCharacter(",")}consumeCharacter("}")}else if(definition[pos]==="/"){consumeCharacter("/");let pattern="",flags="";while(c=definition[pos],c!=="/"||pattern.endsWith("\\")){pattern+=c;pos++}consumeCharacter("/");while(c=definition[pos],["g","i","m","s","u","y","d"].includes(c)){flags+=c;pos++}type.typeOf="string";type.matches=new RegExp(pattern,flags)}else{throw new Error(`Expected a type definition at position ${pos}, found character '${definition[pos]}'`)}}else if(["string","number","boolean","bigint","undefined","String","Number","Boolean","BigInt"].includes(name)){type.typeOf=name.toLowerCase()}else if(name==="Object"||name==="object"){type.typeOf="object";type.instanceOf=Object}else if(name==="Date"){type.typeOf="object";type.instanceOf=Date}else if(name==="Binary"||name==="binary"){type.typeOf="object";type.instanceOf=ArrayBuffer}else if(name==="any"){type.typeOf="any"}else if(name==="null"){type.typeOf="object";type.value=null}else if(name==="Array"){consumeCharacter("<");type.typeOf="object";type.instanceOf=Array;type.genericTypes=readTypes();consumeCharacter(">")}else if(["true","false"].includes(name)){type.typeOf="boolean";type.value=name==="true"}else{throw new Error(`Unknown type at position ${pos}: "${type}"`)}consumeSpaces();while(definition[pos]==="["){consumeCharacter("[");consumeCharacter("]");type={typeOf:"object",instanceOf:Array,genericTypes:[type]}}return type}function readTypes(){consumeSpaces();const types=[readType()];while(definition[pos]==="|"){consumeCharacter("|");types.push(readType());consumeSpaces()}return types}return readType()}function checkObject(path,properties,obj,partial){const invalidProperties=properties.find((prop=>prop.name==="*"||prop.name[0]==="$"))?[]:Object.keys(obj).filter((key=>![null,undefined].includes(obj[key])&&!properties.find((prop=>prop.name===key))));if(invalidProperties.length>0){return{ok:false,reason:`Object at path "${path}" cannot have propert${invalidProperties.length===1?"y":"ies"} ${invalidProperties.map((p=>`"${p}"`)).join(", ")}`}}function checkProperty(property){const hasValue=![null,undefined].includes(obj[property.name]);if(!property.optional&&(partial?obj[property.name]===null:!hasValue)){return{ok:false,reason:`Property at path "${path}/${property.name}" is not optional`}}if(hasValue&&property.types.length===1){return checkType(`${path}/${property.name}`,property.types[0],obj[property.name],false)}if(hasValue&&!property.types.some((type=>checkType(`${path}/${property.name}`,type,obj[property.name],false).ok))){return{ok:false,reason:`Property at path "${path}/${property.name}" does not match any of ${property.types.length} allowed types`}}return{ok:true}}const namedProperties=properties.filter((prop=>!prop.wildcard));const failedProperty=namedProperties.find((prop=>!checkProperty(prop).ok));if(failedProperty){const reason=checkProperty(failedProperty).reason;return{ok:false,reason:reason}}const wildcardProperty=properties.find((prop=>prop.wildcard));if(!wildcardProperty){return{ok:true}}const wildcardChildKeys=Object.keys(obj).filter((key=>!namedProperties.find((prop=>prop.name===key))));let result={ok:true};for(let i=0;i0){if(type.typeOf!=="object"){return{ok:false,reason:`path "${path}" must be typeof ${type.typeOf}`}}if(!type.children){return ok}const childKey=trailKeys[0];let property=type.children.find((prop=>prop.name===childKey));if(!property){property=type.children.find((prop=>prop.name==="*"||prop.name[0]==="$"))}if(!property){return{ok:false,reason:`Object at path "${path}" cannot have property "${childKey}"`}}if(property.optional&&value===null&&trailKeys.length===1){return ok}let result;property.types.some((type=>{const childPath=typeof childKey==="number"?`${path}[${childKey}]`:`${path}/${childKey}`;result=checkType(childPath,type,value,partial,trailKeys.slice(1));return result.ok}));return result}if(value===null){return ok}if(type.instanceOf===Object&&(typeof value!=="object"||value instanceof Array||value instanceof Date)){return{ok:false,reason:`path "${path}" must be an object collection`}}if(type.instanceOf&&(typeof value!=="object"||value.constructor!==type.instanceOf)){return{ok:false,reason:`path "${path}" must be an instance of ${type.instanceOf.name}`}}if("value"in type&&value!==type.value){return{ok:false,reason:`path "${path}" must be value: ${type.value}`}}if(typeof value!==type.typeOf){return{ok:false,reason:`path "${path}" must be typeof ${type.typeOf}`}}if(type.instanceOf===Array&&type.genericTypes&&!value.every((v=>type.genericTypes.some((t=>checkType(path,t,v,false).ok))))){return{ok:false,reason:`every array value of path "${path}" must match one of the specified types`}}if(type.typeOf==="object"&&type.children){return checkObject(path,type.children,value,partial)}if(type.matches&&!type.matches.test(value)){return{ok:false,reason:`path "${path}" must match regular expression /${type.matches.source}/${type.matches.flags}`}}return ok}function getConstructorType(val){switch(val){case String:return"string";case Number:return"number";case Boolean:return"boolean";case Date:return"Date";case BigInt:return"bigint";case Array:throw new Error("Schema error: Array cannot be used without a type. Use string[] or Array instead");default:throw new Error(`Schema error: unknown type used: ${val.name}`)}}class SchemaDefinition{constructor(definition){this.source=definition;if(typeof definition==="object"){const toTS=obj=>"{"+Object.keys(obj).map((key=>{let val=obj[key];if(val===undefined){val="undefined"}else if(val instanceof RegExp){val=`/${val.source}/${val.flags}`}else if(typeof val==="object"){val=toTS(val)}else if(typeof val==="function"){val=getConstructorType(val)}else if(!["string","number","boolean","bigint"].includes(typeof val)){throw new Error(`Type definition for key "${key}" must be a string, number, boolean, bigint, object, regular expression, or one of these classes: String, Number, Boolean, Date, BigInt`)}return`${key}:${val}`})).join(",")+"}";this.text=toTS(definition)}else if(typeof definition==="string"){this.text=definition}else{throw new Error("Type definiton must be a string or an object")}this.type=parse(this.text)}check(path,value,partial,trailKeys){return checkType(path,this.type,value,partial,trailKeys)}}exports.SchemaDefinition=SchemaDefinition},{}],38:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.SimpleCache=void 0;const utils_1=require("./utils");const calculateExpiryTime=expirySeconds=>expirySeconds>0?Date.now()+expirySeconds*1e3:Infinity;class SimpleCache{constructor(options){var _a;this.enabled=true;if(typeof options==="number"){options={expirySeconds:options}}options.cloneValues=options.cloneValues!==false;if(typeof options.expirySeconds!=="number"&&typeof options.maxEntries!=="number"){throw new Error("Either expirySeconds or maxEntries must be specified")}this.options=options;this.cache=new Map;const interval=setInterval((()=>{this.cleanUp()}),60*1e3);(_a=interval.unref)===null||_a===void 0?void 0:_a.call(interval)}get size(){return this.cache.size}has(key){if(!this.enabled){return false}return this.cache.has(key)}get(key){if(!this.enabled){return null}const entry=this.cache.get(key);if(!entry){return null}entry.expires=calculateExpiryTime(this.options.expirySeconds);entry.accessed=Date.now();return this.options.cloneValues?(0,utils_1.cloneObject)(entry.value):entry.value}set(key,value){if(this.options.maxEntries>0&&this.cache.size>=this.options.maxEntries&&!this.cache.has(key)){let oldest=null;const now=Date.now();for(const[key,entry]of this.cache.entries()){if(entry.expires<=now){this.cache.delete(key);oldest=null;break}if(!oldest||entry.accessed{if(entry.expires<=now){this.cache.delete(key)}}))}}exports.SimpleCache=SimpleCache},{"./utils":44}],39:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.Colorize=exports.SetColorsEnabled=exports.ColorsSupported=exports.ColorStyle=void 0;const process_1=require("./process");const FontCode={bold:1,dim:2,italic:3,underline:4,inverse:7,hidden:8,strikethrough:94};const ColorCode={black:30,red:31,green:32,yellow:33,blue:34,magenta:35,cyan:36,white:37,grey:90,brightRed:91};const BgColorCode={bgBlack:40,bgRed:41,bgGreen:42,bgYellow:43,bgBlue:44,bgMagenta:45,bgCyan:46,bgWhite:47,bgGrey:100,bgBrightRed:101};const ResetCode={all:0,color:39,background:49,bold:22,dim:22,italic:23,underline:24,inverse:27,hidden:28,strikethrough:29};var ColorStyle;(function(ColorStyle){ColorStyle["reset"]="reset";ColorStyle["bold"]="bold";ColorStyle["dim"]="dim";ColorStyle["italic"]="italic";ColorStyle["underline"]="underline";ColorStyle["inverse"]="inverse";ColorStyle["hidden"]="hidden";ColorStyle["strikethrough"]="strikethrough";ColorStyle["black"]="black";ColorStyle["red"]="red";ColorStyle["green"]="green";ColorStyle["yellow"]="yellow";ColorStyle["blue"]="blue";ColorStyle["magenta"]="magenta";ColorStyle["cyan"]="cyan";ColorStyle["grey"]="grey";ColorStyle["bgBlack"]="bgBlack";ColorStyle["bgRed"]="bgRed";ColorStyle["bgGreen"]="bgGreen";ColorStyle["bgYellow"]="bgYellow";ColorStyle["bgBlue"]="bgBlue";ColorStyle["bgMagenta"]="bgMagenta";ColorStyle["bgCyan"]="bgCyan";ColorStyle["bgWhite"]="bgWhite";ColorStyle["bgGrey"]="bgGrey"})(ColorStyle=exports.ColorStyle||(exports.ColorStyle={}));function ColorsSupported(){if(typeof process_1.default==="undefined"||!process_1.default.stdout||!process_1.default.env||!process_1.default.platform||process_1.default.platform==="browser"){return false}if(process_1.default.platform==="win32"){return true}const env=process_1.default.env;if(env.COLORTERM){return true}if(env.TERM==="dumb"){return false}if(env.CI||env.TEAMCITY_VERSION){return!!env.TRAVIS}if(["iTerm.app","HyperTerm","Hyper","MacTerm","Apple_Terminal","vscode"].includes(env.TERM_PROGRAM)){return true}if(/^xterm-256|^screen|^xterm|^vt100|color|ansi|cygwin|linux/i.test(env.TERM)){return true}return false}exports.ColorsSupported=ColorsSupported;let _enabled=ColorsSupported();function SetColorsEnabled(enabled){_enabled=ColorsSupported()&&enabled}exports.SetColorsEnabled=SetColorsEnabled;function Colorize(str,style){if(!_enabled){return str}const openCodes=[],closeCodes=[];const addStyle=style=>{if(style===ColorStyle.reset){openCodes.push(ResetCode.all)}else if(style in FontCode){openCodes.push(FontCode[style]);closeCodes.push(ResetCode[style])}else if(style in ColorCode){openCodes.push(ColorCode[style]);closeCodes.push(ResetCode.color)}else if(style in BgColorCode){openCodes.push(BgColorCode[style]);closeCodes.push(ResetCode.background)}};if(style instanceof Array){style.forEach(addStyle)}else{addStyle(style)}const open=openCodes.map((code=>"["+code+"m")).join("");const close=closeCodes.map((code=>"["+code+"m")).join("");return str.split("\n").map((line=>open+line+close)).join("\n")}exports.Colorize=Colorize;String.prototype.colorize=function(style){return Colorize(this,style)}},{"./process":36}],40:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.SimpleEventEmitter=void 0;function runCallback(callback,data){try{callback(data)}catch(err){console.error("Error in subscription callback",err)}}class SimpleEventEmitter{constructor(){this._subscriptions=[];this._oneTimeEvents=new Map}on(event,callback){if(this._oneTimeEvents.has(event)){return runCallback(callback,this._oneTimeEvents.get(event))}this._subscriptions.push({event:event,callback:callback,once:false});return this}off(event,callback){this._subscriptions=this._subscriptions.filter((s=>s.event!==event||callback&&s.callback!==callback));return this}once(event,callback){return new Promise((resolve=>{const ourCallback=data=>{resolve(data);callback===null||callback===void 0?void 0:callback(data)};if(this._oneTimeEvents.has(event)){runCallback(ourCallback,this._oneTimeEvents.get(event))}else{this._subscriptions.push({event:event,callback:ourCallback,once:true})}}))}emit(event,data){if(this._oneTimeEvents.has(event)){throw new Error(`Event "${event}" was supposed to be emitted only once`)}for(let i=0;i{if(this._internal.state==="active"){return resolve()}else if(this._internal.state==="canceled"&&!callback){return reject(new Error(this._internal.cancelReason))}const noop=()=>{};this._internal.activatePromises.push({resolve:resolve,reject:callback?noop:reject})}))}_setActivationState(activated,cancelReason){this._internal.cancelReason=cancelReason;this._internal.state=activated?"active":"canceled";while(this._internal.activatePromises.length>0){const p=this._internal.activatePromises.shift();if(activated){p.callback&&p.callback(true);p.resolve&&p.resolve()}else{p.callback&&p.callback(false,cancelReason);p.reject&&p.reject(cancelReason)}}}}exports.EventSubscription=EventSubscription;class EventPublisher{constructor(publish,start,cancel){this.publish=publish;this.start=start;this.cancel=cancel}}exports.EventPublisher=EventPublisher;class EventStream{constructor(eventPublisherCallback){const subscribers=[];let noMoreSubscribersCallback;let activationState;const _stoppedState="stopped (no more subscribers)";this.subscribe=(callback,activationCallback)=>{if(typeof callback!=="function"){throw new TypeError("callback must be a function")}else if(activationState===_stoppedState){throw new Error("stream can't be used anymore because all subscribers were stopped")}const sub={callback:callback,activationCallback:function(activated,cancelReason){activationCallback&&activationCallback(activated,cancelReason);this.subscription._setActivationState(activated,cancelReason)},subscription:new EventSubscription((function stop(){subscribers.splice(subscribers.indexOf(this),1);return checkActiveSubscribers()}))};subscribers.push(sub);if(typeof activationState!=="undefined"){if(activationState===true){activationCallback&&activationCallback(true);sub.subscription._setActivationState(true)}else if(typeof activationState==="string"){activationCallback&&activationCallback(false,activationState);sub.subscription._setActivationState(false,activationState)}}return sub.subscription};const checkActiveSubscribers=()=>{let ret;if(subscribers.length===0){ret=noMoreSubscribersCallback&&noMoreSubscribersCallback();activationState=_stoppedState}return Promise.resolve(ret)};this.unsubscribe=callback=>{const remove=callback?subscribers.filter((sub=>sub.callback===callback)):subscribers;remove.forEach((sub=>{const i=subscribers.indexOf(sub);subscribers.splice(i,1)}));checkActiveSubscribers()};this.stop=()=>{subscribers.splice(0);checkActiveSubscribers()};const publish=val=>{subscribers.forEach((sub=>{try{sub.callback(val)}catch(err){console.error(`Error running subscriber callback: ${err.message}`)}}));if(subscribers.length===0){checkActiveSubscribers()}return subscribers.length>0};const start=allSubscriptionsStoppedCallback=>{activationState=true;noMoreSubscribersCallback=allSubscriptionsStoppedCallback;subscribers.forEach((sub=>{sub.activationCallback&&sub.activationCallback(true)}))};const cancel=reason=>{activationState=reason;subscribers.forEach((sub=>{sub.activationCallback&&sub.activationCallback(false,reason||new Error("unknown reason"))}));subscribers.splice(0)};const publisher=new EventPublisher(publish,start,cancel);eventPublisherCallback(publisher)}}exports.EventStream=EventStream},{}],42:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.deserialize2=exports.serialize2=exports.serialize=exports.detectSerializeVersion=exports.deserialize=void 0;const path_reference_1=require("./path-reference");const utils_1=require("./utils");const ascii85_1=require("./ascii85");const path_info_1=require("./path-info");const partial_array_1=require("./partial-array");const deserialize=data=>{if(data.map===null||typeof data.map==="undefined"){if(typeof data.val==="undefined"){throw new Error("serialized value must have a val property")}return data.val}const deserializeValue=(type,val)=>{if(type==="date"){return new Date(val)}else if(type==="binary"){return ascii85_1.ascii85.decode(val)}else if(type==="reference"){return new path_reference_1.PathReference(val)}else if(type==="regexp"){return new RegExp(val.pattern,val.flags)}else if(type==="array"){return new partial_array_1.PartialArray(val)}else if(type==="bigint"){return BigInt(val)}return val};if(typeof data.map==="string"){return deserializeValue(data.map,data.val)}Object.keys(data.map).forEach((path=>{const type=data.map[path];const keys=path_info_1.PathInfo.getPathKeys(path);let parent=data;let key="val";let val=data.val;keys.forEach((k=>{key=k;parent=val;val=val[key]}));parent[key]=deserializeValue(type,val)}));return data.val};exports.deserialize=deserialize;const detectSerializeVersion=data=>{if(typeof data!=="object"||data===null){return 2}if("map"in data&&"val"in data){return 1}else if("val"in data){if(Object.keys(data).length>1){return 2}return 1}return 2};exports.detectSerializeVersion=detectSerializeVersion;const serialize=obj=>{var _a;if(obj===null||typeof obj!=="object"||obj instanceof Date||obj instanceof ArrayBuffer||obj instanceof path_reference_1.PathReference||obj instanceof RegExp){const ser=(0,exports.serialize)({value:obj});return{map:(_a=ser.map)===null||_a===void 0?void 0:_a.value,val:ser.val.value}}obj=(0,utils_1.cloneObject)(obj);const process=(obj,mappings,prefix)=>{if(obj instanceof partial_array_1.PartialArray){mappings[prefix]="array"}Object.keys(obj).forEach((key=>{const val=obj[key];const path=prefix.length===0?key:`${prefix}/${key}`;if(typeof val==="bigint"){obj[key]=val.toString();mappings[path]="bigint"}else if(val instanceof Date){obj[key]=val.toISOString();mappings[path]="date"}else if(val instanceof ArrayBuffer){obj[key]=ascii85_1.ascii85.encode(val);mappings[path]="binary"}else if(val instanceof path_reference_1.PathReference){obj[key]=val.path;mappings[path]="reference"}else if(val instanceof RegExp){obj[key]={pattern:val.source,flags:val.flags};mappings[path]="regexp"}else if(typeof val==="object"&&val!==null){process(val,mappings,path)}}))};const mappings={};process(obj,mappings,"");const serialized={val:obj};if(Object.keys(mappings).length>0){serialized.map=mappings}return serialized};exports.serialize=serialize;const serialize2=obj=>{const getSerializedValue=val=>{if(typeof val==="bigint"){return{".type":"bigint",".val":val.toString()}}else if(val instanceof Date){return{".type":"date",".val":val.toISOString()}}else if(val instanceof ArrayBuffer){return{".type":"binary",".val":ascii85_1.ascii85.encode(val)}}else if(val instanceof path_reference_1.PathReference){return{".type":"reference",".val":val.path}}else if(val instanceof RegExp){return{".type":"regexp",".val":`/${val.source}/${val.flags}`}}else if(typeof val==="object"&&val!==null){if(val instanceof Array){const copy=[];for(let i=0;i{if(typeof data!=="object"||data===null){return data}if(typeof data[".type"]==="undefined"){if(data instanceof Array){const copy=[];const arr=data;for(let i=0;i{const mkeys=path_info_1.PathInfo.getPathKeys(mpath);if(mkeys.length!==keys.length){return false}return mkeys.every(((mkey,index)=>{if(mkey==="*"||mkey[0]==="$"){return true}return mkey===keys[index]}))}));const mapping=mappings[mappedPath];return mapping}function map(mappings,path){const targetPath=path_info_1.PathInfo.get(path).parentPath;if(targetPath===null){return}return get(mappings,targetPath)}function mapDeep(mappings,entryPath){entryPath=entryPath.replace(/^\/|\/$/g,"");const pathInfo=path_info_1.PathInfo.get(entryPath);const startPath=pathInfo.parentPath;const keys=startPath?path_info_1.PathInfo.getPathKeys(startPath):[];const matches=Object.keys(mappings).reduce(((m,mpath)=>{const mkeys=path_info_1.PathInfo.getPathKeys(mpath);if(mkeys.length{if(index>=keys.length){return false}else if(mkey==="*"||mkey[0]==="$"||mkey===keys[index]){return true}else{isMatch=false;return false}}))}if(isMatch){const mapping=mappings[mpath];m.push({path:mpath,type:mapping})}return m}),[]);return matches}function process(db,mappings,path,obj,action){if(obj===null||typeof obj!=="object"){return obj}const keys=path_info_1.PathInfo.getPathKeys(path);const m=mapDeep(mappings,path);const changes=[];m.sort(((a,b)=>path_info_1.PathInfo.getPathKeys(a.path).length>path_info_1.PathInfo.getPathKeys(b.path).length?-1:1));m.forEach((mapping=>{const mkeys=path_info_1.PathInfo.getPathKeys(mapping.path);mkeys.push("*");const mTrailKeys=mkeys.slice(keys.length);if(mTrailKeys.length===0){const vars=path_info_1.PathInfo.extractVariables(mapping.path,path);const ref=new data_reference_1.DataReference(db,path,vars);if(action==="serialize"){obj=mapping.type.serialize(obj,ref)}else if(action==="deserialize"){const snap=new data_snapshot_1.DataSnapshot(ref,obj);obj=mapping.type.deserialize(snap)}return}const process=(parentPath,parent,keys)=>{if(obj===null||typeof obj!=="object"){return obj}const key=keys[0];let children=[];if(key==="*"||key[0]==="$"){if(parent instanceof Array){children=parent.map(((val,index)=>({key:index,val:val})))}else{children=Object.keys(parent).map((k=>({key:k,val:parent[k]})))}}else{const child=parent[key];if(typeof child==="object"){children.push({key:key,val:child})}}children.forEach((child=>{const childPath=path_info_1.PathInfo.getChildPath(parentPath,child.key);const vars=path_info_1.PathInfo.extractVariables(mapping.path,childPath);const ref=new data_reference_1.DataReference(db,childPath,vars);if(keys.length===1){if(action==="serialize"){changes.push({parent:parent,key:child.key,original:parent[child.key]});parent[child.key]=mapping.type.serialize(child.val,ref)}else if(action==="deserialize"){const snap=new data_snapshot_1.DataSnapshot(ref,child.val);parent[child.key]=mapping.type.deserialize(snap)}}else{process(childPath,child.val,keys.slice(1))}}))};process(path,obj,mTrailKeys)}));if(action==="serialize"){obj=(0,utils_1.cloneObject)(obj);if(changes.length>0){changes.forEach((change=>{change.parent[change.key]=change.original}))}}return obj}const _mappings=Symbol("mappings");class TypeMappings{constructor(db){this.db=db;this[_mappings]={}}get mappings(){return this[_mappings]}map(path){return map(this[_mappings],path)}bind(path,type,options={}){if(typeof path!=="string"){throw new TypeError("path must be a string")}if(typeof type!=="function"){throw new TypeError("constructor must be a function")}if(typeof options.serializer==="undefined"){}else if(typeof options.serializer==="string"){if(typeof type.prototype[options.serializer]==="function"){options.serializer=type.prototype[options.serializer]}else{throw new TypeError(`${type.name}.prototype.${options.serializer} is not a function, cannot use it as serializer`)}}else if(typeof options.serializer!=="function"){throw new TypeError(`serializer for class ${type.name} must be a function, or the name of a prototype method`)}if(typeof options.creator==="undefined"){if(typeof type.create==="function"){options.creator=type.create}}else if(typeof options.creator==="string"){if(typeof type[options.creator]==="function"){options.creator=type[options.creator]}else{throw new TypeError(`${type.name}.${options.creator} is not a function, cannot use it as creator`)}}else if(typeof options.creator!=="function"){throw new TypeError(`creator for class ${type.name} must be a function, or the name of a static method`)}path=path.replace(/^\/|\/$/g,"");this[_mappings][path]={db:this.db,type:type,creator:options.creator,serializer:options.serializer,deserialize(snap){let obj;if(this.creator){obj=this.creator.call(this.type,snap)}else{obj=new this.type(snap)}return obj},serialize(obj,ref){if(this.serializer){obj=this.serializer.call(obj,ref,obj)}else if(obj&&typeof obj.serialize==="function"){obj=obj.serialize(ref,obj)}return obj}}}serialize(path,obj){return process(this.db,this[_mappings],path,obj,"serialize")}deserialize(path,obj){return process(this.db,this[_mappings],path,obj,"deserialize")}}exports.TypeMappings=TypeMappings},{"./data-reference":26,"./data-snapshot":27,"./path-info":34,"./utils":44}],44:[function(require,module,exports){(function(Buffer){(function(){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.defer=exports.getChildValues=exports.getMutations=exports.compareValues=exports.ObjectDifferences=exports.valuesAreEqual=exports.cloneObject=exports.concatTypedArrays=exports.decodeString=exports.encodeString=exports.bytesToBigint=exports.bigintToBytes=exports.bytesToNumber=exports.numberToBytes=void 0;const path_reference_1=require("./path-reference");const process_1=require("./process");const partial_array_1=require("./partial-array");function numberToBytes(number){const bytes=new Uint8Array(8);const view=new DataView(bytes.buffer);view.setFloat64(0,number);return new Array(...bytes)}exports.numberToBytes=numberToBytes;function bytesToNumber(bytes){const length=Array.isArray(bytes)?bytes.length:bytes.byteLength;if(length!==8){throw new TypeError("must be 8 bytes")}const bin=new Uint8Array(bytes);const view=new DataView(bin.buffer);const nr=view.getFloat64(0);return nr}exports.bytesToNumber=bytesToNumber;const big={zero:BigInt(0),one:BigInt(1),two:BigInt(2),eight:BigInt(8),ff:BigInt(255)};function bigintToBytes(number){if(typeof number!=="bigint"){throw new Error("number must be a bigint")}const bytes=[];const negative=number>big.eight}while(number!==(negative?-big.one:big.zero));bytes.reverse();if(negative?bytes[0]<128:bytes[0]>=128){bytes.unshift(negative?255:0)}return bytes}exports.bigintToBytes=bigintToBytes;function bytesToBigint(bytes){const negative=bytes[0]>=128;let number=big.zero;for(let b of bytes){if(negative){b=~b&255}number=(number<128){if((code&55296)===55296){const nextCode=str.charCodeAt(i+1);if((nextCode&56320)!==56320){throw new Error("follow-up utf-16 character does not start with 0xDC00")}i++;const p1=code&1023;const p2=nextCode&1023;code=65536|p1<<10|p2}if(code<2048){const b1=192|code>>6&31;const b2=128|code&63;arr.push(b1,b2)}else if(code<65536){const b1=224|code>>12&15;const b2=128|code>>6&63;const b3=128|code&63;arr.push(b1,b2,b3)}else if(code<2097152){const b1=240|code>>18&7;const b2=128|code>>12&63;const b3=128|code>>6&63;const b4=128|code&63;arr.push(b1,b2,b3,b4)}else{throw new Error(`Cannot convert character ${str.charAt(i)} (code ${code}) to utf-8`)}}else{arr.push(code<128?code:63)}}return new Uint8Array(arr)}}exports.encodeString=encodeString;function decodeString(buffer){if(typeof TextDecoder!=="undefined"){const decoder=new TextDecoder;if(buffer instanceof Uint8Array){return decoder.decode(buffer)}const buf=Uint8Array.from(buffer);return decoder.decode(buf)}else if(typeof Buffer==="function"){if(buffer instanceof Array){buffer=Uint8Array.from(buffer)}if(!(buffer instanceof Buffer)&&"buffer"in buffer&&buffer.buffer instanceof ArrayBuffer){const typedArray=buffer;buffer=Buffer.from(typedArray.buffer,typedArray.byteOffset,typedArray.byteLength)}if(!(buffer instanceof Buffer)){throw new Error("Unsupported buffer argument")}return buffer.toString("utf-8")}else{if(!(buffer instanceof Uint8Array)&&"buffer"in buffer&&buffer["buffer"]instanceof ArrayBuffer){const typedArray=buffer;buffer=new Uint8Array(typedArray.buffer,typedArray.byteOffset,typedArray.byteLength)}if(buffer instanceof Buffer||buffer instanceof Array||buffer instanceof Uint8Array){let str="";for(let i=0;i128){if((code&240)===240){const b1=code,b2=buffer[i+1],b3=buffer[i+2],b4=buffer[i+3];code=(b1&7)<<18|(b2&63)<<12|(b3&63)<<6|b4&63;i+=3}else if((code&224)===224){const b1=code,b2=buffer[i+1],b3=buffer[i+2];code=(b1&15)<<12|(b2&63)<<6|b3&63;i+=2}else if((code&192)===192){const b1=code,b2=buffer[i+1];code=(b1&31)<<6|b2&63;i++}else{throw new Error("invalid utf-8 data")}}if(code>=65536){code^=65536;const p1=55296|code>>10;const p2=56320|code&1023;str+=String.fromCharCode(p1);str+=String.fromCharCode(p2)}else{str+=String.fromCharCode(code)}}return str}else{throw new Error("Unsupported buffer argument")}}}exports.decodeString=decodeString;function concatTypedArrays(a,b){const c=new a.constructor(a.length+b.length);c.set(a);c.set(b,a.length);return c}exports.concatTypedArrays=concatTypedArrays;function cloneObject(original,stack){var _a;if(((_a=original===null||original===void 0?void 0:original.constructor)===null||_a===void 0?void 0:_a.name)==="DataSnapshot"){throw new TypeError(`Object to clone is a DataSnapshot (path "${original.ref.path}")`)}const checkAndFixTypedArray=obj=>{if(obj!==null&&typeof obj==="object"&&typeof obj.constructor==="function"&&typeof obj.constructor.name==="string"&&["Buffer","Uint8Array","Int8Array","Uint16Array","Int16Array","Uint32Array","Int32Array","BigUint64Array","BigInt64Array"].includes(obj.constructor.name)){obj=obj.buffer.slice(obj.byteOffset,obj.byteOffset+obj.byteLength)}return obj};original=checkAndFixTypedArray(original);if(typeof original!=="object"||original===null||original instanceof Date||original instanceof ArrayBuffer||original instanceof path_reference_1.PathReference||original instanceof RegExp){return original}const cloneValue=val=>{if(stack.indexOf(val)>=0){throw new ReferenceError("object contains a circular reference")}val=checkAndFixTypedArray(val);if(val===null||val instanceof Date||val instanceof ArrayBuffer||val instanceof path_reference_1.PathReference||val instanceof RegExp){return val}else if(typeof val==="object"){stack.push(val);val=cloneObject(val,stack);stack.pop();return val}else{return val}};if(typeof stack==="undefined"){stack=[original]}const clone=original instanceof Array?[]:original instanceof partial_array_1.PartialArray?new partial_array_1.PartialArray:{};Object.keys(original).forEach((key=>{const val=original[key];if(typeof val==="function"){return}clone[key]=cloneValue(val)}));return clone}exports.cloneObject=cloneObject;const isTypedArray=val=>typeof val==="object"&&["ArrayBuffer","Buffer","Uint8Array","Uint16Array","Uint32Array","Int8Array","Int16Array","Int32Array"].includes(val.constructor.name);function valuesAreEqual(val1,val2){if(val1===val2){return true}if(typeof val1!==typeof val2){return false}if(typeof val1==="object"||typeof val2==="object"){if(val1===null||val2===null){return false}if(val1 instanceof path_reference_1.PathReference||val2 instanceof path_reference_1.PathReference){return val1 instanceof path_reference_1.PathReference&&val2 instanceof path_reference_1.PathReference&&val1.path===val2.path}if(val1 instanceof Date||val2 instanceof Date){return val1 instanceof Date&&val2 instanceof Date&&val1.getTime()===val2.getTime()}if(val1 instanceof Array||val2 instanceof Array){return val1 instanceof Array&&val2 instanceof Array&&val1.length===val2.length&&val1.every(((item,i)=>valuesAreEqual(val1[i],val2[i])))}if(isTypedArray(val1)||isTypedArray(val2)){if(!isTypedArray(val1)||!isTypedArray(val2)||val1.byteLength===val2.byteLength){return false}const typed1=val1 instanceof ArrayBuffer?new Uint8Array(val1):new Uint8Array(val1.buffer,val1.byteOffset,val1.byteLength),typed2=val2 instanceof ArrayBuffer?new Uint8Array(val2):new Uint8Array(val2.buffer,val2.byteOffset,val2.byteLength);return typed1.every(((val,i)=>typed2[i]===val))}const keys1=Object.keys(val1),keys2=Object.keys(val2);return keys1.length===keys2.length&&keys1.every((key=>keys2.includes(key)))&&keys1.every((key=>valuesAreEqual(val1[key],val2[key])))}return false}exports.valuesAreEqual=valuesAreEqual;class ObjectDifferences{constructor(added,removed,changed){this.added=added;this.removed=removed;this.changed=changed}forChild(key){if(this.added.includes(key)){return"added"}if(this.removed.includes(key)){return"removed"}const changed=this.changed.find((ch=>ch.key===key));return changed?changed.change:"identical"}}exports.ObjectDifferences=ObjectDifferences;function compareValues(oldVal,newVal,sortedResults=false){const voids=[undefined,null];if(oldVal===newVal){return"identical"}else if(voids.indexOf(oldVal)>=0&&voids.indexOf(newVal)<0){return"added"}else if(voids.indexOf(oldVal)<0&&voids.indexOf(newVal)>=0){return"removed"}else if(typeof oldVal!==typeof newVal){return"changed"}else if(isTypedArray(oldVal)||isTypedArray(newVal)){if(!isTypedArray(oldVal)||!isTypedArray(newVal)){return"changed"}const typed1=oldVal instanceof Uint8Array?oldVal:oldVal instanceof ArrayBuffer?new Uint8Array(oldVal):new Uint8Array(oldVal.buffer,oldVal.byteOffset,oldVal.byteLength);const typed2=newVal instanceof Uint8Array?newVal:newVal instanceof ArrayBuffer?new Uint8Array(newVal):new Uint8Array(newVal.buffer,newVal.byteOffset,newVal.byteLength);return typed1.byteLength===typed2.byteLength&&typed1.every(((val,i)=>typed2[i]===val))?"identical":"changed"}else if(oldVal instanceof Date||newVal instanceof Date){return oldVal instanceof Date&&newVal instanceof Date&&oldVal.getTime()===newVal.getTime()?"identical":"changed"}else if(oldVal instanceof path_reference_1.PathReference||newVal instanceof path_reference_1.PathReference){return oldVal instanceof path_reference_1.PathReference&&newVal instanceof path_reference_1.PathReference&&oldVal.path===newVal.path?"identical":"changed"}else if(typeof oldVal==="object"){const isArray=oldVal instanceof Array;const getKeys=obj=>{let keys=Object.keys(obj).filter((key=>!voids.includes(obj[key])));if(isArray){keys=keys.map((v=>parseInt(v)))}return keys};const oldKeys=getKeys(oldVal);const newKeys=getKeys(newVal);const removedKeys=oldKeys.filter((key=>!newKeys.includes(key)));const addedKeys=newKeys.filter((key=>!oldKeys.includes(key)));const changedKeys=newKeys.reduce(((changed,key)=>{if(oldKeys.includes(key)){const val1=oldVal[key];const val2=newVal[key];const c=compareValues(val1,val2);if(c!=="identical"){changed.push({key:key,change:c})}}return changed}),[]);if(addedKeys.length===0&&removedKeys.length===0&&changedKeys.length===0){return"identical"}else{return new ObjectDifferences(addedKeys,removedKeys,sortedResults?changedKeys.sort(((a,b)=>a.key{switch(compareResult){case"identical":return[];case"changed":return[{target:target,prev:prev,val:val}];case"added":return[{target:target,prev:null,val:val}];case"removed":return[{target:target,prev:prev,val:null}];default:{let changes=[];compareResult.added.forEach((key=>changes.push({target:target.concat(key),prev:null,val:val[key]})));compareResult.removed.forEach((key=>changes.push({target:target.concat(key),prev:prev[key],val:null})));compareResult.changed.forEach((item=>{const childChanges=process(target.concat(item.key),item.change,prev[item.key],val[item.key]);changes=changes.concat(childChanges)}));return changes}}};const compareResult=compareValues(oldVal,newVal,sortedResults);return process([],compareResult,oldVal,newVal)}exports.getMutations=getMutations;function getChildValues(childKey,oldValue,newValue){oldValue=oldValue===null?null:oldValue[childKey];if(typeof oldValue==="undefined"){oldValue=null}newValue=newValue===null?null:newValue[childKey];if(typeof newValue==="undefined"){newValue=null}return{oldValue:oldValue,newValue:newValue}}exports.getChildValues=getChildValues;function defer(fn){process_1.default.nextTick(fn)}exports.defer=defer}).call(this)}).call(this,require("buffer").Buffer)},{"./partial-array":33,"./path-reference":35,"./process":36,buffer:16}]},{},[5])(5)})); \ No newline at end of file diff --git a/dist/cjs/api-web.js b/dist/cjs/api-web.js index 6e6c6ec..8a8b37c 100644 --- a/dist/cjs/api-web.js +++ b/dist/cjs/api-web.js @@ -587,7 +587,7 @@ class WebApi extends acebase_core_1.Api { pathSubs.splice(pathSubs.indexOf(subscr), 1); if (this.hasCache) { // Events are also handled by cache db, also remove those - if (typeof subscr.cacheCallback !== 'undefined') { + if (typeof subscr.cacheCallback !== 'function') { throw new Error('DEV ERROR: When subscription was added, cacheCallback must have been set'); } this.cache.db.api.unsubscribe(acebase_core_1.PathInfo.getChildPath(`${this.dbname}/cache`, path), subscr.event, subscr.cacheCallback); diff --git a/dist/cjs/api-web.js.map b/dist/cjs/api-web.js.map index 3099822..cd8d2a3 100644 --- a/dist/cjs/api-web.js.map +++ b/dist/cjs/api-web.js.map @@ -1 +1 @@ -{"version":3,"file":"api-web.js","sourceRoot":"","sources":["../../src/ts/api-web.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"api-web.js","sourceRoot":"","sources":["../../src/ts/api-web.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/types/api-web.d.ts b/dist/types/api-web.d.ts index 1ef29a7..3e0ab3d 100644 --- a/dist/types/api-web.d.ts +++ b/dist/types/api-web.d.ts @@ -1,6 +1,5 @@ -import { Api, EventSubscriptionCallback, DebugLogger, Query, QueryOptions } from 'acebase-core'; +import { Api, EventSubscriptionCallback, DebugLogger, Query, QueryOptions, ValueChange, ValueMutation } from 'acebase-core'; import { AceBaseUser } from './user'; -import { ValueChange, ValueMutation } from 'acebase-core/src/api'; import { AceBaseClientConnectionSettings } from './acebase-client'; export interface IAceBaseAuthProviderSignInResult { user: AceBaseUser;